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

时间:2014-09-27 19:55:44

标签: c# unity3d 2d top-down

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

我可以从脚本的鼠标移动部分重新使用某些内容来执行光线投射的方向部分吗?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

在你的情况下你想要的是一个从玩家位置指向鼠标位置的矢量。您可以通过计算

在评论中提到的Erno de Weerd来计算
// shootDirection = mousePosition - playerPosition
Vector3 shootDirection = Input.mousePosition - transform.position;

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

答案 1 :(得分:0)

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

我不了解新的Unity GUI(UGUI),它可能有类似的支持。但是,如果使用NGUI,您可以使用相机脚本连接到任何相机,包括主相机。然后,这个脚本可以让这样的摄像机成为NGUI跟踪的事件的监听者。如果你制作这样的相机来聆听世界的声音。通过检查这样的选项,你可以在任何游戏对象中放置一个这样的小脚本,并将碰撞器设置为触发器,它会自动响应。因此,您不必再使用手动光线投射来检测此类点击或触摸。

注意:需要NGUI插件并且NGUI相机脚本连接到相机,事件监听器设置为world,并且具有脚本的gameObject需要将对撞机设置为触发器。



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




希望它仍然可以提供帮助。即使依赖第三方库。