【问题标题】:Can a unity script simply be a public variable统一脚本可以简单地成为公共变量吗
【发布时间】:2019-04-26 10:23:44
【问题描述】:

我试图添加一个脚本,将全局损坏等级附加到对象上,但是脚本出现了控制台错误,

错误 CS0120:非静态对象需要对象引用 字段、方法或属性AttackStat.atk

所以我很困惑,是否需要一个我没有遇到的统一脚本或什么,我对统一编程很陌生

感谢您的宝贵时间

Attackstat.cs

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

public class AttackStat : MonoBehaviour
{
    public float atk;

}

【问题讨论】:

    标签: c# variables unity3d methods


    【解决方案1】:

    解决方案 1:

    正如错误消息所述,atkAttackStat 类的实例成员,您需要创建该类的实例/对象才能访问它们。

    例如:

    AttackStat attackStatInstance = new AttackStat();
    float  vlueObject = attackStatInstance.atk // It is accessible now 
    

    解决方案 2:

    如果你真的想在不创建实例的情况下使用atk(比如AttackStat.atk),那么变量应该定义为静态,这意味着定义如下:

    public class AttackStat : MonoBehaviour
    {
        public static float atk;
    }
    

    【讨论】:

    • 请注意,您不能在 MonoBehaviour 派生对象上调用 new。你必须使用AddComponent<T>()
    【解决方案2】:

    答案是肯定的,检查Static Members

    public class AttackStat : MonoBehaviour
    {
        public static float atk;
    }
    

    【讨论】:

    • 我试过这个唯一的事情是它没有给我一个空间来为我希望的对象添加一个值。就像在普通脚本中有一个公共浮点变量
    • 静态意味着所有使用该值的对象都将共享该值。这几乎肯定是不希望的。如果是,则该类不再需要扩展 MonoBehaviour,也可以是 static class
    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2020-09-06
    • 2013-07-09
    相关资源
    最近更新 更多