Unity - 文本对象实例化在错误的位置
Unity - Text object instancing at wrong position
我正在实例化一个小的 UI canvas,其中的文本显示在接听联系人的上方:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PickUpCheck : MonoBehaviour {
public GameObject pickUp;
public GameObject textBox;
public GameObject particle;
private Vector3 pickUpPos;
// Use this for initialization
void Start () {
pickUpPos = pickUp.transform.position;
}
void OnTriggerEnter2D(Collider2D collider)
{
Instantiate(particle, pickUpPos, new Quaternion());
Instantiate(textBox, pickUpPos , new Quaternion());
Destroy(pickUp.gameObject);
}
}
canvas 和文本出现在其他地方。具体来说,在我最初在编辑器中引用的文本对象的位置。
我不确定为什么这会覆盖实例代码中设置的位置。我已经移动了引用的 canvas 对象预制件(包括原点)并将其重新引用到拾取对象,它总是会出现在这个位置而不是拾取位置。
Edit - 澄清一下,pickUp 是该脚本附加到的游戏对象。 GameObject 粒子是一个粒子效果,当对象发生碰撞时设置为实例。与当前问题无关
您正在 Start()
上设置位置,这意味着它会在您开始 运行 游戏时设置一次。
你试过在需要当前位置的时候这样设置吗?
void OnTriggerEnter2D(Collider2D collider)
{
pickUpPos = pickUp.transform.position;
Instantiate(particle, pickUpPos, new Quaternion());
Instantiate(textBox, pickUpPos , new Quaternion());
Destroy(pickUp.gameObject);
}
所以我找到了一个简单的解决方法——我将创建对象的实例赋值给一个变量,然后将该变量的位置设置为拾取对象的位置:
void OnTriggerEnter2D(Collider2D collider)
{
pickUpPos = pickUp.transform.position;
textBox = Instantiate(textBox, pickUpPos , new Quaternion());
textBox.transform.position = pickUpPos;
Destroy(pickUp.gameObject);
}
现在按预期工作。
我正在实例化一个小的 UI canvas,其中的文本显示在接听联系人的上方:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PickUpCheck : MonoBehaviour {
public GameObject pickUp;
public GameObject textBox;
public GameObject particle;
private Vector3 pickUpPos;
// Use this for initialization
void Start () {
pickUpPos = pickUp.transform.position;
}
void OnTriggerEnter2D(Collider2D collider)
{
Instantiate(particle, pickUpPos, new Quaternion());
Instantiate(textBox, pickUpPos , new Quaternion());
Destroy(pickUp.gameObject);
}
}
canvas 和文本出现在其他地方。具体来说,在我最初在编辑器中引用的文本对象的位置。
我不确定为什么这会覆盖实例代码中设置的位置。我已经移动了引用的 canvas 对象预制件(包括原点)并将其重新引用到拾取对象,它总是会出现在这个位置而不是拾取位置。
Edit - 澄清一下,pickUp 是该脚本附加到的游戏对象。 GameObject 粒子是一个粒子效果,当对象发生碰撞时设置为实例。与当前问题无关
您正在 Start()
上设置位置,这意味着它会在您开始 运行 游戏时设置一次。
你试过在需要当前位置的时候这样设置吗?
void OnTriggerEnter2D(Collider2D collider)
{
pickUpPos = pickUp.transform.position;
Instantiate(particle, pickUpPos, new Quaternion());
Instantiate(textBox, pickUpPos , new Quaternion());
Destroy(pickUp.gameObject);
}
所以我找到了一个简单的解决方法——我将创建对象的实例赋值给一个变量,然后将该变量的位置设置为拾取对象的位置:
void OnTriggerEnter2D(Collider2D collider)
{
pickUpPos = pickUp.transform.position;
textBox = Instantiate(textBox, pickUpPos , new Quaternion());
textBox.transform.position = pickUpPos;
Destroy(pickUp.gameObject);
}
现在按预期工作。