利用射线实现鼠标控制角色转向和移动
2016-01-16 10:18
686 查看
下面的代码配合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 initialization 11 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 else 30 { 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 }
相关文章推荐
- 汇编指令与机器码
- opengl入门4
- opengl入门3
- unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- c语言静态变量和静态函数
- mac 上传文件到 github
- set集合中的contains操作
- opengl入门2
- 百度地图-----密钥申请
- 破解DLL的一点心得体会
- opengl入门1
- IOS网络篇:JSON和XML的解析
- iOS8地图定位-CoreLocation
- ExecuteScalar 返回值问题
- 所有Mac用户都需要知道的9个实用终端命令行<转>
- 在C++Builder2010中配置OpenCV2.2
- SDL附着window窗口的方法
- dedecms 网站优化技巧
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)【转】
- 在SQL 中 ntext和text类型的的区别