2017-02-23 84 views
1

我正在製作2D風格的Unity 3D遊戲。相機只能跟隨玩家從左到右,但我希望我的環境有一種深度感。這不是一款自上而下的遊戲,更像是一款2D馬里奧遊戲。我希望玩家能夠在物體前面移動,例如,當他們按下時,他們身後將會有一棵樹,並且如果他們向前移動到更遠的位置,這樣樹就會在他們面前。如何讓玩家在Unity中移動前面和後面的對象

這是我到目前爲止的動作腳本。

using UnityEngine; 
using System.Collections; 

public class Move : MonoBehaviour { 

    Animator anim; 

    // Use this for initialization 
    void Start() { 
     anim = GetComponent<Animator>(); 
    } 

    // Update is called once per frame 
    void Update() { 
     Movement(); 
    } 
    void Movement(){ 

     anim.SetFloat("Speed", Mathf.Abs (Input.GetAxisRaw ("Horizontal"))); 

     if (Input.GetAxisRaw ("Horizontal") > 0) { 
      transform.Translate(Vector2.right* 4f*Time.deltaTime); 
      transform.eulerAngles = new Vector2(0, 0); 
     } 
     if (Input.GetAxisRaw ("Horizontal") < 0) { 
      transform.Translate (Vector2.right * 4f * Time.deltaTime); 
      transform.eulerAngles = new Vector2 (0, 180); 
     } 

     if(Input.GetAxisRaw("Vertical") >0){ 
      transform.Translate (Vector2.up * 4f * Time.deltaTime); 
      transform.eulerAngles = new Vector2(0, 0); 
    } 

     if(Input.GetAxisRaw("Vertical") <0){ 
      transform.Translate (Vector2.down * 4f * Time.deltaTime); 
      transform.eulerAngles = new Vector2(0, 0); 
     } 
    } 
} 
+0

嗨,歡迎來到SO。請確保詳細解釋您正在處理的預期和現狀;很難理解你遇到的問題。 –

回答

1

該解決方案真的取決於你如何做你的水平。

如果一切都在同一條線上,可以這麼說,那麼修改精靈渲染器的排序順序可以爲您提供解決方案。 檢查精靈渲染器文檔: https://docs.unity3d.com/Manual/class-SpriteRenderer.html

如果一切都在單獨的圖層上,現在就面臨挑戰。我的意思是你提供精靈渲染器的排序層。這可以產生一些有趣的結果,因爲僅僅修改排序順序是不夠的,你也必須改變圖層。如果我沒有弄錯,你會在你的項目設置中將圖層更改爲上面的圖層。如果一切都在同一圖層上,那麼更改排序順序就足夠了。

不要忘記考慮碰撞檢測的潛在問題,因爲改變遊戲對象的通道意味着你可能不得不將其物理層改爲物理層,所以碰撞者不會碰到層上的任何東西前面。 https://docs.unity3d.com/Manual/LayerBasedCollision.html

希望這會使您朝着正確的方向前進。

1

聽起來像是你需要更改排序順序爲你的精靈,這樣當玩家是一棵樹上面,玩家的精靈種類後面。嘗試在播放器上的組件的update()和所有樹上添加這樣的內容。

var sprite = GetComponent<SpriteRenderer>(); 
sprite.sortingOrder = Mathf.RoundToInt(transform.position.y * -10f); 

如果您在導入精靈時將該精靈的透視點設置爲接觸地面的位置,此方法效果最佳。

+0

或者您可以在編輯器中設置訂單 – Thalthanas

0

一種解決方案是簡單地改變播放器位置的Z軸值。我的理解是,用相機指向+ Z方向時,Z值較低的精靈將定位在其他人的前方。

通過改變播放器的Z值將改變它們的繪製順序,從而使其顯示在某些元素的後面或前面。爲了達到這個目的,當然你的水平應該建立在Z軸上的環境位置不同的情況下。

if (Input.GetKeyDown (KeyCode.UpArrow)) { 
     transform.Translate (new Vector3 (0, 0, 1)); 
} 
if (Input.GetKeyDown (KeyCode.DownArrow)) { 
     transform.Translate (new Vector3 (0, 0, -1)); 
}