真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Unity3D中怎么動(dòng)態(tài)生成平面網(wǎng)格

這篇文章給大家介紹Unity3D中怎么動(dòng)態(tài)生成平面網(wǎng)格,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)長(zhǎng)期為上1000家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為嵊泗企業(yè)提供專(zhuān)業(yè)的網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,嵊泗網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

實(shí)現(xiàn)腳本如下:

//PlaneBuilder.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#region Editor

#if UNITY_EDITOR

using UnityEditor;

[CustomEditor(typeof(PlaneBuilder))]
public class PlaneBuilderEditor : Editor
{
 public override void OnInspectorGUI()
 {
 PlaneBuilder builder = (PlaneBuilder)target;

 EditorGUI.BeginChangeCheck();

 base.OnInspectorGUI();

 if (EditorGUI.EndChangeCheck())
 {
  builder.UpdateMesh();
 }

 if (GUILayout.Button("更新網(wǎng)格"))
 {
  builder.UpdateMesh();
 }
 }
}

#endif

#endregion Editor

[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class PlaneBuilder : MonoBehaviour
{
 [SerializeField]
 private MeshFilter _meshFilter;

 [SerializeField]
 private MeshRenderer _meshRenderer;

 /// 
 /// 單元格大小
 /// 
 [SerializeField]
 private Vector2 _cellSize = new Vector2(1, 1);

 /// 
 /// 網(wǎng)格大小
 /// 
 [SerializeField]
 private Vector2Int _gridSize = new Vector2Int(2, 2);

 public MeshRenderer MeshRenderer
 {
 get
 {
  return _meshRenderer;
 }
 }

 public MeshFilter MeshFilter
 {
 get
 {
  return _meshFilter;
 }
 }

 private void Awake()
 {
 _meshFilter = GetComponent();
 _meshRenderer = GetComponent();
 UpdateMesh();
 }

 public void UpdateMesh()
 {
 Mesh mesh = new Mesh();

 //計(jì)算Plane大小
 Vector2 size;
 size.x = _cellSize.x * _gridSize.x;
 size.y = _cellSize.y * _gridSize.y;

 //計(jì)算Plane一半大小
 Vector2 halfSize = size / 2;

 //計(jì)算頂點(diǎn)及UV
 List vertices = new List();
 List uvs = new List();

 Vector3 vertice = Vector3.zero;
 Vector2 uv = Vector3.zero;

 for (int y = 0; y < _gridSize.y + 1; y++)
 {
  vertice.z = y * _cellSize.y - halfSize.y;//計(jì)算頂點(diǎn)Y軸
  uv.y = y * _cellSize.y / size.y;//計(jì)算頂點(diǎn)紋理坐標(biāo)V

  for (int x = 0; x < _gridSize.x + 1; x++)
  {
  vertice.x = x * _cellSize.x - halfSize.x;//計(jì)算頂點(diǎn)X軸
  uv.x = x * _cellSize.x / size.x;//計(jì)算頂點(diǎn)紋理坐標(biāo)U

  vertices.Add(vertice);//添加到頂點(diǎn)數(shù)組
  uvs.Add(uv);//添加到紋理坐標(biāo)數(shù)組
  }
 }

 //頂點(diǎn)序列
 int a = 0;
 int b = 0;
 int c = 0;
 int d = 0;
 int startIndex = 0;
 int[] indexs = new int[_gridSize.x * _gridSize.y * 2 * 3];//頂點(diǎn)序列
 for (int y = 0; y < _gridSize.y; y++)
 {
  for (int x = 0; x < _gridSize.x; x++)
  {
  //四邊形四個(gè)頂點(diǎn)
  a = y * (_gridSize.x + 1) + x;//0
  b = (y + 1) * (_gridSize.x + 1) + x;//1
  c = b + 1;//2
  d = a + 1;//3

  //計(jì)算在數(shù)組中的起點(diǎn)序號(hào)
  startIndex = y * _gridSize.x * 2 * 3 + x * 2 * 3;

  //左上三角形
  indexs[startIndex] = a;//0
  indexs[startIndex + 1] = b;//1
  indexs[startIndex + 2] = c;//2

  //右下三角形
  indexs[startIndex + 3] = c;//2
  indexs[startIndex + 4] = d;//3
  indexs[startIndex + 5] = a;//0
  }
 }

 //
 mesh.SetVertices(vertices);//設(shè)置頂點(diǎn)
 mesh.SetUVs(0, uvs);//設(shè)置UV
 mesh.SetIndices(indexs, MeshTopology.Triangles, 0);//設(shè)置頂點(diǎn)序列
 mesh.RecalculateNormals();
 mesh.RecalculateBounds();
 mesh.RecalculateTangents();

 _meshFilter.mesh = mesh;
 }

#if UNITY_EDITOR

 private void OnValidate()
 {
 if (null == _meshFilter)
 {
  _meshFilter = GetComponent();
 }
 if (null == _meshRenderer)
 {
  _meshRenderer = GetComponent();
  if (null == _meshRenderer.sharedMaterial)
  {
  _meshRenderer.sharedMaterial = new Material(Shader.Find("Standard"));
  }
 }
 }

#endif
}

關(guān)于Unity3D中怎么動(dòng)態(tài)生成平面網(wǎng)格就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


網(wǎng)頁(yè)題目:Unity3D中怎么動(dòng)態(tài)生成平面網(wǎng)格
分享地址:http://weahome.cn/article/pcehce.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部