2017-07-24 30 views
0

我只是想在每次创建新文本对象时将我的scrollview对象的滚动条的值设置为0。这样,最新的对象将始终保持在底部而不需要向下滚动(例如,考虑视频游戏的聊天)。我的问题是,由于某种原因程序将值设置为0,然后创建文本对象,所以它将第二个最新的对象保持在滚动视图的底部。Unity 2D将滚动条的值设置为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; 
} 

在代码中,我设定值在函数的结束,但在此之前仍然设置滚动条的值为0(正常移动滚动视图的底部)对象被创建。

https://gyazo.com/897982521f13d7792ec26540490a40c0 在Gyazo图片中,您可以看到它如何不完全滚动。

我曾尝试使用协程和waitForEndFrame以及waitforsconds(1),但似乎没有工作。

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

+0

将ScrollRect的'elastic'更改为'0',然后执行'ScrollbarVertical.value = 0;'。这只是一个想法。不知道这是否会起作用。 – Programmer

+0

不...我试过用ScrollRect选项来调整,没有任何东西可以做到。 :(,非常感谢帮助再次程序员 –

+0

经过大量的思考和搞乱不同的“修复”后,我想出了一个解决这个问题的解决方法。再一次,谢谢你试图帮助:) –

回答

1

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

enter image description here

结果是从调用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; 
} 
+0

工程就像一个魅力。谢谢 :) –

1

我还没有拿出这个问题的适当解决方案(我真的不知道问题的原因),但我已经为这种情况制定了一些解决方法。

要做到这一点,我只是创建了一个小功能:

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

} 

这将连接到滚动条的内置功能“论价值改变(单)”。为了让它起作用,我只是在GenerateTextObject(字符串内容)上创建一个文本对象后,将bool“testing”更改为true。

这个修复方法真的很丑,在不久的将来可能会导致更多的问题,但现在,这是一个快速和肮脏的解决方案,这个问题。

+0

你在哪里调用该功能? – Programmer

+0

我不知道它是如何正确调用的(我在统一和编程方面真的很新),但在检查器上,在滚动条垂直对象下,有一个小地方叫做“On Value Changed”,这是我添加的地方它。 https://gyazo.com/5483eabac4b30171d6306facc60236ba –

+0

糟糕。我错过了你提到的* OnValueChanged *。得到它了。 – Programmer

相关问题