【问题标题】:Make a 3D Object look like it is facing a point in an 2D space使 3D 对象看起来像是面向 2D 空间中的一个点
【发布时间】:2017-10-11 18:37:10
【问题描述】:

您首先会注意到的是复杂而令人困惑的标题。 所以让我解释一下。

我正在尝试使用 Unity 在 3D 空间中制作 2D 游戏。我正在使用 3D 角色作为播放器。这看起来像这样:

如您所见,背景(谷歌地图)是二维的。而玩家是一个躺在地上的 3D 物体(它看起来就像是站立的一样)。

到目前为止一切正常。但我希望 3D 角色看起来像面对背景地图上的点击点。

例如:

还有两个例子:

黑色圆圈代表点击的位置。所以我完全不知道是否有办法做到这一点,或者即使有可能做到这一点。

我尝试了以下代码,但这只会使我的角色在不同的轴上旋转:

    Vector3 targetDir = tapped.position - transform.position;

    float step = speed * Time.deltaTime;

    Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0F);

    transform.rotation = Quaternion.LookRotation(newDir);

有没有办法做到这一点?我目前没有想法... 如果能得到任何帮助,我将非常高兴!

【问题讨论】:

  • 目标方向的y只有0。
  • @DreamsOfElectricSheep 感谢您的快速答复!但这不起作用。玩家一直“躺”在地上,以创造他会在上面行走的错觉。当我将 y 设置为零时,他突然真的站在地上 O.o
  • 我认为如果你切换 y 和 z 应该会显示这种效果。如果你的目标方向是 (1,0,1),让他面对 (1,1,0)。
  • @yes 感谢您的回答!不幸的是,这也不起作用。当我点击某个地方时,角色要么在错误的轴上旋转,要么什么都不做:/.
  • 是的,在我考虑了一下之后,认为它会那么容易是愚蠢的。给你贴了一个小sn-p。

标签: c# google-maps unity3d 3d 2d


【解决方案1】:

这应该可以解决问题。让你的模型成为一个未旋转的空的孩子,面对你的第一张图片,然后把下面的脚本放在上面。我不知道你是怎么理解的,这是我统一尝试的。希望对您有所帮助。

using UnityEngine;

public class LookAtTarget : MonoBehaviour {

    //assign in inspector
    public Collider floor;

    //make sure you Camera is taged as MainCamera, or make it public and assign in inspector
    Camera mainCamera;

    RaycastHit rayHit;

    //not needed when assigned in the inspector    
    void Start() {
        mainCamera = Camera.main;
    }

    void Update () {

        if(Input.GetMouseButtonUp(0)) {

            if(floor.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out rayHit, Mathf.Infinity)) {
                //its actually the inverse of the lookDirection, but thats is because the rotation around z later.
                Vector3 lookDirection = transform.position - rayHit.point;

                float angle = Vector3.Angle(lookDirection, transform.forward);

                transform.rotation = Quaternion.AngleAxis(Vector3.Dot(Vector3.right, lookDirection) > 0 ? angle : angle * -1, Vector3.forward);

            } 

        }

    }
}

【讨论】:

  • 感谢您的快速答复!我刚刚测试了它。但不知何故,角色现在站在地图上,而不是平行。他也绕z轴旋转。他应该与地图平行,并围绕 x 轴旋转以使他看向该点。我只是通过监听触摸输入和光线投射来明白这一点:)
猜你喜欢
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2018-10-20
相关资源
最近更新 更多