Unity中如何在另一类私有方法内访问public类的protected变量
解决方案
核心前提:protected 修饰的成员默认仅允许声明类本身和其派生类访问,你当前的两个类不存在继承关系,因此无法直接访问该变量,有两种常用合规的实现方式:
方案1:添加公共只读属性(最推荐,符合封装原则)
仅对外暴露读取权限,避免外部误修改体力状态值,修改后代码如下:public class CharacterStats : MonoBehaviour { [SerializeField] protected bool Tired; // 新增只读属性,外部仅能读取无法修改Tired的取值 public bool IsTired => Tired; }之后在
PlayerMovement中先获取CharacterStats的实例引用,即可调用该属性:public class PlayerMovement : MonoBehaviour { private CharacterStats _characterStats; public float RunSpeed; public float Speed; private void Awake() { // 若两个组件挂载在同一GameObject下用这个方法获取,跨物体的话可直接在Inspector拖拽赋值 _characterStats = GetComponent<CharacterStats>(); } private void HandleRunning() { // 直接替换X的位置即可,C#中判断布尔值可简写无需写==true if (Input.GetKeyDown(KeyCode.LeftShift) && !_characterStats.IsTired) { Speed = RunSpeed; } } }方案2:直接修改访问修饰符(简单但不推荐)
如果你不需要严格控制变量的修改权限,可以直接把Tired的修饰符从protected改为public,之后直接通过实例引用访问_characterStats.Tired即可,缺点是所有外部代码都可以随意修改该变量值,容易引发逻辑bug。
另外注意你原代码存在拼写问题:C#所有关键字均为小写,你写的Public、Private、If都要改为小写,[SerialzeField]拼写错误,正确写法是[SerializeField]。
内容的提问来源于stack exchange,提问作者Grim Reapybones
相关产品推荐
相关产品推荐

