[英]Unity3D Placing a cube in front VR player and move with player position and rotation
[英]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.