void CreateNextTerrain2D(Vector2 position) { GameObject newTerrain = TerrainEditor2D.InstantiateTerrain2D(position); //Creating default terrain TerrainEditor2D myTerrain = newTerrain.GetComponent <TerrainEditor2D>(); myTerrain.MainMaterial = Terrain2DMaterial; //Assign material to generating terrain myTerrain.CapMaterial = TerrainCapMaterial; //Assign material to terrain cap // --- Configure cap myTerrain.CapHeight = 0.75f; myTerrain.CapOffset = 0.1f; myTerrain.CreateCap = true; //Set TRUE if terrain cap will be generated if (_lastTerrain2D != null) { myTerrain.RandomizeTerrain(_lastTerrain2D.GetComponent <TerrainEditor2D>().GetLastVertexPoint()); //Connect new terrain with latter } else { myTerrain.RandomizeTerrain(); } myTerrain.UpdateCollider(); //Calculate Edge Collider path for terrain //DONE! New terrain generated! //If you need to change terrain parameters (like: myTerrain.Width = 100; myTerrain.Height = 25; myTerrain.TextureSize = 50; etc.) use myTerrain.CreateTerrain(); before myTerrain.RandomizeTerrain(); _lastTerrain2D = newTerrain; }
void OnEnable() { if (EditorPrefs.HasKey("2DTE_BrushSize")) { BrushSize = EditorPrefs.GetFloat("2DTE_BrushSize"); } if (EditorPrefs.HasKey("2DTE_BrushHardness")) { BrushHardness = EditorPrefs.GetFloat("2DTE_BrushHardness"); } if (EditorPrefs.HasKey("2DTE_ShowCapSettings")) { _showCapSettings = EditorPrefs.GetBool("2DTE_ShowCapSettings"); } if (EditorPrefs.HasKey("2DTE_ShowSettings")) { _showSettings = EditorPrefs.GetBool("2DTE_ShowSettings"); } if (EditorPrefs.HasKey("2DTE_ShowRndSettings")) { _showRndSettings = EditorPrefs.GetBool("2DTE_ShowRndSettings"); } _myTerrainEditor2D = target as TerrainEditor2D; _myTerrainEditor2D.GetComponent <EdgeCollider2D>().enabled = false; _myTerrainEditor2D.enabled = true; }
void GenerateNextTerrain2D(Vector2 terrainPos) { //Instantiate terrain template object GameObject newTerrainObj = (GameObject)Instantiate(TerrainTemplate, _nextTerrainPos, Quaternion.identity); TerrainEditor2D terrain = newTerrainObj.GetComponent <TerrainEditor2D>(); //Set random values before generating if needed terrain.RndAmplitude = Random.Range(3, 6); terrain.RndHillsCount = Random.Range(2, 8); terrain.RndHeight = Random.Range(20, 30); //Check if any terrain has been already generated if (_createdTerrains.Count > 0) { //Specify the left initial path point from last terrain to new terrain to obtain smooth transition //We don't want to update shared mesh of our terrain template terrain.RandomizeTerrain(_createdTerrains[_createdTerrains.Count - 1].GetComponent <TerrainEditor2D>().GetLastVertexPos(), false); } else { terrain.RandomizeTerrain(false); } //Add new terrain to the list _createdTerrains.Add(newTerrainObj); }
void OnEnable() { LoadInspector(); _myTerrainEditor2D = target as TerrainEditor2D; if (_myTerrainEditor2D == null) { return; } if (PrefabUtility.GetPrefabType(_myTerrainEditor2D.gameObject) == PrefabType.Prefab) { return; } if (_myTerrainEditor2D.InstanceId != _myTerrainEditor2D.GetInstanceID()) { CopySharedMesh(_myTerrainEditor2D.GetComponent <MeshFilter>()); if (_myTerrainEditor2D.CapObj != null) { CopySharedMesh(_myTerrainEditor2D.CapObj.GetComponent <MeshFilter>()); } if (_myTerrainEditor2D.Collider3DObj != null) { CopySharedMesh(_myTerrainEditor2D.Collider3DObj.GetComponent <MeshFilter>()); } _myTerrainEditor2D.SetInstanceId(_myTerrainEditor2D.GetInstanceID()); } _recordedVerts.Add(new RecordedTerrainVerts(_myTerrainEditor2D.GetVertsPos())); }
private void ModifyTerrain(TerrainEditor2D terrain, Vector3 location, float radius, float digFactor) { Vector3 hitLocation = location - terrain.transform.position; //Get array of points of terrain path in local space Vector3[] path = terrain.GetPath(Space.Self, true); float minX = hitLocation.x - radius; float maxX = hitLocation.x + radius; for (int i = 0; i < path.Length; i++) { if (path[i].x >= minX && path[i].x <= maxX) { float distX = Mathf.Abs(hitLocation.x - path[i].x); float ratioX = distX / radius; float height = Mathf.Sin((ratioX * 0.5f + 0.5f) * Mathf.PI) * radius; float deltaDig = Mathf.Max((hitLocation.y + height) - path[i].y, 0.0f); float deltaRemove = height * 2.0f - deltaDig; float deltaMove = 0.0f; if (NumberOfHitBeforeExplosion == 0) { deltaMove = -Mathf.Max(deltaRemove, 0.0f) * digFactor; } else { deltaMove = Mathf.Max(deltaRemove, 0.0f) * digFactor; } // clamp if already higher then what we were gonna add if(deltaMove > 0.0f) { if(path[i].y - hitLocation.y > deltaMove) { deltaMove = 0.0f; } else { deltaMove = Mathf.Min(deltaMove, Mathf.Max(path[i].y - hitLocation.y, 0.0f)); } } path[i].y += deltaMove; } } //Apply deformation terrain.ApplyDeform(path, true); }
void OnEnable() { LoadInspector(); _myTerrainEditor2D = target as TerrainEditor2D; if (_myTerrainEditor2D == null) return; if (PrefabUtility.GetPrefabType(_myTerrainEditor2D.gameObject) == PrefabType.Prefab) return; if (_myTerrainEditor2D.InstanceId != _myTerrainEditor2D.GetInstanceID()) { CopySharedMesh(_myTerrainEditor2D.GetComponent<MeshFilter>()); if (_myTerrainEditor2D.CapObj != null) CopySharedMesh(_myTerrainEditor2D.CapObj.GetComponent<MeshFilter>()); if (_myTerrainEditor2D.Collider3DObj != null) CopySharedMesh(_myTerrainEditor2D.Collider3DObj.GetComponent<MeshFilter>()); _myTerrainEditor2D.SetInstanceId(_myTerrainEditor2D.GetInstanceID()); } _recordedVerts.Add(new RecordedTerrainVerts(_myTerrainEditor2D.GetVertsPos())); }
public virtual void Start() { mGroundTerrain = GameObject.FindGameObjectWithTag("Terrain").GetComponent<TerrainEditor2D>(); }
void UpdateGroundPosition() { if (mGroundTerrain == null) { mGroundTerrain = GameObject.FindGameObjectWithTag("Terrain").GetComponent<TerrainEditor2D>(); } if (mGroundTerrain != null) { mGroundPosition = mGroundTerrain.GetGroundPosition(transform.position); } mUnderground = mGroundPosition.y > transform.position.y; if (mUnderground) { GetComponent<Rigidbody2D>().constraints |= RigidbodyConstraints2D.FreezePositionY; } else { GetComponent<Rigidbody2D>().constraints &= ~RigidbodyConstraints2D.FreezePositionY; } }
void OnEnable() { if (EditorPrefs.HasKey("2DTE_BrushSize")) BrushSize = EditorPrefs.GetFloat("2DTE_BrushSize"); if (EditorPrefs.HasKey("2DTE_BrushHardness")) BrushHardness = EditorPrefs.GetFloat("2DTE_BrushHardness"); if (EditorPrefs.HasKey("2DTE_ShowCapSettings")) _showCapSettings = EditorPrefs.GetBool("2DTE_ShowCapSettings"); if (EditorPrefs.HasKey("2DTE_ShowSettings")) _showSettings = EditorPrefs.GetBool("2DTE_ShowSettings"); if (EditorPrefs.HasKey("2DTE_ShowRndSettings")) _showRndSettings = EditorPrefs.GetBool("2DTE_ShowRndSettings"); _myTerrainEditor2D = target as TerrainEditor2D; _myTerrainEditor2D.GetComponent<EdgeCollider2D>().enabled = false; _myTerrainEditor2D.enabled = true; }
public void UnregisterBehaviour(TerrainEditor2D behaviour) { TerrainList.Remove(behaviour); }
public void RegisterBehaviour(TerrainEditor2D behaviour) { TerrainList.Add(behaviour); }
void OnEnable() { if (EditorPrefs.HasKey("2DTE_BrushSize")) BrushSize = float.Parse(EditorPrefs.GetString("2DTE_BrushSize")); if (EditorPrefs.HasKey("2DTE_BrushHardness")) BrushHardness = float.Parse(EditorPrefs.GetString("2DTE_BrushHardness")); if (EditorPrefs.HasKey("2DTE_BrushNoise")) BrushNoise = float.Parse(EditorPrefs.GetString("2DTE_BrushNoise")); if (EditorPrefs.HasKey("2DTE_ShowCapSettings")) _showCapSettings = EditorPrefs.GetBool("2DTE_ShowCapSettings"); if (EditorPrefs.HasKey("2DTE_ShowSettings")) _showSettings = EditorPrefs.GetBool("2DTE_ShowSettings"); if (EditorPrefs.HasKey("2DTE_ShowRndSettings")) _showRndSettings = EditorPrefs.GetBool("2DTE_ShowRndSettings"); _myTerrainEditor2D = target as TerrainEditor2D; if (_myTerrainEditor2D == null) return; _myTerrainEditor2D.GetComponent<PolygonCollider2D>().enabled = false; if (_myTerrainEditor2D.Create3DCollider) _myTerrainEditor2D.Collider3DObj.GetComponent<MeshCollider>().enabled = false; _myTerrainEditor2D.enabled = true; if (PrefabUtility.GetPrefabType(_myTerrainEditor2D.gameObject) != PrefabType.Prefab) Undo.RegisterCreatedObjectUndo(_myTerrainEditor2D.gameObject, "Terrain 2D"); _recordedTerrainVerts.Add(new RecordedTerrainVerts(_myTerrainEditor2D.GetVertsPos())); }