小编Pac*_*ero的帖子

在继续使用C#Unity功能之前,请等待协程完成

我正在努力让一个单位在Unity2d中通过网格移动.我让运动顺利运转.我希望函数MovePlayer等到协程完成后再继续,所以程序将等到玩家完成移动后再发出更多订单.

这是我的代码:public class Player:MonoBehaviour {

public Vector3 position;
private Vector3 targetPosition;

private float speed;

void Awake ()
{
    speed = 2.0f;
    position = gameObject.transform.position;
    targetPosition = position;
    GameManager.instance.AddPlayerToList(this);                     //Register this player with our instance of GameManager by adding it to a list of Player objects. 
}

//Function that moves the player, takes a list of nodes as path
public void MovePlayer(List<Node> path)
{
    StartCoroutine(SmoothMovement(path));
    //Next step should wait until SmoothMovement is finished
}

private IEnumerator SmoothMovement(List<Node> path)
{
    float step …
Run Code Online (Sandbox Code Playgroud)

c# coroutine unity2d

5
推荐指数
1
解决办法
7023
查看次数

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

我只是想在每次创建新的文本对象时将滚动视图对象的滚动条的值设置为 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 并向滚动视图发送新消息时,我看到滚动条一直向下移动,然后快速向上移动,稍微隐藏了新的文本对象。

c# canvas unity-game-engine

0
推荐指数
1
解决办法
7211
查看次数

标签 统计

c# ×2

canvas ×1

coroutine ×1

unity-game-engine ×1

unity2d ×1