Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/146.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# 使用Quaternion.AngleAxis在3个不同方向上拆分子弹_C#_Unity3d_Rotation_Quaternions_Rigid Bodies - Fatal编程技术网

C# 使用Quaternion.AngleAxis在3个不同方向上拆分子弹

C# 使用Quaternion.AngleAxis在3个不同方向上拆分子弹,c#,unity3d,rotation,quaternions,rigid-bodies,C#,Unity3d,Rotation,Quaternions,Rigid Bodies,我试图为一个投射物分配一项技能,当使用该技能时,该技能将项目分为3个(原始投射物和2个新投射物) 然而,当我实例化这两个克隆时,它们始终遵循相同的轨迹。他们的想法是: 绿色虚线表示原始子弹的运动,蓝色矢量表示特殊激活时原始子弹的瞬时速度,红色矢量表示属于每个新生成子弹的两个速度矢量,绿色角指示新子弹相对于原始速度方向的方向 但目前,它们产卵并继续沿着与最初相同的轨迹前进。精灵甚至会旋转到正确的角度,但这似乎对物理的应用没有多大影响 有人知道我怎么解决这个问题吗 这是到目前为止我的代码 能力脚本:

我试图为一个投射物分配一项技能,当使用该技能时,该技能将项目分为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);
    
            }
        }
    }
public class airsspecialsplit:monobhavior,IAirSpecial
{
公共浮点数SplitAngleInDegrees=10;
游戏物体鸟_下来;
游戏物体鸟_up;
public void ExecuteAirSpecial()
{
{
//保持原始鸟的速度
Vector2原始速度=this.gameObject.GetComponent().velocity;
//克隆两只新鸟
bird_down=Birb.MakeBirbCopy(this.gameObject);
bird\u up=Birb.MakeBirbCopy(this.gameObject);
//将角度应用于克隆
bird_down.transform.rotation=四元数.AngleAxis(-SplitAngleInDegrees,Vector2.up);
bird_up.transform.rotation=Quaternion.AngleAxis(SplitAngleInDegrees,Vector2.up);
//从克隆人那里得到那个硬汉
Rigidbody2D rb_bird_down=bird_down.GetComponent();
Rigidbody2D rb_bird_up=bird_up.GetComponent();
rb_bird_down.simulated=true;
rb_bird_up.simulated=true;
rb_bird_down.velocity=新矢量2(原始速度.x,原始速度.y);
rb_bird_up.velocity=新矢量2(原始速度.x,原始速度.y);
}
}
}

你对两者都应用相同的
速度
,因此它们当然会朝着相同的方向移动。
速度
在世界空间中

您可能希望添加旋转,例如

rb_bird_down.velocity = bird_down.transform.forward * original_velocity.magnitude;
在此之前,您可能应该考虑当前的项目符号旋转,如

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

看起来你只是将原始速度指定为新对象的速度,但也许你已经意识到了这一点,并且在问该怎么做。此外,新对象是否是场景层次中原始对象的子对象?或者它们是独立的物体?是的,我想这可能是他们“只需遵循原始”问题的原因,但我尝试的任何其他解决方案都会导致子弹直接落在地上。是的,他们是独立的。不幸的是,这不起作用。经过这些修改,这些鸟甚至没有沿着抛物线的轨迹飞行。它们只有在实例化后才会直线下降。@Zimzom:你能发布Birb.MakeBirbCopy()的代码吗?@scg sure
public static GameObject MakeBirbCopy(GameObject original){Birb newBirb=Instantiate(original.GetComponent();newBirb.m_canexecuteairsecial=false;返回newBirb.GameObject;}
刚体是运动的吗?(我猜不是,因为你在操纵速度。)有没有其他力被施加,比如重力?不,它们不是运动学的。我用重力来计算子弹轨迹的抛物线