C# unity脚本可以仅仅是一个公共变量吗
我试图添加一个脚本,将全局伤害等级附加到对象上,但是该脚本出现了一个控制台错误 错误CS0120:非静态对象需要对象引用 字段、方法或属性C# unity脚本可以仅仅是一个公共变量吗,c#,variables,unity3d,methods,C#,Variables,Unity3d,Methods,我试图添加一个脚本,将全局伤害等级附加到对象上,但是该脚本出现了一个控制台错误 错误CS0120:非静态对象需要对象引用 字段、方法或属性AttackStat.atk 所以我很困惑,是否有一个统一脚本的要求,我没有达到或什么,我是相当新的编程在统一 谢谢你的时间 Attackstat.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class AttackStat
AttackStat.atk
所以我很困惑,是否有一个统一脚本的要求,我没有达到或什么,我是相当新的编程在统一
谢谢你的时间
Attackstat.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AttackStat : MonoBehaviour
{
public float atk;
}
答案是肯定的,请检查
解决方案1: 正如错误消息所述,
atk
是类的实例成员AttackStat
您需要创建类的实例/对象来访问它们
例如:
AttackStat attackStatInstance = new AttackStat();
float vlueObject = attackStatInstance.atk // It is accessible now
解决方案2:
如果您确实希望使用atk
而不创建实例(比如AttackStat.atk
),则应将变量定义为static,这意味着定义如下所示:
public class AttackStat : MonoBehaviour
{
public static float atk;
}
我试过了,唯一的问题是它没有给我一个空间来增加我所希望的东西的价值。与在普通scriptStatic中使用公共浮点变量一样,这意味着使用此值的所有对象都将共享该值。这几乎肯定是不可取的。如果是,则该类不再需要扩展MonoBehavior,也可以是
静态类
。请注意,不能对MonoBehavior派生对象调用new
。您必须使用AddComponent()
public class AttackStat : MonoBehaviour
{
public static float atk;
}