void UpdateTerrainReference(Terrain terrain) { _terrain = terrain; MeshRenderer quad = GetComponent<MeshRenderer>(); if (_terrain==null) { if (!quad.enabled) quad.enabled = true; if (transform.parent!=null) { transform.SetParent(null); transform.localScale = new Vector3(100,100,1); transform.localRotation = Quaternion.Euler(0,0,0); } MeshCollider mc = GetComponent<MeshCollider>(); if (mc==null) gameObject.AddComponent<MeshCollider>(); } else { transform.SetParent(_terrain.transform, false); if (quad.enabled) { quad.enabled = false; } if (_terrain.GetComponent<TerrainTrigger>()==null) { _terrain.gameObject.AddComponent<TerrainTrigger>(); } MeshCollider mc = GetComponent<MeshCollider>(); if (mc!=null) DestroyImmediate(mc); lastCamPos = Camera.main.transform.position - Vector3.up; // just to force update on first frame FitToTerrain (); lastCamPos = Camera.main.transform.position - Vector3.up; // just to force update on first update as well if (CalculateTerrainRoughness ()) { refreshMesh = true; // Clear geometry if (cellLayer != null) { DestroyImmediate (cellLayer); } if (territoryLayer != null) { DestroyImmediate (territoryLayer); } } } }