示例#1
0
    public Terrain2D(GameObject gameObject, Terrain2DSettings settings)
    {
        if (gameObject == null || settings == null)
        {
            return;
        }

        terrainGO = gameObject;
        _settings = settings;

        int verticesCount  = settings.meshResolution * 2; // TOP + BOTTOM
        int trianglesCount = verticesCount * 3;

        _vertices  = new Vector3[verticesCount];
        _triangles = new int[trianglesCount];
        _uv        = new Vector2[verticesCount];
        _polygonColliderVerices = new Vector2[settings.meshResolution + 2]; // TOP LINE + 2 BOTTOM POINTS FOR COLLIDER LEFT AND RIGHT

        _mesh = new Mesh();

        if (_meshRenderer == null)
        {
            _meshRenderer = terrainGO.GetComponent <MeshRenderer>();
        }
        if (_meshRenderer == null)
        {
            _meshRenderer = terrainGO.AddComponent <MeshRenderer>();
        }
        _meshRenderer.sortingOrder = settings.renderOrder;
        _meshRenderer.material     = settings.material;

        if (_meshFilter == null)
        {
            _meshFilter = terrainGO.GetComponent <MeshFilter>();
        }
        if (_meshFilter == null)
        {
            _meshFilter = terrainGO.AddComponent <MeshFilter>();
        }
        _meshFilter.mesh = _mesh;

        if (_settings.isPhysics)    // FAST ITTERATION NOT GOOD FOR PRODUCTION
        {
            if (_polygonCollider == null)
            {
                _polygonCollider = terrainGO.GetComponent <PolygonCollider2D>();
            }
            if (_polygonCollider == null)
            {
                _polygonCollider = terrainGO.AddComponent <PolygonCollider2D>();
            }
        }

        UpdateTerrain();
    }
示例#2
0
    public void Init(int terrainsCount, Terrain2DSettings settings, Transform followTarget)
    {
        if (terrainsCount < 2)
        {
            terrainsCount = 2;
        }

        _terrains2D = new Terrain2D [terrainsCount];

        for (int i = 0; i < terrainsCount; i++)
        {
            GameObject terrain = new GameObject("Terrain");
            terrain.transform.parent = transform;

            _terrain2DLenght = settings.meshOffset * (settings.meshResolution - 1) * 2f;

            terrain.transform.localPosition = Vector3.right * _terrain2DLenght * i;

            _terrains2D[i] = new Terrain2D(terrain, settings);
        }

        _currenTerrain = 0;
        _followTarget  = followTarget;
    }