如何让玩家在Unity中移动前面和后面的对象

问题描述:

我正在制作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。请确保详细解释您正在处理的预期和现状;很难理解你遇到的问题。 –

该解决方案真的取决于你如何做你的水平。

如果一切都在同一条线上,可以这么说,那么修改精灵渲染器的排序顺序可以为您提供解决方案。 检查精灵渲染器文档: https://docs.unity3d.com/Manual/class-SpriteRenderer.html

如果一切都在单独的图层上,现在就面临挑战。我的意思是你提供精灵渲染器的排序层。这可以产生一些有趣的结果,因为仅仅修改排序顺序是不够的,你也必须改变图层。如果我没有弄错,你会在你的项目设置中将图层更改为上面的图层。如果一切都在同一图层上,那么更改排序顺序就足够了。

不要忘记考虑碰撞检测的潜在问题,因为改变游戏对象的通道意味着你可能不得不将其物理层改为物理层,所以碰撞者不会碰到层上的任何东西前面。 https://docs.unity3d.com/Manual/LayerBasedCollision.html

希望这会使您朝着正确的方向前进。

听起来像是你需要更改排序顺序为你的精灵,这样当玩家是一棵树上面,玩家的精灵种类后面。尝试在播放器上的组件的update()和所有树上添加这样的内容。

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

如果您在导入精灵时将该精灵的透视点设置为接触地面的位置,此方法效果最佳。

+0

或者您可以在编辑器中设置订单 – Thalthanas

一种解决方案是简单地改变播放器位置的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)); 
}