C# 脚本在场景重新加载后保留Vector2值。在Awake()或Start()函数中设置新的X、Y值不会';在第二次加载后不能工作

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(

我正在为android/IOS制作一个游戏,我使用Vector2通过按下/点击两个按钮(左、右)沿对角线移动玩家。我的问题是,在播放器与对象碰撞并死亡后,场景会重新加载。X,Y值等于重新加载前的值,但我希望它们为0,0

我已经摆弄了下面这三个脚本。这可能与玩家对象变为非活动状态有关。(如果第一次发布时很混乱,请道歉)

//来自玩家动作脚本

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