Unity 2D 将滚动条的值设置为 0

Pac*_*ero 0 c# canvas unity-game-engine

我只是想在每次创建新的文本对象时将滚动视图对象的滚动条的值设置为 0。这样,最新的对象将始终保留在底部,而无需向下滚动(例如,想想视频游戏的聊天)。我的问题是,由于某种原因,程序将值设置为 0,然后创建文本对象,因此它将第二个最新对象保留在滚动视图的底部。

我的代码:

//Creates the Text objects
private GameObject GenerateTextObject(string content)
{
    //Creates the Text objects
    GameObject messagePrefab = Instantiate(MessagePrefab);
    Text textComponent = messagePrefab.GetComponent<Text>();

    //Sets the content of the text and parent
    textComponent.text = content;
    messagePrefab.transform.SetParent(ContentPanel.transform, false);

    ScrollbarVertical.value = 0;

    return messagePrefab;
}
Run Code Online (Sandbox Code Playgroud)

在代码中,我在函数末尾设置值,但在创建对象之前仍将滚动条的值设置为 0(正确地将滚动视图移动到底部)。

https://gyazo.com/897982521f13d7792ec26540490a40c0 在 Gyazo 图片中,您可以看到它不会一直向下滚动。

我尝试过使用协程和 waitForEndFrame 以及 waitforseconds(1),但似乎都不起作用。

编辑:当加载 Unity 并向滚动视图发送新消息时,我看到滚动条一直向下移动,然后快速向上移动,稍微隐藏了新的文本对象。

Plu*_*uto 6

您可以做的是创建一个新的Scroll View并按照以下步骤操作:

在此输入图像描述

结果是GenerateTextObject(Time.time.ToString());每秒调用一次。

private GameObject GenerateTextObject(string content)
{
    //Creates the Text objects
    GameObject messagePrefab = Instantiate(MessagePrefab);
    Text textComponent = messagePrefab.GetComponent<Text>();

    //Sets the content of the text and parent
    textComponent.text = content;
    messagePrefab.transform.SetParent(ContentPanel.transform, false); 

    //Force reset to the bottom on each message
    //ScrollbarVertical.value = 0;

    return messagePrefab;
}
Run Code Online (Sandbox Code Playgroud)