Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 射弹弹道:到达特定坐标_C#_Unity3d_Scripting_Game Physics_Projectile - Fatal编程技术网

C# 射弹弹道:到达特定坐标

C# 射弹弹道:到达特定坐标,c#,unity3d,scripting,game-physics,projectile,C#,Unity3d,Scripting,Game Physics,Projectile,我正在尝试在我的游戏中实现一个功能,该功能将自动锁定目标并投掷一个投射物,以便它完美地落在目标上。 我做了数学计算,从球员1->Target计算出一条抛物线,不管他们的位置在哪里,但我意识到我想使用Unity的物理系统,而不是让球沿着路径移动 投掷速度是恒定的,玩家1和目标都是移动的物体,但它们的位置只会被记录一次,以计算投掷的初始角度 我相信这就是我需要使用的公式: 但我如何将其应用于我的播放器和目标都具有3D坐标 下面是我试图在Unity中编写的伪代码,以使其更易于阅读 float vel

我正在尝试在我的游戏中实现一个功能,该功能将自动锁定目标并投掷一个投射物,以便它完美地落在目标上。 我做了数学计算,从球员1->Target计算出一条抛物线,不管他们的位置在哪里,但我意识到我想使用Unity的物理系统,而不是让球沿着路径移动

投掷速度是恒定的,玩家1和目标都是移动的物体,但它们的位置只会被记录一次,以计算投掷的初始角度

我相信这就是我需要使用的公式:

但我如何将其应用于我的播放器和目标都具有3D坐标

下面是我试图在Unity中编写的伪代码,以使其更易于阅读

float velocity = 100f; 
float g = Physics.gravity;
Transform x = Target.position.x - Player.position.x;
Transform y = Target.position.z - Player.position.z;
double theta;

theta = **big formula using the values above**
在那之后,我不知道如何使用这个值来增加射弹的力量。 我想使用AddForce(x,y,z,ForceMode.pulse);但我显然不能在这里使用初始角度,只有x和y值。 使用刚体。速度=矢量3(vx,vy,vz);给了我同样的问题


我相信我错过了一些琐碎的事情,但我真的被困在这件事上了。有人能帮忙吗?

如果你采用
arctan
函数的参数,分子为y分量,分母为x分量的向量具有所需的方向。它只需要缩放以获得正确的大小/速度。这意味着缩放这个向量只需要将每个值乘以浮动速度,因为角度是用它计算的?既然θ是以弧度表示的浮点,我该如何计算它的分子和分母呢?我在处理复数方面有点麻烦,甚至在使用.NET库处理复数时更麻烦。我指的是你公式中的东西(
v²+-sqrt(…)
表示分子,
gx
表示分母)。你需要规范化向量,然后乘以速度。团结应该有办法为你做到这一点。谢谢!现在球每次都朝着正确的方向抛出,尽管我相信向量值没有正确缩放。在定义的恒定初始速度下,投掷矢量的Y值不足以从其周围的各种坐标到达目标。我会自己解决的,谢谢你的帮助!Unity可能有一些不一致的物理模型。不确定。确保使用的重力与Unity使用的重力相同。如果使用
arctan
函数的参数,则分子为y分量、分母为x分量的向量具有所需的方向。它只需要缩放以获得正确的大小/速度。这意味着缩放这个向量只需要将每个值乘以浮动速度,因为角度是用它计算的?既然θ是以弧度表示的浮点,我该如何计算它的分子和分母呢?我在处理复数方面有点麻烦,甚至在使用.NET库处理复数时更麻烦。我指的是你公式中的东西(
v²+-sqrt(…)
表示分子,
gx
表示分母)。你需要规范化向量,然后乘以速度。团结应该有办法为你做到这一点。谢谢!现在球每次都朝着正确的方向抛出,尽管我相信向量值没有正确缩放。在定义的恒定初始速度下,投掷矢量的Y值不足以从其周围的各种坐标到达目标。我会自己解决的,谢谢你的帮助!Unity可能有一些不一致的物理模型。不确定。确保你使用的重力与Unity使用的重力相同。