由于最近搞2D游戏, 下面的代码配合NGUI来使用 。。。 将代码拖到角色身上就OK, 实现了角色转向、移动 ,想看效果的可以将代码下下来~
用到了向量来计算角度 以及方向, 得恶补下向量知识了 。。。
代码参考:
1 using UnityEngine; 2 using System.Collections; 3 4 public class Test : MonoBehaviour { 5 6 private bool flagMove; 7 private RaycastHit hit; 8 private Vector3 mousePos; 9 private Vector3 targetDir;10 // Use this for initialization11 void Start () 12 {13 flagMove = false;14 }15 16 void Update ()17 {18 19 if(Input.GetMouseButtonDown(0))20 {21 RayControl();22 }23 if(flagMove)24 {25 if(Vector3.Distance(transform.position,mousePos)>0.1)26 {27 transform.Translate(transform.worldToLocalMatrix* transform.right * Time.deltaTime*0.5f);28 }29 else30 {31 flagMove=false;32 }33 }34 }35 36 void RayControl()37 {38 Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);//从Camera发射射线到屏幕39 if(Physics.Raycast(ray,out hit))//射线碰撞检测40 {41 mousePos=hit.point;42 mousePos.z=transform.position.z;43 targetDir=mousePos-transform.position;//计算到目标点的方向 44 Vector3 tempDir=Vector3.Cross(transform.right,targetDir.normalized);45 float dotValue=Vector3.Dot(transform.right,targetDir.normalized);46 float angle=Mathf.Acos(dotValue)*Mathf.Rad2Deg;//计算夹角47 if(tempDir.z < 0)//根据叉乘判断夹角的正负48 {49 angle=angle*(-1);50 }51 if(!float.IsNaN(angle))52 {53 transform.RotateAround(transform.position,Vector3.forward,angle);//转向目标点54 }55 56 flagMove=true;57 }58 }59 }源码参考:http://files.cnblogs.com/xuling/RoleMove.zip
转载于:https://www.cnblogs.com/xuling/archive/2013/03/05/2944939.html