【问题标题】: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]

感谢您的关注

【问题讨论】:

    标签: c# unity3d singleton gameobject


    【解决方案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 查看底部的更新。
    • 我做到了。但记分牌位置没有改变。它仍然出现在游戏的右上角。也许我应该通过脚本更改它? (因为游戏还在进行中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多