Unity开发遇CS0117错误:PlayerHealth类无TakeDamage定义求助
解决Unity中CS0117: 'PlayerHealth' does not contain a definition for 'TakeDamage'错误
你的报错核心是脚本类名混乱+方法调用方式错误,以下是具体修正方案:
1. 修正玩家生命值脚本的类名与文件名
你当前的玩家生命值脚本类名是NewBehaviourScript,但敌人脚本里在查找PlayerHealth组件,完全不匹配。把玩家脚本的类名改成PlayerHealth,同时将脚本文件名改为PlayerHealth.cs(Unity要求脚本文件名必须和类名一致)。
2. 修正敌人伤害脚本的类名与文件名
敌人脚本的类名现在是PlayerHealth,和玩家组件重名了,改成EnemyDamage,文件名同步改为EnemyDamage.cs。
3. 修正TakeDamage的调用逻辑
你通过GetComponent<PlayerHealth>()获取到的是玩家组件的实例,调用实例方法时必须用这个实例,而非类名(类名调用仅适用于静态方法)。
4. 清理冗余代码
敌人脚本里重复引用了using System.Collections;,删除其中一个即可。
修正后的PlayerHealth脚本:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerHealth : MonoBehaviour { public int health = 20; public void TakeDamage(int damage) { health -= damage; if (health <= 0) { Destroy(gameObject, 0.3f); } } }
修正后的EnemyDamage脚本:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyDamage : MonoBehaviour { public int DMG; float cooldown = 0f; private void Update() { Debug.Log(cooldown); cooldown -= Time.deltaTime; } private void OnCollisionEnter(Collision collision) { PlayerHealth health = collision.gameObject.GetComponent<PlayerHealth>(); if (cooldown <= 0) { if (health != null) { health.TakeDamage(DMG); // 改用实例调用方法 } cooldown = 1f; } } }
内容的提问来源于stack exchange,提问作者Oliver Dubovský
相关产品推荐
相关产品推荐

