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

C# Unity 2D将滚动条的值设置为0,c#,unity3d,canvas,C#,Unity3d,Canvas,我只是想在每次创建新文本对象时将scrollview对象的滚动条的值设置为0。这样,最新的对象将始终保持在底部,而无需向下滚动(例如视频游戏的聊天)。我的问题是,出于某种原因,程序将值设置为0,然后创建文本对象,因此它将第二个最新对象保留在scrollview的底部 我的代码: //Creates the Text objects private GameObject GenerateTextObject(string content) { //Creates the Text obje

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

我的代码:

//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;
}
//创建文本对象
私有游戏对象GenerateTextObject(字符串内容)
{
//创建文本对象
GameObject MessagePrefable=实例化(MessagePrefable);
Text textComponent=messagePrefab.GetComponent();
//设置文本和父对象的内容
textComponent.text=内容;
messageprefable.transform.SetParent(ContentPanel.transform,false);
ScrollbarVertical.value=0;
返回消息预置;
}
在代码中,我在函数末尾设置值,但在创建对象之前,仍然将滚动条的值设置为0(正确地将滚动视图移到底部)

在Gyazo图片中,您可以看到它如何不向下滚动

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


编辑:当加载Unity并向scrollview发送新消息时,我看到滚动条一直向下移动,然后很快向上移动,只是隐藏了一点新的文本对象。

我还没有找到解决此问题的正确方法(我真的不知道问题的原因),但我为这种情况做了一些变通

为此,我只创建了一个小函数:

public void Testing()
{
    if (testing == true)
    {
        ScrollbarVertical.value = 0;
        testing = false;
    }

}
这将附加到滚动条的内置功能“On Value Changed(Single)”。为了让它工作,在GenerateTextObject(字符串内容)上创建文本对象后,我只需将bool“testing”更改为true


此修复非常难看,在不久的将来可能会导致更多问题,但就目前而言,它是解决此问题的一个快速而肮脏的解决方案。

我还没有找到解决此问题的正确修复方法(我真的不知道问题的原因),但我已经针对这种情况做了一些工作

为此,我只创建了一个小函数:

public void Testing()
{
    if (testing == true)
    {
        ScrollbarVertical.value = 0;
        testing = false;
    }

}
这将附加到滚动条的内置功能“On Value Changed(Single)”。为了让它工作,在GenerateTextObject(字符串内容)上创建文本对象后,我只需将bool“testing”更改为true


此修复非常难看,在不久的将来可能会导致更多问题,但现在,它是解决此问题的快速而肮脏的解决方案。

您可以做的是创建一个新的
滚动视图
,并按照以下步骤操作:

结果是调用
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;
}
private GameObject GenerateTextObject(字符串内容)
{
//创建文本对象
GameObject MessagePrefable=实例化(MessagePrefable);
Text textComponent=messagePrefab.GetComponent();
//设置文本和父对象的内容
textComponent.text=内容;
messageprefable.transform.SetParent(ContentPanel.transform,false);
//在每条消息上强制重置到底部
//ScrollbarVertical.value=0;
返回消息预置;
}

您可以做的是创建一个新的
滚动视图
,然后按照以下步骤操作:

结果是调用
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;
}
private GameObject GenerateTextObject(字符串内容)
{
//创建文本对象
GameObject MessagePrefable=实例化(MessagePrefable);
Text textComponent=messagePrefab.GetComponent();
//设置文本和父对象的内容
textComponent.text=内容;
messageprefable.transform.SetParent(ContentPanel.transform,false);
//在每条消息上强制重置到底部
//ScrollbarVertical.value=0;
返回消息预置;
}

将ScrollRect的弹性更改为
0
,然后执行
ScrollbarVertical.value=0。这只是一个想法。不确定这是否有效。不。。。我尝试过调整所有ScrollRect选项,但似乎没有任何效果(,非常感谢您再次帮助程序员在经过大量思考和处理不同的“修复”后,我想出了解决此问题的方法。再次感谢您尝试帮助:)我正要告诉您尝试一下。继续,把你的答案写出来,因为这会帮助别人。不客气!将ScrollRect的
弹性
更改为
0
,然后执行
ScrollbarVertical.value=0。这只是一个想法。不确定这是否有效。不。。。我尝试过调整所有ScrollRect选项,但似乎没有任何效果(,非常感谢您再次帮助程序员在经过大量思考和处理不同的“修复”后,我想出了解决此问题的方法。再次感谢您尝试帮助:)我正要告诉您尝试一下。继续,把你的答案写出来,因为这会帮助别人。不客气!你在哪里调用这个函数?我不确定它是如何正确调用的(我在unity和编程方面是新手),但是在inspector上,在滚动条垂直对象下,有一个小地方叫做“on Value Changed”,这就是我添加它的地方。哎呀。我错过了你提到的那件事。明白了。你在哪里调用这个函数?我不确定它是如何正确调用的(我在unity和编程方面都是新手),但是在inspector上,在滚动条垂直对象下,有一个小地方叫做“on Value Changed”,这就是我添加它的地方。哎呀。我错过了你提到的那件事。明白了,很有魅力。谢谢:)很有魅力。谢谢:)