如何在Unity 4.6 +中移动UI元素的文本?

时间:2015-05-19 00:58:08

标签: user-interface unity3d

当玩家接近某个项目时,我希望显示其中的一些属性,但我不希望该信息覆盖玩家。我有以下代码不起作用。

t = GetComponentInChildren<Text> ();

void OnTriggerEnter(Collider col){
    if (col.gameObject.tag.Equals ("Player")) {
        playerInRange = true;
        col.GetComponent<Controller>().itemsInRange.Add(this.gameObject);
        GetComponentInChildren<Canvas> ().enabled = true;
    }
    if (player.transform.position.x < this.transform.position.x) {
        Debug.Log ("On yer right!");
        t.rectTransform.position.Set(this.transform.position.x+50,  this.transform.position.z, this.transform.position.z);
    }
    if (player.transform.position.x > this.transform.position.x) {
        t.rectTransform.position.Set(this.transform.position.x-50,  this.transform.position.z, this.transform.position.z);
    }
}

Debug.Log显示,因此所有条件都得到满足,但文本没有移动。有人有什么想法吗?

2 个答案:

答案 0 :(得分:1)

问题是tranform.position的getter返回位置Vector3的'副本',因此调用Set只会更改该vector3的'副本',而不会更改rect变换的位置。

这是因为Vector3是一个结构而不是一个类,因此不会通过引用传递。 https://msdn.microsoft.com/en-us/library/ms173109.aspx

因此,不是调用set,而是将新的向量3分配给位置变量

t.rectTransform.position = new Vector3(transform.position.x-50, transform.position.y, transform.position.z);

答案 1 :(得分:0)

如果您正在进行调试,您是否可以验证您所显示的位置是您预期的位置,目前是“&#39; Set&#39;”的第二个和第三个参数。方法是:

 this.transform.position.z

中间人不会被认为是位置吗?