1. 程式人生 > >[Unity3D]Unity3D遊戲開發之史上最簡單的滑鼠點選控制人物走動實現

[Unity3D]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");
	  }
	}
}
       將指令碼繫結到角色上以後,我們就能看到下面的效果啦,哈哈:)


       這就是今天的內容啦,當然我們還需要解決的問題還有如何在控制人物走動的時候避免和其它物體發生碰撞,以及後續的優化問題,這些內容我們會在後面的文章中為大家解答,謝謝大家!喜歡我請記住我的名字:秦元培,我的部落格地址是: