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_Game Physics_Instantiation_Rigid Bodies - Fatal编程技术网

C# 将子弹分成三个不同的方向

C# 将子弹分成三个不同的方向,c#,unity3d,game-physics,instantiation,rigid-bodies,C#,Unity3d,Game Physics,Instantiation,Rigid Bodies,我试图为一个投射物分配一项技能,当使用该技能时,该技能将项目分为3个(原始投射物和2个新投射物) 然而,当我实例化这两个克隆体时,我不能将任何移动归因于它们。他们的想法是: 绿色虚线表示原始子弹的运动,蓝色矢量表示特殊激活时原始子弹的瞬时速度,红色矢量表示属于每个新生成子弹的两个速度矢量,绿色角指示新子弹相对于原始速度方向的方向 但目前,它们只是站在抛物线的一点上,在这里它们被实例化。无论我做什么,我似乎都不能重视他们的刚体。有人知道如何解决这个问题吗 这是到目前为止我的代码 能力脚本: pub

我试图为一个投射物分配一项技能,当使用该技能时,该技能将项目分为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);

            //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.velocity = new Vector2(original_velocity.x, original_velocity.y) * Time.deltaTime;
            rb_bird_up.AddForce(new Vector2(3, 5) * 500);
        }
    }
}
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);
//从克隆人那里得到那个硬汉
Rigidbody2D rb_bird_down=bird_down.GetComponent();
Rigidbody2D rb_bird_up=bird_up.GetComponent();
rb_bird_down.velocity=新矢量2(原始速度.x,原始速度.y)*Time.deltaTime;
rb_bird_up.AddForce(新矢量2(3,5)*500);
}
}
}
主要鸟类:

public class Birb : MonoBehaviour
{
    #region Provided Code, Do Not Edit
    private Rigidbody2D m_rigidbody;

    private bool m_canExecuteAirSpecial = true;

    public bool CanExecuteAirSpecial
    {
        get
        {
            return m_rigidbody.simulated && m_canExecuteAirSpecial;
        }
    }

    private void Awake()
    {
        m_rigidbody = GetComponent<Rigidbody2D>();
        StopBirbSimulation();
    }

    public void StopBirbSimulation()
    {
        m_rigidbody.simulated = false;
    }

    public void StartBirbSimulation()
    {
        m_rigidbody.simulated = true;
    }

    public void SetPosition( Vector3 position )
    {
        if ( m_rigidbody.simulated )
        {
            m_rigidbody.MovePosition( position );
        }
        else
        {
            transform.position = position;
        }
    }

    public void ExecuteAirSpecial()
    {
        GetComponent<IAirSpecial>().ExecuteAirSpecial();
        m_canExecuteAirSpecial = false;
    }

    private void OnCollisionEnter2D( Collision2D collision )
    {
        m_canExecuteAirSpecial = false;
    }

    public static GameObject MakeBirbCopy( GameObject original )
    {
        Birb newBirb = Instantiate(original).GetComponent<Birb>();
        newBirb.m_canExecuteAirSpecial = false;
        return newBirb.gameObject;
    }
    #endregion

    [Range( 0, 25 )]
    public float LaunchForce = 12;

    public void Launch(Vector3 offset, float maximumStretch, Rigidbody2D rigidbody)
    {
        rigidbody.velocity = new Vector2(offset.x * -LaunchForce, offset.y * -LaunchForce) * (maximumStretch/2);
    }

}
公共类Birb:单一行为
{
#区域提供的代码,不编辑
私有刚体2D m_刚体;
私有布尔m_canExecuteAirSpecial=true;
公共图书馆CanExecuteAirSpecial
{
得到
{
返回m_rigidbody.simulated和m_canExecuteAirSpecial;
}
}
私人空间
{
m_rigidbody=GetComponent();
停止鸟模拟();
}
公共空隙停止鸟模拟()
{
m_rigidbody.simulated=假;
}
公共无效开始BIRBSIMULATION()
{
m_rigidbody.simulated=true;
}
公共无效设置位置(矢量3位置)
{
if(m_rigidbody.simulated)
{
m_刚体。移动位置(位置);
}
其他的
{
变换位置=位置;
}
}
public void ExecuteAirSpecial()
{
GetComponent().ExecuteAirSpecial();
m_canExecuteAirSpecial=false;
}
专用空心OnCollisionInter2D(碰撞2D碰撞)
{
m_canExecuteAirSpecial=false;
}
公共静态游戏对象MakeBirbCopy(游戏对象原始)
{
Birb newBirb=实例化(原始).GetComponent();
newBirb.m_canexecuteairsspecial=false;
返回newBirb.gameObject;
}
#端区
[范围(0,25)]
公共浮动发射力=12;
公共无效启动(矢量3偏移、浮点最大拉伸、刚体2D刚体)
{
刚体速度=新矢量2(偏移量.x*-启动力,偏移量.y*-启动力)*(最大拉伸/2);
}
}

好的,显然,实例化后我只需要将“模拟”设置为true

    rb_bird_down.simulated = true;
    rb_bird_up.simulated = true;
文档可能会更清楚地说明这一点,因为他们说所有属性都是复制的,但事实并非如此