C# 与敌人碰撞造成损害

C# 与敌人碰撞造成损害,c#,unity3d,C#,Unity3d,我在团结方面遇到了一些问题。我试图让它,如果一个敌人与玩家碰撞,玩家失去一个生命点。我的C#代码如下 在你看代码之前,我想说敌人是刚体,所以物体子弹可以影响他们。我制作了一个额外的胶囊作为玩家身体的一部分,可以是一个刚体,这样代码就可以检测碰撞。你认为这样行吗?我不确定刚体是否更容易检测到另一个刚体碰撞,或者它是否不在乎 public class playerhealth : MonoBehaviour { private int curHealth; private int

我在团结方面遇到了一些问题。我试图让它,如果一个敌人与玩家碰撞,玩家失去一个生命点。我的C#代码如下

在你看代码之前,我想说敌人是刚体,所以物体子弹可以影响他们。我制作了一个额外的胶囊作为玩家身体的一部分,可以是一个刚体,这样代码就可以检测碰撞。你认为这样行吗?我不确定刚体是否更容易检测到另一个刚体碰撞,或者它是否不在乎

public class playerhealth : MonoBehaviour {

    private int curHealth;
    private int playerLives;
    public GUIText winText;
    public GUIText healthText;
    public GUIText livesText;

    void Start() {
        curHealth = 3;
        playerLives = 3;
        SetHealthText();
        SetLivesText();
        winText.text = "";
    }

    void FixedUpdate()
    {
        // where physics codes go
    }

    // HERE'S WHERE THE COLLISIONS STUFF IS

    void OnCollisionEnter(Collider rigidbody) {
        if (rigidbody.gameObject.tag == "Enemy") {
            curHealth = curHealth - 1;
            SetHealthText();
        }

        if (rigidbody.gameObject.tag == "reloader") {
            playerLives = playerLives - 1;
            SetLivesText();
        }
    }

    // setting GUI TEXT and reloading level

    void SetHealthText() {
        healthText.text = "Health Points: " + curHealth.ToString();
        if (curHealth <= 0) {
            Application.LoadLevel("shootingworld");
            playerLives = playerLives - 1;
        }

        if(curHealth >= 10) {
            playerLives+= 1;
        }

    }

    void SetLivesText() {
        livesText.text = "Lives: " + playerLives.ToString();
        if (playerLives <= 0) {
            winText.text = "GAME OVER";
        }
    }
}
公共级玩家健康:单一行为{
私人卫生;
私人娱乐场所;
公共吉他文本;
公共文本;
公共吉他文本livesText;
void Start(){
curHealth=3;
playerLives=3;
SetHealthText();
SetLivesText();
winText.text=“”;
}
void FixedUpdate()
{
//物理代码去哪里
}
//这里是碰撞的地方
无效碰撞中心(碰撞器刚体){
if(rigidbody.gameObject.tag==“敌人”){
curHealth=curHealth-1;
SetHealthText();
}
if(rigidbody.gameObject.tag==“重载器”){
playerLives=playerLives-1;
SetLivesText();
}
}
//设置GUI文本和重新加载级别
void SetHealthText(){
healthText.text=“健康点:”+curHealth.ToString();
如果(curHealth=10){
playerLives+=1;
}
}
void SetLivesText(){
livesText.text=“生活:”+playerLives.ToString();

如果(playerLives你在这里做了一些假设,其中一些是错误的,我会试着指出它们

将一个刚体添加到一个游戏对象是正确的想法,但它是Collider组件决定对象碰撞的形状和大小。考虑添加BOXCurror,SkyCuloLIDER或CycCeLoLIDE两者。

我想你很难让物体真正碰撞,这可能是解决办法

而且

  • 您命名为“rigidbody”的参数不能保证是刚体组件。根据

    碰撞类包含有关接触点、碰撞速度等的信息
  • 的正确语法具有碰撞参数,而不是碰撞器
  • 要访问碰撞器上的刚体,您必须对碰撞器找到的对象使用getcomponent,并检查刚体组件是否存在。我不确定这是您想要的,但应该检查误导性的参数名称


    不管怎样,你对按标签比较对撞机游戏对象的想法是正确的。你所需要做的就是在编辑器中或通过代码在对象上强制执行标签。

    你在这里做了许多假设,其中一些是错误的。我将试着指出它们

    将一个刚体添加到一个游戏对象是正确的想法,但它是Collider组件决定对象碰撞的形状和大小。考虑添加BOXCurror,SkyCuloLIDER或CycCeLoLIDE两者。

    我想你很难让物体真正碰撞,这可能是解决办法

    而且

  • 您命名为“rigidbody”的参数不能保证是刚体组件。根据

    碰撞类包含有关接触点、碰撞速度等的信息
  • 的正确语法具有碰撞参数,而不是碰撞器
  • 要访问碰撞器上的刚体,您必须对碰撞器找到的对象使用getcomponent,并检查刚体组件是否存在。我不确定这是您想要的,但应该检查误导性的参数名称

    无论如何,您对按标记比较碰撞器游戏对象的想法是正确的。您只需在编辑器中或通过代码在对象上强制执行标记即可。

    您使用的是:

    void OnCollisionEnter(Collider collision) {
    
    }

    对撞机用于对撞机

    试试这个:

    void OnCollisionEnter(Collision collision) {
    
    }

    希望有此帮助!:)

    您正在使用此:

    void OnCollisionEnter(Collider collision) {
    
    }

    对撞机用于对撞机

    试试这个:

    void OnCollisionEnter(Collision collision) {
    
    }


    希望这有帮助!:)

    你试着去做,这可能也有帮助

    void OnCollisionEnter(Collision collision)
    
    {
    
    }
    
    文件是:


    您尝试这样做也可能有帮助

    void OnCollisionEnter(Collision collision)
    
    {
    
    }
    
    文件是: