物体移动

来源:互联网 发布:外国人看淘宝 编辑:程序博客网 时间:2024/05/01 17:39

物体向鼠标点击位置移动

假设需要移动的物体为Cube(cube)。关键是获取鼠标的位置Input.MousePosition(屏幕坐标),然后将鼠标位置转为世界坐标(其中需要先将Cube的世界坐标转为屏幕坐标,将其z值赋予给MousePosition.z),计算出Cube当前位置与MousePosition之间的距离。

public GameObject cube;    private Camera _camera;    public float speed=3;    private Vector3 cubeScreenPosion;    private Vector3 mousePositionWorld;    private float xx;    private float yy;    private float angle;    private float speedX;    private float speedY;    private float dis;    private float tempDis;    private bool flag=false;    // Use this for initialization    void Start () {        _camera=Camera.main;//获取cube屏幕坐标(由世界坐标转为屏幕坐标)       cubeScreenPosion=this._camera.WorldToScreenPoint(cube.transform.position);        tempDis=0;    }    // Update is called once per frame    void Update () {        if(Input.GetMouseButtonDown(0)){            Vector3 mousePosition=Input.mousePosition;//获取鼠标的屏幕坐标            mousePosition.z=cubeScreenPosion.z;//将cube屏幕坐标的z赋给鼠标屏幕坐标            mousePositionWorld=this._camera.ScreenToWorldPoint(mousePosition);//鼠标屏幕坐标转为世界坐标            xx=mousePositionWorld.x-cube.transform.position.x;            yy=mousePositionWorld.y-cube.transform.position.y;            dis=Mathf.Sqrt(xx*xx+yy*yy);            angle=Mathf.Atan2(yy,xx);           speedX=Mathf.Cos(angle)*speed*Time.deltaTime;           speedY=Mathf.Sin(angle)*speed*Time.deltaTime;            flag=true;        }        if(flag){        cube.transform.Translate(Vector3.right*speedX);        cube.transform.Translate(Vector3.up*speedY);        tempDis+=speed*Time.deltaTime;        if(tempDis>=dis){                flag=false;                cube.transform.position=mousePositionWorld;            }        }    }
0 0
原创粉丝点击