C# Can';t使用C在Unity 2D中使用另一个对象向玩家添加力#

C# Can';t使用C在Unity 2D中使用另一个对象向玩家添加力#,c#,unity3d,C#,Unity3d,我只是从Unity开始,我希望玩家能够制造一个小爆炸,在用C#引爆后发射它们。我已经让对象生成了,但是由于某种原因没有添加原力。我已经确定刚体是正确的,但是玩家在爆炸后仍然没有移动。代码如下: using UnityEngine; public class plosionSelfScript : MonoBehaviour { // Start is called before the first frame update public GameObject player

我只是从Unity开始,我希望玩家能够制造一个小爆炸,在用C#引爆后发射它们。我已经让对象生成了,但是由于某种原因没有添加原力。我已经确定刚体是正确的,但是玩家在爆炸后仍然没有移动。代码如下:

    using UnityEngine;

public class plosionSelfScript : MonoBehaviour {
    // Start is called before the first frame update
   public GameObject player;
   private Rigidbody2D playerRB;
   private int wait;

   void Start() {
    playerRB = player.GetComponent<Rigidbody2D>();
    Debug.Log(playerRB);
    wait = 0;

   }

   void Update() {
    wait = wait + 1;
    if (wait >= 20) {
        playerRB.AddForce(new Vector2(5000, 5000));
        Destroy(gameObject);

    }

   }
}
使用UnityEngine;
公共类plosionSelfScript:单行为{
//在第一帧更新之前调用Start
公共游戏对象玩家;
私人刚体2D播放器B;
私人等待;
void Start(){
playerRB=player.GetComponent();
Log(playerRB);
等待=0;
}
无效更新(){
等待=等待+1;
如果(等待>=20){
playerRB.AddForce(新矢量2(50005000));
摧毁(游戏对象);
}
}
}

提前感谢您的帮助。

首先,我建议您对代码进行一些小的修改:

public class plosionSelfScript : MonoBehaviour
{
    public GameObject player;
    private Rigidbody2D playerRB;   // Why not store this in the first place?
    public float waitTime;
    private float timer;

    void Start ( )
    {
        playerRB = player.GetComponent<Rigidbody2D> ( );
        Debug.Log ( playerRB );
        timer = 0;
    }

    void Update ( )
    {
        timer += Time.deltaTime;
        if ( timer >= waitTime )
        {
            playerRB.AddForce ( new Vector2 ( 5000, 5000 ) );
            Debug.Log ( "Added force and destroying object." );
            Destroy ( gameObject );
        }
    }
}
public类plosionSelfScript:monobhavior
{
公共游戏对象玩家;
private Rigidbody2D playerRB;//为什么不首先存储它?
公共浮动等待时间;
专用浮点定时器;
无效开始()
{
playerRB=player.GetComponent();
Log(playerRB);
定时器=0;
}
无效更新()
{
timer+=Time.deltaTime;
如果(计时器>=等待时间)
{
playerRB.AddForce(新矢量2(50005000));
Log(“添加强制并销毁对象”);
摧毁(游戏对象);
}
}
}
在以前的代码中,您等待值“20”。考虑到大多数设备大约每秒调用更新方法60次,您的爆炸将在创建后1/3秒发生。我认为那不是你想要的

尽管如此,我们仍然不清楚为什么不施加这种力。您还需要检查一些其他事项:

  • 刚体2D是否标记为运动学
  • 你的刚体是极度起伏,还是有其他力作用于它
  • 您的播放器脚本是否以任何方式覆盖RigidBody2D物理

感谢您的帮助,另一个脚本是播放器的一个组件,它可能会覆盖此代码,但我不知道如何判断。我不这么认为,因为我已经尝试过直接向玩家的脚本中添加相同的力,效果很好,但对这个脚本不起作用。