C# 脚本在场景重新加载后保留Vector2值。在Awake()或Start()函数中设置新的X、Y值不会';在第二次加载后不能工作
我正在为android/IOS制作一个游戏,我使用Vector2通过按下/点击两个按钮(左、右)沿对角线移动玩家。我的问题是,在播放器与对象碰撞并死亡后,场景会重新加载。X,Y值等于重新加载前的值,但我希望它们为0,0 我已经摆弄了下面这三个脚本。这可能与玩家对象变为非活动状态有关。(如果第一次发布时很混乱,请道歉) //来自玩家动作脚本C# 脚本在场景重新加载后保留Vector2值。在Awake()或Start()函数中设置新的X、Y值不会';在第二次加载后不能工作,c#,unity3d,C#,Unity3d,我正在为android/IOS制作一个游戏,我使用Vector2通过按下/点击两个按钮(左、右)沿对角线移动玩家。我的问题是,在播放器与对象碰撞并死亡后,场景会重新加载。X,Y值等于重新加载前的值,但我希望它们为0,0 我已经摆弄了下面这三个脚本。这可能与玩家对象变为非活动状态有关。(如果第一次发布时很混乱,请道歉) //来自玩家动作脚本 private void Awake() { moveChange = new Vector2(0.0f, 0.0f); } void Start(
private void Awake()
{
moveChange = new Vector2(0.0f, 0.0f);
}
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
Vector3 movement = moveChange * speed * Time.deltaTime;
rb.MovePosition(transform.position + movement);
}
public void ClickR()
{
moveChange = new Vector2(0.5f, 1.0f);
}
public void ClickL()
{
moveChange = new Vector2(-0.5f, 1.0f);
}
//从重新加载脚本
void Update()
{
if (GameObject.FindWithTag("Player") == null)
{
timer += Time.deltaTime;
if (timer > beforeLoading)
{
Scene scene = SceneManager.GetActiveScene();
SceneManager.LoadScene(scene.name);
}
}
}
因此,播放器对象不会按预期在第一个场景加载时移动,而是立即开始向左/向右移动,这取决于在场景重新加载之前按下/点击的按钮。我曾尝试在Awake()/Start()函数和OnTiggerEnter中将X,Y值设置为0f,0f,但没有成功
我注意到的一件事是,如果我在重新加载关卡之前点击屏幕上除按钮以外的其他地方(android),播放器不会移动,X,Y设置为0,0。这与代码无关。我将按钮上的“事件触发器”脚本上的“事件类型”更改为“PointerDown”,而不是“PointerEnter”,现在它按预期工作。就这么简单。这与代码无关。我将按钮上的“事件触发器”脚本上的“事件类型”更改为“PointerDown”,而不是“PointerEnter”,现在它按预期工作。就这么简单。如何声明
moveChange
呢?还请注意,您永远不要在更新中使用GameObject.FindWithTag(“Player”)
或任何重复调用的方法!这是非常激烈的表演!而是在播放器中引用重新加载脚本,并使其调用重新加载方法是否涉及任何DontDestroyOnLoad
?在这种情况下,不会再次调用Awake
和Start
代码>和Vector2 moveChange=新的Vector2(0.0f,0.0f)代码>但目前是前者,我将后者放在Awake()中。任何脚本中都没有DontDestroyOnLoad。因此没有DontDestroyOnLoad
,对吗?还有一个旁注:在FixedUpdate
中,您应该使用Time.fixedDeltaTime
如何声明moveChange
呢?还要注意,您永远不要在Update中使用GameObject.FindWithTag(“Player”)
或任何重复调用的方法!这是非常激烈的表演!而是在播放器中引用重新加载脚本,并使其调用重新加载方法是否涉及任何DontDestroyOnLoad
?在这种情况下,不会再次调用Awake
和Start
代码>和Vector2 moveChange=新的Vector2(0.0f,0.0f)代码>但目前是前者,我将后者放在Awake()中。任何脚本中都没有DontDestroyOnLoad。因此没有DontDestroyOnLoad
,对吗?还有一个旁注:在FixedUpdate
中,您应该使用Time.fixedelatime
void Update()
{
if (GameObject.FindWithTag("Player") == null)
{
timer += Time.deltaTime;
if (timer > beforeLoading)
{
Scene scene = SceneManager.GetActiveScene();
SceneManager.LoadScene(scene.name);
}
}
}