BoardScript.cs中的最小代码
public class BoardScript : MonoBehaviour {
private float angle;
private static BoardScript instance;
void Awake() {
if (instance == null) {
instance = this;
}
else if (instance != this) {
Destroy(gameObject);
}
}
Start(){
angle = 0.5f;
}
Update(){
Debug.Log("angle = " + angle); // logged angle never changes.
Debug.Log("GetAngle() returns " + GetAngle()); // also never changes...
}
public SetAngle(float arg) {
angle = arg;
Debug.Log("angle set to " + angle);
// Above always logs new angle as called fron Settings.cs.
}
private float GetAngle() { // only use is for debugging this issue.
Debug.Log("angle is " + angle); // Does not log newly set angle.
return angle;
}
}
最小代码Settings.cs
private GameObject theBoard;
public void SetBoardAngule(float arg) {
theBoard.GetComponent<BoardScript>().SetAngle(arg);
Debug.Log("Settings - SetAngle to " + arg); // Logs correct angle.
}
无论在方法SetAngle()中设置什么,更新函数都会记录“angle = 0.5”。这对我来说似乎非常简单。我做错了什么?
首先要做的是:你的吸气器设置器都很好。
其他的东西:首先,如果你来自Java世界,你不需要为getter setter创建函数:
public SetAngle(float arg) {
angle = arg;
Debug.Log("angle set to " + angle);
// Above always logs new angle as called fron Settings.cs.
}
private float GetAngle() { // only use is for debugging this issue.
Debug.Log("angle is " + angle); // Does not log newly set angle.
return angle;
}
可以转换为:
public float Angle
{
get{return _angle;}
set{_angle = value;}
}
第二,我不确定你为什么要破坏对象,而不是在清醒时创建一个:但是你在这里做的是,如果对象不存在,创建一个,......否则如果对象存在,则破坏当前,但是没有创造另一个。
第三:它也与第二个有关:我们正在创建单例,只有一个我们类的实例,如果这是你想要的,有很多方法可以做到,但你必须相应地设置你的变量:目前你正在设置(此实例)上的值可能会从(存储的实例)发生变化,一旦发生这种情况,您就会丢失指针,并且必须在单例类上调用它:
public float Angle
{
get{return BoardScript.instance._angle;}
set{BoardScript.instance._angle = value;}
}
代替:
public float Angle
{
get{return this._angle;}
set{this._angle = value;}
}
第四:它再次与第二个相关:首先你的对象实例将被存储在实例变量中,但是如果你创建另一个调用awake的对象(我忘记了awake是如何工作并被调用的)那个对象会导致当前对象被获取处置,我不确定这是否是你想要的行为,只是说......
void Awake() {
if (instance == null) {
instance = this;
}
else if (instance != this) {
Destroy(gameObject);
}
}
正如评论员指出的那样,改变
private static BoardScript instance;
至
public BoardScript instance;