簡體   English   中英

如何允許播放器在Unity中前后移動對象

[英]How To Allow Player To Move In Front And Behind Objects In Unity

我正在以2D風格使用Unity 3D制作游戲。 攝像機僅從左到右跟隨玩家,但我希望我的環境具有深度感。 這不是自上而下的游戲,更像是2d mario平台游戲。 我希望玩家能夠移動到物體的前面,例如當他們按下時樹會在它們后面,如果他們按下以進一步移回到環境中,那么樹現在就在它們前面。

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

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

聽起來您需要更改子畫面的排序順序,以便當播放器在樹上時,播放器子畫面在其后排序。 嘗試在播放器和所有樹上向組件的update()添加類似的內容。

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

如果在導入精靈時將精靈的樞軸設置為它們接觸地面的位置,則此方法效果最佳。

解決方案實際上取決於您的水平。

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

如果一切都在單獨的層上,那么挑戰就來了。 層是指您提供精靈渲染器的排序層。 這可能會產生一些有趣的結果,因為僅僅修改排序順序是不夠的,您還必須更改圖層。 如果我沒有記錯的話,您將在項目設置中將其更改為它上面的一層。 如果所有內容都在同一層上,那么更改排序順序將綽綽有余。

別忘了考慮碰撞檢測的潛在問題,因為更改游戲對象的車道將意味着您可能必須將其物理層更改為,因此對撞機不會撞到前面的任何層。 https://docs.unity3d.com/Manual/LayerBasedCollision.html

希望這會引導您走向正確的方向。

一種解決方案是簡單地更改播放器位置的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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM