Unity 2D - 跟随物体时精灵闪烁

4
我正在创建一个简单的脚本,告诉游戏对象它需要跟随另一个游戏对象,并保持一定的距离。
代码:
void Update()
{
    objPos = GameObject.FindGameObjectWithTag("Player").transform.position;
    transform.position = new Vector3(objPos.x + 0.5f, objPos.y + 0.5f);

}

问题是:下面的游戏对象在闪烁。当您观看它时,它似乎比跟随的游戏对象落后几帧。我之前在我的早期原型中注意到了这一点,但现在对于我的新游戏来说非常关键。所以我认为这是一个相当普遍的问题。
有没有解决这种不良行为的解决方案?
谢谢。

1
仅供娱乐,将方法名称更改为LateUpdate()是否有任何重要作用?当您玩游戏时,您是否启用了VSync?当持续处于60FPS时与未锁定时观察其行为肯定是值得的。您确定闪烁与精灵顺序(即层中的顺序)无关吗?如果它们在同一层上,则会导致可见的闪烁,因为这些对象的z-Order会随机更改。就性能而言,修复objPos是明智的(例如,使其公共并在检查器中分配),每次搜索可能造成成本。 - Maximilian Gerhardt
1
我之前尝试过使用LateUpdate。结果相同。更改层次顺序也没有帮助。将gameobject单独存储也没有帮助。 - Bob T.
我正在寻找一个静态的gameobject,距离玩家为0.5 x 5(不是字面意思,只是为了测试目的)。 - Bob T.
我建议将其制作成预置或复合游戏对象。然后引擎会自动处理与玩家对象的偏移量(即将其设为玩家对象的子对象)。特别是如果只是用于测试,因为您可以随时将对象从预置/复合中删除或使其不可见。 - MutantNinjaCodeMonkey
1
嗯...我相信你可以制作一个预制件,让玩家对象和箭头对象都成为其子对象。然后,您应该能够独立旋转玩家而不影响箭头的偏移位置。您将通过预制件位置设置精灵位置,但通过嵌入式玩家精灵进行旋转。希望这样说得清楚。 - MutantNinjaCodeMonkey
显示剩余3条评论
1个回答

0

GameObject.FindGameObjectWithTag("Player") 的性能成本很高,不要每帧都使用它,而是持有一个玩家实例。如果玩家在场景中是常量,则更好。

public Transform playerTransform;

void Update()
{
    transform.position = playerTransform.position + new Vector3(0.5f, 0.5f);
}

然后在Unity编辑器中使用检视器将Player的变换分配给此对象。(或者在代码中动态分配)

如果你的Player对象会被销毁并且偶尔重新实例化一个新的,你可以将新的对象分配给跟随者对象,或者使用一个简单的访问方法,像这样:

Transform _playerTransform;
Transform playerTransform
{
    get
    {
        if(_playerTransform == null)
        {
            _playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
        }
        return _playerTransform;
    }
}

void Update()
{
    transform.position = playerTransform.position + new Vector3(0.5f, 0.5f);
}

1
不幸的是,我之前尝试过了,但情况并非如此 :( 无论如何还是谢谢。 - Bob T.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接