当玩家接近一个道具时,我希望它的一些属性被显示出来,但我不希望这些信息掩盖了玩家。我有下面的代码不工作。
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显示出来,所以所有条件都满足了,但是文本没有移动。有人有什么想法吗?
问题是tranform.position
的getter返回位置Vector3的'副本',因此调用Set只会改变该Vector3的'副本',而不是矩形变换的位置。
这是因为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);
如果你正在调试,你可以验证你正在显示的位置是你期望的,目前'Set'方法的第二个和第三个参数是:
this.transform.position.z
中间的不是应该是position.y吗?