![](/img/trans.png)
[英]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.