Unity 2D自上而下光线投射

本文关键字:光线投射 自上而下 2D Unity | 更新日期: 2023-09-27 18:24:42

我正在尝试制作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);}

有什么东西可以从脚本的鼠标移动部分重复使用来做光线投射的方向部分吗?

非常感谢你的帮助!

Unity 2D自上而下光线投射

了解一些游戏编程的矢量数学可能是个好主意。

在您的情况下,您想要的是一个从玩家位置指向鼠标位置的向量。你可以通过计算来计算这一点,正如Erno de Weerd在评论中提到的那样

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

这相当于从玩家位置向后移动到原点,从原点向前移动到鼠标位置。

这个答案可能与你的问题没有直接关系,但我想我已经告诉过了,以防它仍然有帮助。

我不知道新的UnityGUI(UGUI),它可能有类似的支持。但是,如果使用NGUI,您可以将相机脚本附加到任何相机,包括主相机。然后,这个脚本可以让这样的相机成为NGUI跟踪的事件的监听器。如果你通过选中这样的选项来制作这样的相机来"倾听世界",那么你只需在任何游戏对象中放入这样的小脚本,并将对撞机设置为触发器,它就会自动为你做出响应。因此,您不必再使用手动光线投射来检测这种点击或触摸。

注意:需要NGUI插件,并且NGUI相机脚本连接到相机,事件侦听器设置为世界,具有脚本的gameObject需要设置一个冲突器作为触发器。

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

希望它还能有所帮助。即使依赖于第三方库。