2017-10-11 80 views
1

您會注意到的第一件事是複雜而令人迷惑的標題。 所以讓我解釋一下。使3D對象看起來像是面對2D空間中的一個點

我正在嘗試使用Unity在3D空間中製作2D遊戲。我使用3D角色作爲播放器。這看起來像這樣:

Pic1

正如你所看到的背景(A谷歌地圖)是二維的。玩家是躺在地上的3D對象(它看起來像站着)。

這工作很好,迄今。但我希望3D角色看起來像是面對着背景地圖上的一個點擊點。

例如:

Hes looking towards

和兩個例子:

enter image description here

enter image description here

的黑圈代表輕敲的位置。所以我完全不知道是否有辦法做到這一點,或者即使它可能做到這一點。

我嘗試下面的代碼,但只有轉動我的性格上的不同軸:

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

是甚至有一種方法來實現這一目標?我目前出來的想法... 我會很高興能得到任何幫助!

+0

只是0的目標方向的y。 – George

+0

@DreamsOfElectricSheep感謝您的快速回答!但那不起作用。玩家總是在地面上「放置」,以創造出他將在其上行走的幻覺。當我將y設置爲零時,他突然真的站在了地上O.o – genaray

+0

我認爲如果你切換y和z,它應該顯示這種效果。如果你的目標方向是(1,0,1),讓他面對(1,1,0)。 – yes

回答

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

      } 

     } 

    } 
} 
+0

感謝您的快速回答!我只是測試它。但不知何故,角色站在地圖上,而不是現在平行。他也圍繞z軸旋轉。他應該與地圖平行並圍繞x軸旋轉,以使他看起來很重要。我只是通過傾聽觸摸輸入和光線投射來獲得重點:) – genaray

相關問題