C# Unity 2D将滚动条的值设置为0
我只是想在每次创建新文本对象时将scrollview对象的滚动条的值设置为0。这样,最新的对象将始终保持在底部,而无需向下滚动(例如视频游戏的聊天)。我的问题是,出于某种原因,程序将值设置为0,然后创建文本对象,因此它将第二个最新对象保留在scrollview的底部 我的代码: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
//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”,这就是我添加它的地方。哎呀。我错过了你提到的那件事。明白了,很有魅力。谢谢:)很有魅力。谢谢:)