Unity3d鼠标点击屏幕来控制人物的走动
?? 今天呢,我們來一起實現一個在RPG中游戲中十分常見的功能,通過鼠標點擊屏幕來控制人物的走動。首先來說一下原理,當我們點擊屏幕時,我們按照一定的方法,將屏幕上的二維坐標轉化為三維坐標,然后我們從攝像機位置發射 一條經過該點的射線,則這條射線與大地平面的交點,就是我們的目標位置。那么確定了這個位置以后,我們需要做的就是讓角色從原來的位置移動到這個位置,并在其間添加角色動畫即可。對于角色移動的問題,如果復雜點的畫我們可能要計算移動的方向向量,并針對起點和終點進行插值計算來實現,這里我們選擇一種相對簡單的辦法,在Unity3D中,有一個LookAt()方法,該方法可以使物體發生旋轉,使其z軸始終指向目標物體。再完成了旋轉后,我們需要讓物體沿著Z軸方向(forward)移動。這樣就實現了鼠標點擊控制人物走動這一功能。好了,下面我們來一起看今天的內容吧!
? ? ?首先創建一個場景,我們準備一個地形Terrain和平行光Direction Light,并拖入我們事先準備好的人物模型,如圖:
? ?接下來為模型添加動畫組件,并將動畫的類型設置為Legacy模式,如圖所示:
? ? ?我們設置默認的動畫為idle,接下來,我們來編寫腳本代碼:
using UnityEngine; using System.Collections;public class PeopleControl : MonoBehaviour { //目標點坐標 private Vector3 mTargetPos; void Start () { } void Update () { //按下鼠標右鍵時 if(Input.GetMouseButton(1)) { //獲取屏幕坐標 Vector3 mScreenPos=Input.mousePosition; //定義射線 Ray mRay=Camera.main.ScreenPointToRay(mScreenPos); RaycastHit mHit; //判斷射線是否擊中地面 if(Physics.Raycast(mRay,out mHit)) { if(mHit.collider.gameObject.tag=="Terrain") { //獲取目標坐標 mTargetPos=mHit.point; //讓主角面朝目標坐標并向目標移動 transform.LookAt(mTargetPos); //播放奔跑動畫 transform.gameObject.GetComponent<Animation>().Play("run"); transform.Translate(Vector3.forward * 0.5F); } } } //松開鼠標右鍵時 if(Input.GetMouseButtonUp(1)) { transform.gameObject.GetComponent<Animation>().Play("idle"); } } } ? ? ? ?將腳本綁定到角色上以后,我們就能看到下面的效果啦,哈哈:)
? ? ? ?這就是今天的內容啦,當然我們還需要解決的問題還有如何在控制人物走動的時候避免和其它物體發生碰撞,以及后續的優化問題,這些內容我們會在后面的文章中為大家解答,謝謝大家!喜歡我請記住我的名字
總結
以上是生活随笔為你收集整理的Unity3d鼠标点击屏幕来控制人物的走动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity3d]鼠标点击地面人物自动走动
- 下一篇: unity3d 摄像机跟随鼠标和键盘的