【原】unity3d 鼠標點擊 控制人物行走


實現思路:鼠標點擊,產生目標點,計算角色和目標點的夾角,旋轉角色朝向目標點,然后移動角色。

看到很多人瀏覽了這篇博文 ,有人建議寫點注釋,我就簡單注釋一下。
 1 void Update () 
 2 {
 3        if(Input.GetMouseButtonDown(0))
 4        {
 5                 RayControl();
 6        }
 7        if(flagMove)
 8        {
 9               if(Vector3.Distance(transform.position,mousePos)>1)
10               {
11                         transform.Translate(transform.worldToLocalMatrix* transform.forward * Time.deltaTime*5);//transform.forward是世界坐標,通過transform.worldToLocalMatrix轉換矩陣轉到本地坐標然后在本地坐標運動,沒有必要必須在本地坐標系運動 但是必須注意要統一起來。
12               }
13               else
14               {
15                       flagMove=false;
16               }
17       }
18 }
19 void RayControl()
20 {
21       Ray ray=Camera.main.ScreenPointToRay  (Input.mousePosition);//向屏幕發射一條射線
22       if(Physics.Raycast(ray,out hit,200))射線長度為200 和地面的碰撞盒做檢測
23       {
24                GameObject targetPos=GameObject.CreatePrimitive(PrimitiveType.Sphere);//實例化一個Sphere
25                targetPos.transform.localScale=new Vector3(0.5f,0.5f,0.5f);
26                mousePos=hit.point;//獲取碰撞點坐標
27                mousePos.y=transform.position.y;
28                targetPos.transform.position=mousePos;//Sphere放到鼠標點擊的地方
29                targetDir=mousePos-transform.position;//計算出朝向
30                Vector3 tempDir=Vector3.Cross(transform.forward,targetDir.normalized);//用叉乘判斷兩個向量是否同方向
31                float dotValue=Vector3.Dot(transform.forward,targetDir.normalized);//點乘計算兩個向量的夾角,及角色和目標點的夾角
32                float angle=Mathf.Acos(dotValue)*Mathf.Rad2Deg;
33                if(tempDir.y<0)//這塊 說明兩個向量方向相反,這個判斷用來確定假如兩個之間夾角30度 到底是順時 還是逆時針旋轉。
34                {
35                    angle=angle*(-1);
36                }
37                print(tempDir.y);
38                print("2:"+angle);
39                transform.RotateAround(transform.position,Vector3.up,angle);
40                flagMove=true;
41         }
42 }

 


注意事項:寫完了才發現原來沒必要這么麻煩,這樣transform.forward=(mousePos-transform.position).normalized 就可以直接讓角色朝向目標點 RayControl函數 好多都可以省了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM