正确的 GameObject 结构以及当子对象移动/包含 RigidBody 时如何移动父对象

Proper GameObject structure and how to move the parent object, when the child is moving / contains the RigidBody

关于这个主题我有几个问题,但由于某些原因我最终不得不将玩家角色拆分为一个父对象和几个子对象。我现在会尽量专注于这个问题。

首先,这与2D等距游戏中的角色有关。

这导致父对象包含所有脚本,而实际主体(Ridigbody 2D、Animator、Sprite Renderer、Collider)位于单独的子对象中。

我通过改变“Player Body”刚体速度来控制玩家,正如我在很多教程中看到的那样 - 这非常有效:

this.rigidBody.velocity = velocity;

由于刚体是子物体,父物体不会随之移动。

问题是,我需要能够偏移不同的动画,但除了将 SpriteRenderer 和 Animator 从父对象中分离出来之外,我没有找到其他方法。所以现在,我可以选择是能够偏移动画,还是正确移动父对象。

很明显,我以错误的方式处理这个问题 - 但我找不到关于 2d 等距 space 中角色的正确游戏对象结构应该是什么样子的资源。我对角色的“中心点”有同样的问题,它不是游戏对象的左上角。

我的问题是:

我应该如何最好地构造我的角色游戏对象来避免此类问题,同时保留偏移动画的能力?是所有东西都塞进了一个巨大的游戏对象中,还是将它们拆分成正确的方法?

我应该只保留结构并将父项与子项一起移动吗?这看起来更像是一个 hack 而不是解决方案。

我只是无法弄清楚如何正确设置这些东西,以及专业游戏如何处理这些问题,因为我能找到的任何教程总是专注于单个方面,而不是如何放置它们一起。

将刚体放在根中,这样只要它移动,其他所有东西都会随之移动。然后你可以把子对象上的其他组件分开。

编辑 1:忘记说明主对撞机应该位于具有刚体(在本例中为根)的同一游戏对象上。