免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

unity3鼠標點擊移動

這個總共可以分為三個部分:
第一:如何取得目標地點
第二:看向目標地點,并向其移動
第三:障礙物判斷
我們先看第一個問題如何獲得目標點:首先打開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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設