繁体   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