C# Unity 2D自顶向下光线投射

C# Unity 2D自顶向下光线投射,c#,unity3d,2d,top-down,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,

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

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

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

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

注意:需要NGUI插件,并且当NGUI摄像头脚本连接到摄像头时,事件监听器设置为world,而包含脚本的游戏对象需要将碰撞器设置为触发器

void Onclick()
{
Log(“嘿!你点击了我!”);

}
通常方向为
鼠标位置-玩家位置
。如果我理解正确的话,IronEagle13将使用光线来测试射击命中的游戏对象。因此,您不能使用NGUI.抱歉,我以为IronEagle13想了解鼠标指针正下方是否有对象(自上而下,就像目标的十字线)。我的坏。那就不行了。