标签在Unity C中不起作用#

时间:2018-06-12 02:01:09

标签: c# tags

我编写了以下代码来破坏我的播放器,但它无法正常工作。我已经多次检查编码错误,我知道我的问题是标签。使用Debug.log功能,我能够确认问题不在于我的hitbox,并且标签已正确设置。同样的系统反向运行我的玩家弹丸来伤害敌人。但是,在使用我的播放器进行设置时,它无法正常工作。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DamageToPlayer : MonoBehaviour {

public float damageAmount;


public void OnCollisionEnter(Collision col)
 {
    if(col.gameObject.tag == "Player")
    {

        Debug.Log("nearlyThere");
        PlayerHealth ifPlayer = col.gameObject.GetComponent<PlayerHealth>();
        if(ifPlayer != null)
        {
            ifPlayer.PlayerDamage(damageAmount);

            Debug.Log("TOUCH");
        }

    }
}

这是敌人的代码。

}



using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerHealth : MonoBehaviour {
public float PlayerStartHealth;

public float playerHealth;
public Text text;

public void Start () {
    playerHealth = PlayerStartHealth;
}


 public void PlayerDamage(float pAmount)
{
    playerHealth -= pAmount;
    if (playerHealth <= 0)
    {
        EndLevel();
    }
}

public void EndLevel()
{
    Debug.Log("u died m8");
}
public void FixedUpdate()
{
    text.text = playerHealth.ToString();

}

以下是更多信息:控制台上都没有调试。这就是我所知道的问题。

}

这是玩家健康代码本身。我不知道为什么这不起作用。

1 个答案:

答案 0 :(得分:0)

将以下代码作为OnCollisionEnter函数的第一行:

Debug.Log("Collision between " + gameObject.name + " and " + 
    col.gameObject.name + " with tag " + col.gameObject.tag);

这将告诉您是否已正确地将DamageToPlayer脚本应用于您的射弹,以及您是否正确标记了播放器以及是否确实正确设置了所有碰撞器。

如果您根本没有收到此消息,则可能是对象行进太快而无法检测到碰撞。要防止这种情况,请将RigidBodies的CollisionDetectionMode设置为Continuous或ContinuousDynamic。但请记住,这取决于性能成本。