我编写了以下代码来破坏我的播放器,但它无法正常工作。我已经多次检查编码错误,我知道我的问题是标签。使用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();
}
以下是更多信息:控制台上都没有调试。这就是我所知道的问题。
}
这是玩家健康代码本身。我不知道为什么这不起作用。
答案 0 :(得分:0)
将以下代码作为OnCollisionEnter函数的第一行:
Debug.Log("Collision between " + gameObject.name + " and " +
col.gameObject.name + " with tag " + col.gameObject.tag);
这将告诉您是否已正确地将DamageToPlayer脚本应用于您的射弹,以及您是否正确标记了播放器以及是否确实正确设置了所有碰撞器。
如果您根本没有收到此消息,则可能是对象行进太快而无法检测到碰撞。要防止这种情况,请将RigidBodies的CollisionDetectionMode设置为Continuous或ContinuousDynamic。但请记住,这取决于性能成本。