与敌人发生碰撞造成伤害

时间:2013-11-25 05:22:22

标签: c# unity3d

我在使用Unity时遇到了一些问题。我试图让它成为如果敌人与玩家发生碰撞,玩家就会失去健康点。我的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";
        }
    }
}

3 个答案:

答案 0 :(得分:1)

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

将一个RigidBody添加到游戏对象是正确的想法,但它是Collider组件,用于确定对象碰撞的形状和大小。考虑将BoxCollider,SphereCollider或CapsuleCollider添加到两者中。

我认为你在让对象实际碰撞时遇到困难,这可能是解决方案。

此外,

void OnCollisionEnter(Collider rigidbody){

  1. 您命名为'rigidbody'的参数不保证是RigidBody组件。根据{{​​3}}

      

    碰撞类包含有关接触点,撞击速度等的信息。

  2.   
  3. documentation的正确语法有一个Collision参数,而不是Collider。
  4.      要访问Collider上的刚体,您必须在Collider找到的对象上使用getcomponent,并检查RigidBody组件是否存在。我不确定这是你所追求的,但应该检查误导性的参数名称。

    无论如何,你对通过标签比较Collider的游戏对象有了正确的想法。您需要做的就是在编辑器中或通过代码在对象上强制执行标记。

答案 1 :(得分:0)

你正在使用这个:

void OnCollisionEnter(Collider collision) {

}

Collider用于Ontrigger ......

试试这个:

void OnCollisionEnter(Collision collision) {

}

希望这有帮助! :)

答案 2 :(得分:0)

你试着这可能也有帮助

void OnCollisionEnter(Collision collision)

{

}

文档是:

http://docs.unity3d.com/Documentation/ScriptReference/Collider.OnCollisionEnter.html