【发布时间】:2017-10-23 20:56:59
【问题描述】:
我的脚本附加在预制对象上并附加到按钮上有一个奇怪的问题。我试图搜索这个问题,但没有成功。
我将解释一个非常简单的例子。 我有一个预制件 PlayerPrefab,它是由脚本 PlayerSpawn 通过指令创建的:
Instantiate (playerPrefab, transform.position, Quaternion.identity);
因此,当游戏开始时,会创建一个新的 PlayerPrefab 实例。
附加到预制件有一个带有一些私有变量的脚本(为简单起见,我编写了一个简单的脚本代码):
public class ShipClass : MonoBehaviour {
float speed;
int count;
void Start () {
speed = 0;
count = 0;
Debug.Log ("Start executed, speed = " + speed);
}
void Update () {
Debug.Log("speed in Update = " + speed);
}
public void Push ()
{
speed = 50;
count++;
Debug.Log("speed in Push = " + speed);
Debug.Log("count = " + count);
}
}
然后我创建了一个带有 OnClick 事件的 UI 按钮,附加预制对象并调用方法 Push()。
行为很奇怪: 第一次启动游戏时,Update() 和 Push() 方法的打印速度为 0。但是当我开始单击 UI 中的按钮时,Push() 方法中的速度变为 50,但 Update( ) 仍然打印 0,就好像我们有两个不同的变量 speed。
第二件事是按下按钮,计数变量增加。当我停止游戏并重新启动它时,计数变量不会在 Start 方法中重置(即使执行 Start(),查看打印日志),而是从上次运行的最后一个值开始。 此外,我们有与 speed 变量相同的行为:在 Update() 中,count 保持为 0,在 Push() 中,count 继续增加,就像我们有两个不同的“count”变量一样。
我知道这是由于预制对象,但我不知道变量在 Update() 和自己创建的方法中的行为有何不同。
提前感谢您的帮助。
【问题讨论】:
-
快照可以提供帮助。请附上。关于你的变量,你需要将你的浮点数设置为浮点数:速度 = 50.0f;速度 = 0.0f.
标签: c# unity3d process.start