如何解决 Unity 2D 中的分层问题?

问题描述 投票:0回答:1

我有一个函数,可以在等距视角中创建由 n*n 块组成的地面,n 是一侧的长度,就像下面的示例所示。所有的创作都是从头开始,我的意思是,我的场景几乎都是空的。

问题是,当我引入 1 位数字的长度(从 1 到 9)时,脚本运行良好。但是当我尝试向该数字添加另一个数字,使长度> 9时,它使最后一个块看起来像这样。我认为它是分层的 1 层后面,我不明白为什么。

只有当我在游戏运行时尝试改变长度时才会出现这个问题。当我在跑步前将长度更改为> 9时,效果很好。我认为这是一个分层问题,但我不知道。我毕竟是初学者。 :)

无论如何,这是我的脚本:

using System.Collections;
using System.Collections.Generic;
using System.Linq.Expressions;
using UnityEngine;

public class CreateField : MonoBehaviour
{
    [SerializeField] Camera _cam;
    [SerializeField] GameObject _sprite;
    [SerializeField] GameObject _groundContainer;
    [SerializeField] int lungime;
    int lastLungime;

    float _height, _width;

    private void Start()
    {
        if(lungime<1) lungime = 1;
        lastLungime = lungime;
        _width = lungime;
        setCameraResolution();
        createField(new Vector3(0, _height, 0));
    }

    void setCameraResolution()
    {
        _height = _width / _cam.aspect;
        _cam.orthographicSize = _height;
    }

    void deleteField()
    {
        for(int i = 0; i < _groundContainer.transform.childCount; i++)
        {
            Destroy(_groundContainer.transform.GetChild(i).gameObject);
        }
    }

    void createField(Vector3 offset)
    {
        for(int i=1; i<= lungime; i++)
        {
            for (int j = 1; j <= lungime; j++)
            {
                Vector3 pos = new Vector3((i-j), -(i + j) / 2f, 0) + offset;
                GameObject newSprite = Instantiate(_sprite, pos, _sprite.transform.rotation);
                newSprite.transform.parent = _groundContainer.transform;
                newSprite.name = "ground("+i+","+j+")";
            }
        }
    }
    private void Update()
    {
        if (lastLungime != lungime)
        {
            deleteField();
            _width = lungime;
            setCameraResolution();
            createField(new Vector3(0, _height, 0));
            lastLungime = lungime;
        }
    }
}

话虽如此,问题很可能出在 Update() 中,但我没有看到它。

更多图片供参考:

c# unity-game-engine layer isometric
1个回答
0
投票

我尝试了不同的方法,但没有成功。 就在那时我教使用position.z。 我乘以长度*长度,然后将其与相机的 pos.z 相加,然后,对于每个块,我这样做:

newSprite.transform.position += new Vector3(0, 0, diff--);

这样,第一个放置的块将是 cam.pos.z-lungime*lungime,然后我们减少,直到放置的最后一个块将是 cam.pos.z。

© www.soinside.com 2019 - 2024. All rights reserved.