使用四元数.AngleAxis将项目符号拆分为3个不同的方向



我试图为一个投射物分配一项技能,当使用该技能时,将项目分为3个(原始投射物和2个新投射物(。

然而,当我实例化这两个克隆时,它们一直遵循相同的轨迹。他们的想法是走这条路:

绿色虚线表示原始子弹的运动,蓝色矢量表示特殊激活时原始子弹的瞬时速度,红色矢量表示属于每个新生成子弹的两个速度矢量,绿色角度表示新子弹相对于原始速度方向的方向

但目前,它们产卵并继续沿着与原来相同的轨迹运行。精灵甚至旋转到直角,但这似乎对物理的应用没有太大区别。

有人知道我该怎么解决吗?

这是我迄今为止的代码

能力脚本:

public class AirSpecialSplit : MonoBehaviour, IAirSpecial
{
public float SplitAngleInDegrees = 10;

GameObject bird_down;
GameObject bird_up;


public void ExecuteAirSpecial()
{
{
//hold the velocity of the original bird
Vector2 original_velocity = this.gameObject.GetComponent<Rigidbody2D>().velocity;

//clone two new birds

bird_down = Birb.MakeBirbCopy(this.gameObject);
bird_up = Birb.MakeBirbCopy(this.gameObject);
//apply the angle to the clones
bird_down.transform.rotation = Quaternion.AngleAxis(-SplitAngleInDegrees, Vector2.up);
bird_up.transform.rotation = Quaternion.AngleAxis(SplitAngleInDegrees, Vector2.up);

//get the rigidboy from the clones
Rigidbody2D rb_bird_down = bird_down.GetComponent<Rigidbody2D>();
Rigidbody2D rb_bird_up = bird_up.GetComponent<Rigidbody2D>();
rb_bird_down.simulated = true;
rb_bird_up.simulated = true;


rb_bird_down.velocity = new Vector2(original_velocity.x, original_velocity.y);
rb_bird_up.velocity = new Vector2(original_velocity.x, original_velocity.y);

}
}
}

您将相同的velocity应用于两者,因此它们当然会朝着相同的方向移动。velocity在世界空间!

你可能想添加旋转,比如

rb_bird_down.velocity = bird_down.transform.forward * original_velocity.magnitude;

在此之前,你可能应该像一样考虑当前的子弹旋转

bird_down.tranform.rotation = transform.rotstion * Quaternion.Euler(0,0, -SplitAngleInDegrees);

最新更新