[海莉zhe] 鼠标实现物体拖动带拖尾的效果
发表于2016-08-19
今天,小编为大家分享一下,用鼠标拖动物体,还带一个小尾巴效果哈!
【+V:Anime__King】
【+V:Anime__King】1、新建一个unity项目,新建一个测试场景、一个MoveTo.cs类附加在GameObject(命名:MoveObjByMouse)上
2、在MoveObjByMouse 必须要附加一个Mesh collider(而且包含一个材质)
3、在MoveObjByMouse 添加一个子对象 SubTail,并且附上Trail Renderer组件
4、然后,重要的一步来了。附上MoveTo.cs代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //下面的函数是当鼠标触碰到碰撞体或者刚体时调用,我的碰撞体设置是mesh collider,然后别忘了,给这个collider添加物理材质 //世界坐标系转化为屏幕坐标系,Z轴是不变的 IEnumerator OnMouseDown() { //将物体由世界坐标系转化为屏幕坐标系 ,由vector3 结构体变量ScreenSpace存储,以用来明确屏幕坐标系Z轴的位置 Vector3 ScreenSpace = Camera.main.WorldToScreenPoint(transform.position); //完成了两个步骤,1由于鼠标的坐标系是2维的,需要转化成3维的世界坐标系,2只有三维的情况下才能来计算鼠标位置与物体的距离,offset即是距离 Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, ScreenSpace.z)); //当鼠标左键按下时 while (Input.GetMouseButton(0)) { //得到现在鼠标的2维坐标系位置 Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, ScreenSpace.z); //将当前鼠标的2维位置转化成三维的位置,再加上鼠标的移动量 Vector3 CurPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; //CurPosition就是物体应该的移动向量赋给transform的position属性 transform.position = CurPosition; yield return new WaitForFixedUpdate(); } }} |
5、最后,当然是运行项目看效果啦!

