這個總共可以分為三個部分:
第一:如何取得目標地點
第二:看向目標地點,并向其移動
第三:障礙物判斷
我們先看第一個問題如何獲得目標點:首先打開unity3d,新建一個工程檔。
創建一個Cube調整大小,制作成地面的形式,并修改名稱為“ floor ”把攝像機調整到適合的角度。
創建一個C#腳本,命名為“Pathfinding ”。
在腳本中輸入以下代碼:
void Update ()
{
//當單機鼠標時
void Update ()
{
if(Input.GetMouseButtonDown(0))
{
//定義一條從主相機射向鼠標位置的一條射向
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
//判斷射線是否發生碰撞
if (Physics.Raycast(ray, out hit, 100))
{
//判斷碰撞物體是否為floor
if(hit.collider.gameObject.name=="floor")
{
//打印出碰撞點的坐標
Debug.Log(hit.point);
}
}
}
}
將代碼添加到我們的相機物體上,運行游戲,鼠標在我們創建的地面上點擊,控制臺就會輸出點擊點的坐標,
通過上面的簡單的例子,我們就可以得到目的點的坐標,具體做法:當我們點擊鼠標時,從我們的攝像機朝我們鼠標的方向發射一條射線,當射線與地面發生碰撞時,輸出碰撞點的坐標,這個坐標就是鼠標點擊到地面的點的坐標,也就是目標點坐標。
坐標點已經找到了,下面一部就是要讓我們的游戲物體看向這個坐標點,
有一種簡單的方法就是直接讓我們的主角lookat這個坐標點。
下面我們新建一個游戲對象,作為我們的主角并修改名稱為“person”;
補充腳本如下:
private GameObject play;
void Start ()
{
play=GameObject.Find("person");
}
// Use this for initialization
void Update ()
{
if(Input.GetMouseButtonDown(0))
{
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100))
{
if(hit.collider.gameObject.name=="floor")
{
Debug.Log(hit.point);
play.transform.LookAt(hit.point);
}
}
}
}
運行游戲,當我們點擊地面時,游戲物體旋轉方向看向我們點擊的點,
這樣做有一個問題,主角會瞬間旋轉到我們需要的角度,我們現在要控制他的旋轉速度,讓其緩慢旋轉。
這就要用到另外一種做法;用到四元數組transform.rotation = Quaternion.Slerp (from.rotation, to.rotation,Time.time * speed);
from.rotation為初始角度,
to.rotation為目標角度
speed為旋轉速度,
利用者個方法,我們就可以實現讓物體緩慢旋轉到我們要的指定角度,
具體做法,新建一個空物體,命名為To_rotation,將其作為person 物體的子物體,
代碼補充如下:
public Transform to;
public float speed = 5F;
private GameObject play;
void Start ()
{
play=GameObject.Find("person");
to=GameObject.Find("To_rotation ");
}
// Use this for initialization
void Update ()
{
if(Input.GetMouseButtonDown(0))
{
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100))
{
if(hit.collider.gameObject.name=="floor")
{
Debug.Log(hit.point);
//點擊地面后解除to的父子關系;并讓我lookat目標點;
to.transform.parent = null;
to.LookAt(hit.point);
}
}
}
//如果我們的play 的旋轉角度與to的角度相同,則恢復其父子關系,并將其坐標歸零
if(play.transform.rotation==to.rotation)
{
to.transform.parent=play.transform;
to.transform.localPosition = new Vector3(0, 0, 0);
}
else
//如果play 與to的角度不同,則旋轉play至to所在的角度
play.transform.rotation = Quaternion.Slerp(play.transform.rotation, to.rotation, speed);
}
執行代碼,的到我們想要的效果;
“只有客戶發展了,才有我們的生存與發展!”這是創新互聯建站的服務宗旨!把網站當作互聯網產品,產品思維更注重全局思維、需求分析和迭代思維,在網站建設中就是為了建設一個不僅審美在線,而且實用性極高的網站。創新互聯對成都網站設計、成都做網站、網站制作、網站開發、網頁設計、網站優化、網絡推廣、探索永無止境。
文章標題:unity3鼠標點擊移動
文章起源:http://m.newbst.com/article38/ppispp.html
成都網站建設公司_創新互聯,為您提供企業網站制作、營銷型網站建設、建站公司、網站維護、移動網站建設、云服務器
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯