簡體   English   中英

Unity 2D自上而下的光線投射

[英]Unity 2D Top-Down Raycasting

我正在嘗試制作自上而下的2D射擊游戲,但我不知道該如何進行光線投射。 我不知道要為第二個參數(方向)輸入什么。 我已經嘗試過Input.mousePosition以及在StackOverflow上看到的其他一些東西,但是我似乎無法使任何事情起作用。 這是我關於玩家角色的代碼。

//Raycasts
var forward = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 0);
Debug.DrawRay (transform.position, forward * 10, Color.green);

//Mouse Movement
Vector3 mousePos = Input.mousePosition;
mousePos.z = 5.23f;
Vector3 objectPos = Camera.main.WorldToScreenPoint (transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;
float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle - 90));


//Player Movement
if (Input.GetKey (KeyCode.D)) {rigidbody2D.AddForce(Vector3.right * speed);}
if (Input.GetKey (KeyCode.A)) {rigidbody2D.AddForce(Vector3.left * speed);}
if (Input.GetKey (KeyCode.W)) {rigidbody2D.AddForce(Vector3.up * speed);}
if (Input.GetKey (KeyCode.S)) {rigidbody2D.AddForce(Vector3.down * speed);}

我可以從腳本的“鼠標移動”部分重用某些內容來做光線投射的方向部分嗎?

非常感謝你的幫助!

了解游戲編程的一些矢量數學可能是一個好主意。

在您的情況下,您想要的是一個從玩家位置指向鼠標位置的向量。 您可以通過在注釋中提到的Erno de Weerd來計算

// shootDirection = mousePosition - playerPosition
Vector3 shootDirection = Input.mousePosition - transform.position;

這等效於從玩家位置向原點后退和從原點到鼠標位置前移。

這個答案可能與您的問題沒有直接關系,但我想我還是告訴過您,以防仍然有幫助。

我不知道新的Unity GUI(UGUI),它可能有類似的支持。 但是,如果使用NGUI,則可以使用攝像機腳本,可以將其附加到任何攝像機,包括主攝像機。 然后,此腳本可以使此類攝像機成為NGUI跟蹤的事件的偵聽器。 如果您通過選中此選項使此類攝像機“監聽世界”,則只需將像這樣的小腳本放在將對撞機設置為觸發器的任何游戲對象中,它將自動為您響應。 因此,有效地,您不必再使用手動射線廣播來檢測這種單擊或觸摸。

注意:需要NGUI插件,並且在相機上附加了NGUI相機腳本,將事件偵聽器設置為world,並且具有該腳本的gameObject需要將對撞機設置為觸發器。

  void Onclick () { Debug.Log("Hey! you clicked me!"); } 

希望它仍然可以有所幫助。 即使依賴於第三方庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM