转载:https://www.taikr.com/article/3926
void Start() { } // Update is called once per frame void Update() { FollowMouseRotate(); FollowMouseMove(); } //物体跟随鼠标旋转 private void FollowMouseRotate() { //获取鼠标的坐标,鼠标是屏幕坐标,Z轴为0,这里不做转换 Vector3 mouse = Input.mousePosition; //获取物体坐标,物体坐标是世界坐标,将其转换成屏幕坐标,和鼠标一直 Vector3 obj = Camera.main.WorldToScreenPoint(transform.position); //屏幕坐标向量相减,得到指向鼠标点的目标向量,即黄色线段 Vector3 direction = mouse - obj; //将Z轴置0,保持在2D平面内 direction.z = 0f; //将目标向量长度变成1,即单位向量,这里的目的是只使用向量的方向,不需要长度,所以变成1 direction = direction.normalized; //物体自身的Y轴和目标向量保持一直,这个过程XY轴都会变化数值 transform.up = direction; } //跟随鼠标移动 private void FollowMouseMove() { float moveSpeed = 3.0f; if (Input.GetTouch(0).phase == TouchPhase.Moved) //如果按下鼠标左键,移动速度变快 { moveSpeed = 6.0f; transform.Translate(Vector3.up * moveSpeed * Time.deltaTime); } else { transform.Translate(Vector3.up * moveSpeed * Time.deltaTime); } }