无法更改其他场景中的游戏对象位置

Posted

技术标签:

【中文标题】无法更改其他场景中的游戏对象位置【英文标题】:Couldn't change gameobject position in other scene 【发布时间】:2021-03-21 20:33:12 【问题描述】:

我在游戏中添加了 score 属性。但是当游戏场景发生变化时,我找不到如何改变它的位置。 (在这种情况下,得分属性在游戏顶部,我试图在游戏中间改变它的位置)

这是我将“GameHandler”对象(包含分数属性)移动到其他场景的代码:

 private void Awake()

    gameHandlerCount = FindObjectsOfType<GameHandler>().Length;

    if (gameHandlerCount > 1)
    
        Destroy(gameObject);
    

    else
    
        DontDestroyOnLoad(gameObject);
    

(当前位置):https://i.stack.imgur.com/ZFt3W.png[1]

(目标位置):https://i.stack.imgur.com/cwWKp.png [2]

感谢您的关注

【问题讨论】:

【参考方案1】:

问题可能是Destroy 被延迟并且没有立即发生。

这意味着FindObjectsOfType 可能仍会返回已销毁的对象,因此您可能会销毁所有实例。


您可以使用实际的单例模式:

// public read-only property
public static GameHandler Instance => _instance;

private static GameHandler _instance;

private void Awake()

    if(_instance)
    
        Destroy (gameObject);
        return;
    

    _instance = this;
    DontDestroyOnLoad (gameObject);

我不知道你在哪里尝试改变它的位置,但你现在可以做

GameHandler.Instance.transform.position = new Vevtor3 (x,y,z);

好的,添加图片后:

实际上,您要做的不是使用绝对定位,而是将乐谱文本居中。

您可以通过 RectTransform 组件执行此操作,例如选择这个选项

您还可以按住 CTRLSHIFT 直接应用更改和旋转设置并将其设置为顶部和中心。

【讨论】:

我做了你上面写的。但它并没有改变任何东西。其实我不能很好地表白自己。对不起。我希望在游戏场景发生变化时改变记分牌。我添加了图片来解释我想要做什么@derHugo @apoleyta97 查看底部的更新。 我做到了。但记分牌位置没有改变。它仍然出现在游戏的右上角。也许我应该通过脚本更改它? (因为游戏还在进行中)

以上是关于无法更改其他场景中的游戏对象位置的主要内容,如果未能解决你的问题,请参考以下文章

公共静态 Dictionary<String,GameObject> 中的游戏对象在 Unity 中的场景更改时被销毁

Unity Vuforia Google VR - 无法让 onPointerEnter 自行更改游戏对象的材质

如何更改共享脚本中的变量,而不影响共享该脚本的所有其他游戏对象?

如果它已被不同的游戏对象使用,则更改游戏对象的位置?

在场景之间共享游戏对象

无法更改附加到游戏对象的脚本上的公共变量。值在播放时恢复