大型游戲中經常會有這種場景,點擊屏幕位置,人物就會朝着鼠標點擊位置移動,下面我們就來實現這種效果。
首先,我們在場景中添加一個Plane,並且設置它的tag為Plane,然后,在Plane上面添加一個Cube,設置好位置,剛好放置在Plane上面,最后,給cube添加一個腳本,腳本內容如下:
using UnityEngine; using System.Collections; public class RayCastTest : MonoBehaviour { //cube移動速度 public float speed = 3f; private Vector3 offsetVec; // Update is called once per frame void Update () { RaycastHit hitInfo; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hitInfo, 100)) { //當射線碰撞到plane並且鼠標左鍵按下時 if(hitInfo.transform.tag == "Plane" && Input.GetMouseButtonDown(0)) { //讓cube方向朝向點擊位置 transform.LookAt(hitInfo.point); offsetVec = hitInfo.point - transform.position; } } //向量的magnitude表示這個向量的長度,當cube離我們點擊位置小於1的時候才停止移動,這個數值可以自己調節 if(offsetVec.magnitude > 1f) { transform.Translate(Vector3.forward * speed * Time.deltaTime); //更新offsetVec的值 offsetVec = hitInfo.point - transform.position; } } }
運行的時候可能會出現一些bug,比如說cube往前移動的時候,坐標會逐漸往下偏移,這種現象是因為點擊位置的坐標比cube坐標偏下,獲取到點擊位置坐標的時候修改一下Y軸大小可消除這個bug。