Unity 鼠標點擊跟隨移動


 

 

 

 代碼內容


public class Mouse : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{

}


// Update is called once per frame
void Update()
{
AGF();

}
/// <summary>
/// 跟隨鼠標移動並旋轉
/// </summary>
public void AGF()
{
//點擊鼠標右鍵獲取信息
if (Input.GetMouseButton(1))
{
//1獲得鼠標點擊屏幕的二維坐標
Vector3 mouse = Input.mousePosition;
//2創建一個射線 從相機位置到鼠標點擊的位置的方向上
Ray ray = Camera.main.ScreenPointToRay(mouse);
//定義一個射線檢測的保存對象
RaycastHit hit;//hit保存射線發射后碰撞的信息
//開始碰撞檢測,射線檢測返回一個bool類型,true:有碰撞,false:無碰撞
if (Physics.Raycast(ray, out hit, 100f)) //碰撞檢測(射線,碰撞結果給hit,射線的長度100米)
{
//獲取坐標信息
print(hit.point);
target= new Vector3(hit.point.x, 2f, hit.point.z);
//獲取旋轉信息
Vector3 dir = target - rotatepos.transform.position;
Quaternion lookRotation = Quaternion.LookRotation(dir);
rotation = Quaternion.Lerp(rotatepos.transform.rotation, lookRotation, 2).eulerAngles;

}
}

//判斷是否有信息 有就執行
else if (target!=null)
{
//判斷目標旋轉值和自己旋轉值是否一致 不一致就執行
if (rotation.y != rotatepos.transform.localEulerAngles.y)
{
float value = Mathf.MoveTowards(rotatepos.transform.localEulerAngles.y, rotation.y, 3);
rotatepos.transform.rotation = Quaternion.Euler(Zvalue, value, 0f);
}
print(rotation.y);
print(rotatepos.transform.localEulerAngles.y);
//移動自己向目標點移動
transform.position = Vector3.MoveTowards(transform.position, target, 0.2f);
}

}
public float Zvalue = 90;
public Vector3 target;
public GameObject rotatepos;
private Vector3 rotation;
}

 

鼠標跟隨的步驟   

獲取鼠標屏幕上的坐標

轉換屏幕坐標成世界坐標

獲取3D坐標

獲取3D旋轉

判斷是否執行信息

執行移動到目標點

執行朝向目標點

其他的就是一些代碼執行順序產生的效果

 

 

效果圖

 

 

 

 

 

 移動目標點

朝向目標點


免責聲明!

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



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