我正在开发一个3D太空游戏,其中相机处于恒定的2D(自上而下)状态.我能够在以给定速度移动的目标上发射速度的射弹,并且每次击中它.大!那么如果那个目标在父母身边有一个角速度呢?我注意到如果目标有一个旋转的父对象,我的投影不正确,因为它没有考虑角速度.
我的初始代码是围绕以下假设构建的:
Position_target + Velocity_target * t = Position_shooter + Velocity_shooter * t + Bulletspeed * t
Run Code Online (Sandbox Code Playgroud)
我认为射手是静止的(或可能是移动的)并需要发射一个恒定大小的子弹.
我将上述内容简化为此
Delta_Position = Position_target - Position_shooter
Delta_Velocity = Velocity_target - Velocity_shooter
Delta_Position + Delta_Velocity * t = BulletSpeed * t
Run Code Online (Sandbox Code Playgroud)
平方双方我得到一个二次方程式,我可以求解给定的行列式结果或零.这很完美.我返回值,然后将目标的位置和当前速度投射到那个t,然后我有炮塔脚本,以给定的角速度朝着该点旋转.如果炮塔说它在所有轴上观察到的点在1%以内,它会以速度射击子弹,如果目标没有改变其航向或速度,它会100%命中.
我开始在我的船只/小行星上添加组件,这些组件是父对象的子项,就像连接到炮塔本身为目标的船只的炮塔.如果船围绕轴旋转(例如Y轴)并且炮塔不在x = 0且z = 0,则我的投影不再起作用.我认为使用r*sin(theta + omega*t)作为X位置的角速度分量和使用Z位置的r*cos(theta + omega*t)可以起作用.Theta是当前旋转(相对于世界坐标),omega是围绕y轴的eulerAngle旋转.
我很快就意识到这只适用于围绕y轴旋转,我不能将sin置于二次方程式中,因为我无法从中提取t因此我无法真正适当地投影.我尝试使用双曲线,但情况相同.我可以创建一个任意的t,假设t = 2,并计算对象在2秒内的位置.但我正在努力寻找一种方法来实现子弹速度投射.
Position_targetparent + Velocity_targetparent * t + [ANGULAR VELOCITY COMPONENT] = Position_shooter + Velocity_shooter * t + Bulletspeed * t
Delta_Position_X + Delta_Velocity_X * t + S * t = …Run Code Online (Sandbox Code Playgroud)