【问题标题】:How to make a 2D sprite rotate towards a specific point while facing perpendicular to the camera?如何使 2D 精灵在垂直于相机的同时朝向特定点旋转?
【发布时间】:2018-03-30 01:20:42
【问题描述】:

所以我正在创建一个 2D 项目。我希望我的 2D 精灵(一条蠕虫)在我的游戏平面中的特定点(例如足球精灵)的方向上旋转。我尝试使用LookRotation,但问题是蠕虫没有垂直于相机,因此它在 2D 视图中不可见。我的游戏在 X/Y 平面上。

当我运行它时,它看起来像这样; Image 1(注意看不到蠕虫了?)

这是 3D 视图; Image 2

这是代码;

Vector3 relativePos = target.transform.position - worm.transform.position;
Quaternion rotation = Quaternion.LookRotation (relativePos);   
worm.transform.rotation = rotation;

另外,改变向上的方向,比如将其设置为vector3.forward 是行不通的。非常感谢。

【问题讨论】:

  • 您应该将所有平面游戏元素组合在一起,然后将整个组旋转到面向相机,同时通过抑制其中一个坐标将元素视为 2D。

标签: c# unity3d rotation quaternions


【解决方案1】:

如果您不想单独旋转蜗杆以面对目标,我会假设您只希望它在 Z 轴上旋转。我复制了您的代码,将其更改为仅跟随 Z 轴,它有点看目标。如果这是您想要的行为,我不知道,但如果是这里就是代码。

Vector3 relativePos = target.transform.position - worm.transform.position;
Quaternion rotation = Quaternion.LookRotation(relativePos);
rotation.x = worm.transform.rotation.x;
rotation.y = worm.transform.rotation.y;
worm.transform.rotation = rotation;

这是一个立方体面向球的行为示例。

【讨论】:

  • 谢谢,这正是我想要的。这很简单,我徘徊了好几天才找到答案。
  • 如果它解决了您的问题,请您标记为已回答:) @JoeBrar
【解决方案2】:

我在统一进行游戏开发时遇到了同样的问题。您不能使用 3d 矢量来完成此操作。这是因为它会转向面对玩家,蠕虫会旋转 90 度,基本上使其穿过场景。

这是我通常用于自上而下游戏的代码:

 var dir = WorldPos - transform.position;
 var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
 transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);

编辑: 我忘了提这个,但 WorldPos 来自 ScreenToWorldPoint

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2013-10-23
    • 1970-01-01
    • 2021-03-11
    相关资源
    最近更新 更多