[英]Tags not working in Unity C#
我編寫了以下代碼來損壞我的播放器,但它不起作用。 我已經盡可能多地檢查編碼錯誤,我知道我的問題是標簽。 使用 Debug.log 功能,我能夠確認問題不是出在我的 hitboxes 上,並且標簽設置正確。 相同的系統反過來作用於我的玩家射彈來傷害敵人。 但是,在我的播放器上設置時它不起作用。
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();
}
這里有更多信息:兩個調試都沒有出現在控制台上。 我就是這樣知道這個問題的。
}
這是玩家健康碼本身。 我不知道為什么這不起作用。
將以下代碼作為OnCollisionEnter函數的第一行:
Debug.Log("Collision between " + gameObject.name + " and " +
col.gameObject.name + " with tag " + col.gameObject.tag);
這將告訴您是否已正確地將DamageToPlayer腳本應用於彈丸,是否已正確標記播放器以及所有對撞機的設置是否正確。
如果您完全沒有收到此消息,則可能是物體行進的速度太快而無法檢測到碰撞。 為避免這種情況,請將RigidBodies的CollisionDetectionMode設置為Continuous或ContinuousDynamic。 但是請記住,這是以性能為代價的。
Debug.Log($"gameObject.name: {col.gameObject.name} gameObject.tag: {col.gameObject.tag}");
在DamageToPlayer.OnCollisionEnter()
的第一行嘗試此代碼。
然后,檢查其他對象的名稱和標簽。 您可以檢查碰撞是否正常工作。
如果碰撞正常但標簽與您預期的不同,請更改 object 標簽。 當日志不工作時,您應該檢查兩個游戲對象是否有Collider
,其中一個是否有RigidBody
組件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.