Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使三维对象看起来像是面对二维空间中的一个点_C#_Google Maps_Unity3d_3d_2d - Fatal编程技术网

C# 使三维对象看起来像是面对二维空间中的一个点

C# 使三维对象看起来像是面对二维空间中的一个点,c#,google-maps,unity3d,3d,2d,C#,Google Maps,Unity3d,3d,2d,你会注意到的第一件事是复杂而混乱的标题。 让我解释一下 我正在尝试使用Unity在3D空间中制作2D游戏。我使用一个3D角色作为玩家。这看起来像: 正如你所见,背景(谷歌地图)是二维的。当玩家是一个躺在地上的3D物体时(它看起来就像是站着的) 到目前为止效果不错。但我希望3D角色看起来像是面对背景地图上的一个点击点 例如: 还有两个例子: 黑色圆圈表示抽头位置。因此,我完全不知道是否有办法做到这一点,甚至不知道是否有可能做到这一点 我尝试了以下代码,但这只会在不同的轴上旋转我的角色:

你会注意到的第一件事是复杂而混乱的标题。 让我解释一下

我正在尝试使用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);
有没有办法做到这一点?我现在没有主意了。。。
如果能得到任何帮助,我将非常高兴

这应该能奏效。将您的模型设置为未旋转的空模型的子模型,并将下面的脚本置于其上。我不知道你是怎么理解的,这是我在团结中尝试的。希望能有帮助

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);

            } 

        }

    }
}

只需将目标方向的y值设为0即可。@Dreamsof谢谢您的快速回答!但这不起作用。玩家一直“躺”在地上,制造他将在地上行走的幻觉。当我把y设为0时,他突然真的站在地上。我想如果你把y和z切换,应该会显示出这种效果。如果你的目标方向是(1,0,1),让他面对(1,1,0)。@是的,谢谢你的回答!不幸的是,这也不起作用。当我点击某个位置时,角色要么在错误的轴上旋转,甚至什么都不做:/。是的,在我考虑了一段时间后,认为这会那么容易是愚蠢的。为您发布了一个小片段。谢谢您的快速回答!我刚测试过。但不知何故,这个角色现在不是平行的,而是站在地图上。他还绕z轴旋转。他应该与地图平行,并绕x轴旋转,使他看向点。我只是通过聆听触摸输入和光线投射来了解要点:)