Unity에서 메시 정점 새로 고침

12595 단어 MeshUnity

부팅


한 유닛 1week이라는 장르의 여름 느낌 나는 게임을 만들려고 계획 없이 웨이브를 조사하며 실행에 옮겼지만 결국 여름 같은 게임 제작을 포기했다.그런데 너무 아쉬워서 여기까지 썼어요...

파의 계산 방법을 먼저 말하지 않다


어쨌든 메시의 정점을 자유롭게 이동하고 싶어요.
기본적으로, MeshMeshRenderer 그리기
Mesh를 유지하는 것은MeshFilter이 메시는 혼자 할 수 있어요.
Unity 물리 연산 게임의 제작 방법
하지만 살짝 적어봤는데 메시 생성이 그렇게 어렵지 않았어요.
MeshRenderer와 MeshFilter가 GameObject를 만들었어요.
MyMesh 과정을 inspector에 설정합니다.MyMesh등급은 다음과 같다.
MyMesh.cs

using System.Collections.Generic;
using UnityEngine;

public class MyMesh : MonoBehaviour
{
    [SerializeField]
    private MeshFilter meshFilter;

    private Mesh mesh;
    private List<Vector3> vertextList = new List<Vector3>();
    private List<Vector2> uvList = new List<Vector2>();
    private List<int> indexList = new List<int>();

    void Start ()
    {
        mesh = CreatePlaneMesh();
        meshFilter.mesh = mesh;
    }

    private Mesh CreatePlaneMesh()
    {
        var mesh = new Mesh();

        vertextList.Add(new Vector3(-1, -1, 0));//0番頂点
        vertextList.Add(new Vector3(1, -1, 0)); //1番頂点
        vertextList.Add(new Vector3(-1, 1, 0)); //2番頂点
        vertextList.Add(new Vector3(1, 1, 0));  //3番頂点

        uvList.Add(new Vector2(0, 0));
        uvList.Add(new Vector2(1, 0));
        uvList.Add(new Vector2(0, 1));
        uvList.Add(new Vector2(1, 1));

        indexList.AddRange(new []{0,2,1,1,2,3});//0-2-1の頂点で1三角形。 1-2-3の頂点で1三角形。

        mesh.SetVertices(vertextList);//meshに頂点群をセット
        mesh.SetUVs(0,uvList);//meshにテクスチャのuv座標をセット(今回は割愛)
        mesh.SetIndices(indexList.ToArray(),MeshTopology.Triangles, 0);//メッシュにどの頂点の順番で面を作るかセット
        return mesh;
    }
}

단지 이렇게 하면 유창한 판자를 나타낼 수 있다!잘 됐다!

그럼 우리 함께 정상에 도달합시다


그러니까
정점에 이르다
    void Update()
    {
        for (var i = 0; i < vertextList.Count; i++)
        {
            vertextList[i] += new Vector3(Random.Range(-0.1f,0.1f), Random.Range(-0.1f, 0.1f),0);//全頂点のxとyをランダムでちょっと動かす
        }
        mesh.SetVertices(vertextList);
    }
이렇게 되면

네!꼭대기부터 야옹야옹!SetUVsSetIndices는 변경이 없기 때문에 설치하지 않아도 된다.

그리고 파도


그럼, 파도를 만들기 위해.
정점이 전혀 부족하기 때문에 옆에서 100개 정도 준비한다.

그리고 같은 요령으로 상단의 정점만 움직이면 파도를 완성할 수 있다.
※ 이번에는 신 곡선을 시도했습니다.
    private int cnt = 0;
    public void Update()
    {
        for (var i = 0; i < vertexList.Count; i += 2)
        {
            var v = vertexList[i];
            v.y = Mathf.Sin((i + cnt) / 20.0f);
            vertexList[i] = v;
        }
        cnt++;
        mesh.SetVertices(vertexList);
    }

최후


이외에도 파도를 탈 수 있다.이렇게 되면 상세하게 놓을 필요가 있다BoxCollider2D.
그 일대
https://gamedevelopment.tutsplus.com/tutorials/creating-dynamic-2d-water-effects-in-unity--gamedev-14143
참고할 수도 있고요.(이 예에서 메시를 대량으로 만들었다. 필요할까...?)
아름다운 야옹야옹 생활을 즐기다

좋은 웹페이지 즐겨찾기