【unity3d游戲開發之基礎篇】利用射線實現鼠標控制角色轉向和移動(角色移動一)



 由於最近搞2D游戲, 下面的代碼配合NGUI來使用 。。。 將代碼拖到角色身上就OK, 實現了角色轉向、移動 ,想看效果的可以將代碼下下來~ 

 用到了向量來計算角度 以及方向,   得惡補下向量知識了 。。。 

 

代碼參考:

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class Test : MonoBehaviour {
 5     
 6     private bool flagMove;
 7     private RaycastHit hit;
 8     private Vector3 mousePos;
 9     private Vector3 targetDir;
10     // Use this for initialization
11     void Start () 
12     {
13         flagMove = false;
14     }
15     
16     void Update ()
17     {
18  
19         if(Input.GetMouseButtonDown(0))
20         {
21             RayControl();
22         }
23         if(flagMove)
24         {
25             if(Vector3.Distance(transform.position,mousePos)>0.1)
26             {
27                 transform.Translate(transform.worldToLocalMatrix* transform.right * Time.deltaTime*0.5f);
28             }
29             else
30             {
31                 flagMove=false;
32             }
33         }
34     }
35  
36     void RayControl()
37     {
38          Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);//從Camera發射射線到屏幕
39          if(Physics.Raycast(ray,out hit))//射線碰撞檢測
40          {
41              mousePos=hit.point;
42                mousePos.z=transform.position.z;
43               targetDir=mousePos-transform.position;//計算到目標點的方向             
44               Vector3 tempDir=Vector3.Cross(transform.right,targetDir.normalized);
45              float dotValue=Vector3.Dot(transform.right,targetDir.normalized);
46              float angle=Mathf.Acos(dotValue)*Mathf.Rad2Deg;//計算夾角
47              if(tempDir.z < 0)//根據叉乘判斷夾角的正負
48              {
49                  angle=angle*(-1);
50              }
51              if(!float.IsNaN(angle))
52              {
53                 transform.RotateAround(transform.position,Vector3.forward,angle);//轉向目標點
54              }
55              
56              flagMove=true;
57         }
58     }
59 }

源碼參考:http://files.cnblogs.com/xuling/RoleMove.zip



免責聲明!

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



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