当玩家接近某个项目时,我希望显示其中的一些属性,但我不希望该信息覆盖玩家。我有以下代码不起作用。
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显示,因此所有条件都得到满足,但文本没有移动。有人有什么想法吗?
答案 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
中间人不会被认为是位置吗?