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);
}

现在按预期工作。