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();

有没有其他方法可以在没有"新"的情况下解决这个问题。

C#UNITY实例化类(创建对象)而不使用新运算符

如果播放器的实例化在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;

我不需要实例化它,我只需要调用类,然后初始化类,然后是类的变量。