Unity C#,相机面向精灵和刚体不能一起工作
Unity C#, Camera facing sprite and rigidbody not working together
我有一小段代码可以让精灵(在 3D 世界中)始终面对相机(它必须是 3D space)。
public class CS_CameraFacingBillboard : MonoBehaviour {
private Camera m_Camera;
private void Start()
{
m_Camera = Camera.main;
}
void Update()
{
transform.LookAt(transform.position + m_Camera.transform.rotation *
Vector3.forward, m_Camera.transform.rotation * Vector3.up);
}
}
此代码确保 sprite 始终面向相机,导致它向后倾斜,因为 sprite 上方的相机以 45 度角朝下。当我在精灵上放置一个刚体时,精灵会自行向其倾斜的方向移动。没有附加此代码,刚体工作正常。
我怎样才能让精灵始终面向相机,并附有刚体?
您似乎将刚体设置为 Dynamic
,您应该将其设置为 Kinematic
。
编辑:在您发表评论后,我在 Unity 中检查了自己,可能我已经重新创建了您描述的行为。如果我在精灵上使用 Box Collider
而不锁定其刚体旋转,它也会发生在我身上。
所以你有三种可能的解决方案:
- 使用
Box Collider
并在刚体的 Constraints
下冻结旋转:
- 使用
Sphere Collider
(或其他与盒子不同的,您可以在播放模式下查看它们)。
- 将组件拆分为两个游戏对象,一个父对象和一个子对象。父级将拥有所有组件 除了 精灵渲染器和相机脚本,它们将在子级上。此选项最灵活且限制较少。你可以在不冻结旋转等的情况下使用盒子碰撞器
另一件事,你可以避免使用 LookAt
方法,只需使用:
transform.rotation = m_Camera.transform.rotation;
他们有相同的结果。
我有一小段代码可以让精灵(在 3D 世界中)始终面对相机(它必须是 3D space)。
public class CS_CameraFacingBillboard : MonoBehaviour {
private Camera m_Camera;
private void Start()
{
m_Camera = Camera.main;
}
void Update()
{
transform.LookAt(transform.position + m_Camera.transform.rotation *
Vector3.forward, m_Camera.transform.rotation * Vector3.up);
}
}
此代码确保 sprite 始终面向相机,导致它向后倾斜,因为 sprite 上方的相机以 45 度角朝下。当我在精灵上放置一个刚体时,精灵会自行向其倾斜的方向移动。没有附加此代码,刚体工作正常。
我怎样才能让精灵始终面向相机,并附有刚体?
您似乎将刚体设置为 Dynamic
,您应该将其设置为 Kinematic
。
编辑:在您发表评论后,我在 Unity 中检查了自己,可能我已经重新创建了您描述的行为。如果我在精灵上使用 Box Collider
而不锁定其刚体旋转,它也会发生在我身上。
所以你有三种可能的解决方案:
- 使用
Box Collider
并在刚体的Constraints
下冻结旋转: - 使用
Sphere Collider
(或其他与盒子不同的,您可以在播放模式下查看它们)。 - 将组件拆分为两个游戏对象,一个父对象和一个子对象。父级将拥有所有组件 除了 精灵渲染器和相机脚本,它们将在子级上。此选项最灵活且限制较少。你可以在不冻结旋转等的情况下使用盒子碰撞器
另一件事,你可以避免使用 LookAt
方法,只需使用:
transform.rotation = m_Camera.transform.rotation;
他们有相同的结果。