You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity中如何让实例化的UI文本跟随Zombie预制体移动?

解决文本跟随僵尸移动的问题

嘿,我来帮你搞定这个文本不跟着僵尸走的问题!核心原因很简单:你现在只是在生成文本时把它放到了僵尸的初始位置,但僵尸移动后,文本没有收到任何“跟着走”的指令。这里有两种靠谱的解决方案,你可以按需选:

方案一:把文本变成僵尸的“小跟班”(首推)

这种方法最省心,让文本直接成为僵尸预制体的一部分,僵尸动它就自动跟着动,完全不用写额外的更新逻辑。

操作步骤:

  1. 打开你的Zombie预制体,在里面加个空物体(比如叫TextAnchor),把它拖到僵尸头顶或者你想显示文本的位置,作为文本的固定锚点。
  2. 修改你的WordSpawner脚本,把生成的文本挂到这个锚点下面,而不是Canvas:
public GameObject wordpb; // 你的文本预制体
public EnemyOne enemy;
public DisplayWord Spawn() {
    // 找到僵尸身上的文本锚点
    Transform textAnchor = enemy.transform.Find("TextAnchor");
    if(textAnchor == null) {
        Debug.LogError("Zombie预制体里找不到TextAnchor这个物体哦!");
        return null;
    }
    // 把文本实例化到锚点下,自动继承锚点的位置和旋转
    GameObject wordobj = Instantiate(wordpb, textAnchor.position, Quaternion.identity, textAnchor);
    DisplayWord displayWord = wordobj.GetComponent<DisplayWord>();
    return displayWord;
}
  1. 别忘了调整文本预制体的RectTransform:如果是UI文本,把锚点设成居中,调整好大小,确保在World Space模式下能正常显示。

这个方案的好处就是一劳永逸,性能还好,完全不用操心更新位置的事儿。

方案二:让文本每一帧“追”着僵尸跑(适合不能改僵尸预制体的情况)

要是你不想动Zombie预制体,那就给DisplayWord加个Update方法,让它每一帧都同步僵尸的位置:

首先,在DisplayWord里存好要跟随的僵尸引用:

public Text text;
public EnemyOne targetEnemy; // 要跟着的那个僵尸

void Update() {
    if(targetEnemy != null) {
        // 同步位置,这里可以加个y轴偏移让文本在头顶,别和僵尸叠一起
        transform.position = new Vector2(targetEnemy.transform.position.x, targetEnemy.transform.position.y + 1f);
    }
}

public void SetWord(string word) {
    text.text = word;
}

// 其他方法保持不变...

然后改一下WordSpawner的Spawn方法,把僵尸的引用传给文本:

public DisplayWord Spawn() {
    // 初始位置加个偏移,避免一开始就叠在僵尸身上
    Vector2 targetPos = new Vector2(enemy.transform.position.x, enemy.transform.position.y + 1f);
    GameObject wordobj = Instantiate(wordpb, targetPos, Quaternion.identity, canvas);
    DisplayWord displayWord = wordobj.GetComponent<DisplayWord>();
    // 把要跟随的僵尸传给文本
    displayWord.targetEnemy = enemy;
    return displayWord;
}

这种方法虽然能解决问题,但每一帧都要更新位置,不如子物体方案优雅,不过胜在不用改僵尸预制体。

小提醒

  • 确保你的Canvas模式是Screen Space - Camera或者World Space,而且World Camera已经正确赋值了!如果是Screen Space - Overlay模式,直接用世界坐标会出问题的。
  • 调整文本位置时记得加个偏移量,比如y轴+1,这样文本会飘在僵尸头顶,看着更舒服~

内容的提问来源于stack exchange,提问作者drunkdazed

火山引擎 最新活动