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(); }
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; }