2017-02-23 18 views
1

私は2DのスタイルでUnity 3Dを使ってゲームをしています。カメラは左から右のプレーヤーにしか追従しませんが、私は自分の環境が深みを感じるようにしたいと思います。これはトップダウンゲームではなく、2dマリオプラットフォームゲームのようなものです。私は、プレイヤーがオブジェクトの前を移動できるようにして、たとえば、ツリーが押されたときに、ツリーがその前に来るように、環境の中にさらに移動して戻るようにします。ユニファイドで前方に移動してオブジェクトの後ろに移動する方法

これまでの私の移動スクリプトです。

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

こんにちは、ありがとうございます。あなたが扱っている予想された現在の状況をそのまま説明してください。あなたが持っている問題を理解するのは難しいです。 –

答えて

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

解決策の1つは、プレイヤーの位置の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)); 
} 
関連する問題