Пример #1
0
    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;
    }
Пример #3
0
    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);
    }
Пример #4
0
    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()));
    }
Пример #5
0
    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()));
    }
Пример #7
0
 public virtual void Start()
 {
     mGroundTerrain = GameObject.FindGameObjectWithTag("Terrain").GetComponent<TerrainEditor2D>();
 }
Пример #8
0
    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;
        }
    }
Пример #9
0
    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);
 }
Пример #12
0
    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()));
    }