【问题标题】:Unity - Text object instancing at wrong positionUnity - 在错误位置实例化的文本对象
【发布时间】:2018-03-27 02:50:04
【问题描述】:

我正在实例化一个带有文本的小型 UI 画布,以显示在接听联系人上方:

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

画布和文本出现在其他地方。具体来说,在我最初在编辑器中引用的文本对象的位置。

我不确定为什么这会覆盖实例代码中设置的位置。我已经移动了引用的画布对象预制件(包括到原点)并将其重新引用到拾取对象,它总是会出现在这个位置而不是拾取位置。

编辑 - 澄清一下,pickUp 是这个脚本附加到的游戏对象。 GameObject 粒子是在与对象碰撞时设置为实例的粒子效果。与当前问题无关。

【问题讨论】:

  • 代码中的游戏对象拾取和粒子是什么?

标签: unity3d instances


【解决方案1】:

您在Start() 上设置了位置,这意味着当您开始运行游戏时它会被设置一次。

你有没有试过在需要当前位置的时候设置,像这样?

void OnTriggerEnter2D(Collider2D collider)
{
    pickUpPos = pickUp.transform.position;
    Instantiate(particle, pickUpPos, new Quaternion());
    Instantiate(textBox, pickUpPos , new Quaternion());
    Destroy(pickUp.gameObject);
}

【讨论】:

  • 谢谢,我试过了,但画布对象仍然位于引用的对象位置(我连接到脚本的画布对象的位置)。此外,拾取器从不改变位置,因此在开始时设置的位置在运行期间不会有所不同。
【解决方案2】:

所以我找到了一个简单的解决方案——我将创建的对象的实例分配给一个变量,然后将该变量的位置设置为拾取对象的位置:

void OnTriggerEnter2D(Collider2D collider)
{
    pickUpPos = pickUp.transform.position;
    textBox = Instantiate(textBox, pickUpPos , new Quaternion());
    textBox.transform.position = pickUpPos;
    Destroy(pickUp.gameObject);
}

现在按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多