【问题标题】:Unity 2D Top-Down RaycastingUnity 2D 自上而下的光线投射
【发布时间】:2014-09-27 19:55:44
【问题描述】:

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

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

非常感谢您的帮助!

【问题讨论】:

  • 通常方向为mouse position - player position。这会产生一个方向向量。

标签: c# unity3d 2d top-down


【解决方案1】:

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

在您的情况下,您想要的是一个从玩家位置指向鼠标位置的向量。您可以按照 cmets 中提到的 Erno de Weerd 的方式计算

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

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

【讨论】:

    【解决方案2】:

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

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

    注意:需要 NGUI 插件和附加到相机的 NGUI 相机脚本,事件侦听器设置为世界,并且具有脚本的游戏对象需要将碰撞器设置为触发器。

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

    希望它仍然可以提供帮助。即使依赖于 3rd 方库。

    【讨论】:

    • 如果我理解正确的话,IronEagle13 将使用光线来测试射击击中哪个游戏对象。为此,您不能使用 NGUI。
    • 抱歉,我认为 IronEagle13 想了解鼠标指针正下方是否有一个对象(就像一个目标的十字线,因为自上而下)。我的坏。然后就不行了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多