Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# unity脚本可以仅仅是一个公共变量吗_C#_Variables_Unity3d_Methods - Fatal编程技术网

C# unity脚本可以仅仅是一个公共变量吗

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

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

错误CS0120:非静态对象需要对象引用 字段、方法或属性
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;
}