C#UNITY实例化类(创建对象)而不使用新运算符
本文关键字:运算符 实例化 创建对象 C#UNITY | 更新日期: 2023-09-27 18:28:33
示例我有类名"PlayerClass"answers"StatClass"
PlayerClass
public float health = 100 ;
public float experience;
StatClass
PlayerClass playerclass = new PlayerClass()
public float health2;
public float experience2;
health2 = playerclass.health;
experience2 = playerclas.experience;
通常我必须创建"PlayerClass PlayerClass=new PlayerClass()"
结果将是相同的健康2和经验2;但每当我用代码对玩家类的healt进行更改时,StatClass的healt2结果将是相同的,它是100
抱歉我英语不好。
-----------------编辑-----
GameControl
public class GameControl : MonoBehaviour {
public static GameControl control;
public float health = 100;
public float experience = 1000;
// Use this for initialization
void Awake () {
/*
* Awake Start Before Start() Happen
*/
if (control == null) {
DontDestroyOnLoad (gameObject);
control = this;
} else if (control != this) {
Destroy (gameObject);
}
}
}
GetHealth
public class GetHealth : MonoBehaviour {
public static GetHealth getHealth;
GameControl gameControl = new GameControl();
//GameControl gameControl;
public static float health;
Text text;
void Awake () {
/*
* Awake Start Before Start() Happen
*/
if (getHealth == null) {
DontDestroyOnLoad (gameObject);
getHealth = this;
} else if (getHealth != this) {
Destroy (gameObject);
}
text = GetComponent<Text> ();
health = 0;
}
void Update(){
health = gameControl.health;
text.text = "Health: " + health;
}
}
我在GameControl中对值变量Health进行了更改。但当变量GameControl没有改变时,Get Health总是像第一次一样访问100。我想这可能是因为我们在GetHealth类中使用了"new"。
GameControl gameControl = new GameControl();
有没有其他方法可以在没有"新"的情况下解决这个问题。
如果播放器的实例化在updateStat
方法中,并且它正在void update()
方法中调用,则会导致一次又一次地实例化播放器对象。您可以尝试此操作或在构造函数中实例化playerclass2
。如果只有玩家对象存在,那么制作健康和经验static
也会有所帮助。
Class StatClass{
PlayerClass playerclass2;
public float health2;
public float experience2;
public void updateStat(){
if(playerclass2==null) playerclass2 = new PlayerClass();
health2 = playerclass2.health;
experience2 = playerclas2.experience;
}
}
编辑
不能使用new关键字,因为它是从MonoBehavior
派生的。必须使用ClassName.method()
格式从MonoBehavior
调用派生类的方法
谢谢大家,我找到了。
它只需要
health = GameControl.control.health;
我不需要实例化它,我只需要调用类,然后初始化类,然后是类的变量。