[海莉zhe] 鼠标实现物体拖动带拖尾的效果

发表于2016-08-19
评论0 498浏览
  今天,小编为大家分享一下,用鼠标拖动物体,还带一个小尾巴效果哈!【+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、最后,当然是运行项目看效果啦!

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引