Ejemplo n.º 1
0
    private void Start()
    {
        _ground                  = GameObject.FindGameObjectWithTag("Ground").GetComponent <GroundComponent>();
        _groundMeshBuilder       = _ground.transform.Find("Ground_Sprite").GetComponent <ColliderToMesh>();
        _groundCollider          = _groundMeshBuilder.GetComponent <EllipseCollider2D>();
        _groundShadowMeshBuilder = _ground.transform.Find("GroundShadow_Sprite").GetComponent <ColliderToMesh>();
        _groundShadowCollider    = _groundShadowMeshBuilder.GetComponent <EllipseCollider2D>();

        DOTween.To(() => _ground.Size, x => _ground.Size = x, 0.1f, _ground.Duration);
    }
Ejemplo n.º 2
0
    public override void OnInspectorGUI()
    {
        if (GUILayout.Button("Update"))
        {
            ((ColliderToMesh)target).CreateMesh();
        }
        ColliderToMesh mesh = target as ColliderToMesh;

        mesh.Reverse        = EditorGUILayout.Toggle("Reverse:", mesh.Reverse);
        mesh.ReverseNormals = EditorGUILayout.Toggle("ReverseNormals:", mesh.ReverseNormals);
    }
Ejemplo n.º 3
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        ColliderToMesh myScript = (ColliderToMesh)target;

        if (GUILayout.Button("Collider To Mesh", GUILayout.ExpandWidth(false)))
        {
            myScript.colliderToMesh();
        }
    }
Ejemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        if (wobblerMultiplier == 0)
        {
            return;
        }

        if (Wobbling)
        {
            for (int i = 0; i < baseVertices.Length; ++i)
            {
                WobbleData wobble = data[i];
                wobble.angle += Time.deltaTime * wobble.angleVel;

                float globalMultiplier = wobblerMultiplier;
                currentVertices[i].x = baseVertices[i].x + Mathf.Cos(Mathf.Deg2Rad * wobble.angle) * wobble.radius * globalMultiplier;
                currentVertices[i].y = baseVertices[i].y + Mathf.Sin(Mathf.Deg2Rad * wobble.angle) * wobble.radius * globalMultiplier;
                data[i] = wobble;
            }

            ColliderToMesh.SetMeshVertices(mf.mesh, currentVertices);
        }
    }
Ejemplo n.º 5
0
    void DrawLake()
    {
        // Create lake object
        GameObject mygameobject = new GameObject();

        mygameobject.transform.position = center;
        mygameobject.layer = LayerMask.NameToLayer("Water");
        MeshRenderer renderer = mygameobject.AddComponent <MeshRenderer>() as MeshRenderer;

        // Put water effect on top of it

        /*
         * GameObject waterEffect = GameObject.Instantiate(Resources.Load("Water" + System.IO.Path.DirectorySeparatorChar.ToString() + "grad") as GameObject, Vector2.zero, Quaternion.identity) as GameObject;
         * waterEffect.transform.eulerAngles = new Vector3(0, 0, UnityEngine.Random.Range(0, 360));
         * float scale = radius / 10;
         * waterEffect.transform.localScale = new Vector3(scale,scale,scale);
         * waterEffect.transform.parent = mygameobject.transform;
         * waterEffect.transform.localPosition = Vector2.zero;
         */
        // Create collider
        float seed = UnityEngine.Random.Range(0, 1000);

        float waterBias              = 1;
        float size                   = .3f;
        float distanceWeight         = .05f;
        float distanceFromEdgeWeight = 5000;

        for (int x = 0; x < lakeGrid.GetLength(0); x++)
        {
            for (int y = 0; y < lakeGrid.GetLength(1); y++)
            {
                float xPos             = GetPosition(x, true);
                float yPos             = GetPosition(y, false);
                float height           = Mathf.PerlinNoise((xPos + seed) * size, (yPos + seed) * size) * .1f;
                float distance         = Mathf.Sqrt(Mathf.Pow(center.x - xPos, 2) + Mathf.Pow(center.y - yPos, 2));
                float relativeDistance = distance / radius;

                if (relativeDistance + height < waterBias)
                {
                    lakeGrid[x, y] = 1;
                }
            }
        }

        List <Vector2> points    = new List <Vector2>();
        Vector2        orginTemp = new Vector2(0, 0);

        for (int x = 0; x < lakeGrid.GetLength(0); x++)
        {
            for (int y = 0; y < lakeGrid.GetLength(1); y++)
            {
                if (lakeGrid[x, y] == 1)
                {
                    if (!IsSurroundedByLake(x, y))
                    {
                        float xPos = GetPosition(x, true) - center.x;
                        float yPos = GetPosition(y, false) - center.y;

                        orginTemp.x += xPos;
                        orginTemp.y += yPos;
                        points.Add(new Vector2(xPos, yPos));
                    }
                }
            }
        }
        Vector2 orgin = new Vector2(orginTemp.x / points.Count, orginTemp.y / points.Count);

        Debug.Log(orgin + "orgin");
        Debug.DrawLine(orgin, orgin + new Vector2(300, 300), Color.blue);
        Vector2[] sortedArray = points.ToArray();
        Array.Sort(sortedArray, new ClockwiseComparer(orgin));

        PolygonCollider2D collider = mygameobject.AddComponent <PolygonCollider2D>();

        collider.SetPath(0, sortedArray);

        // Create mesh
        mygameobject.AddComponent <MeshFilter>();
        ColliderToMesh colliderToMesh = mygameobject.AddComponent <ColliderToMesh>() as ColliderToMesh;

        colliderToMesh.init(collider, mygameobject, orgin);
        renderer.material = Resources.Load("WaterSurface") as Material;

        DrawLilyPads();
        DrawReeds();
    }