1. 程式人生 > >Unity3D動態對象優化代碼分享

Unity3D動態對象優化代碼分享

transform mil etc sts style like icop 基本 轉載

具體解釋請仔細看註釋裏已經講解的很細致了,這裏就不多廢話了


代碼如下:


using UnityEngine;

using System.Collections;

using System.Collections.Generic;

/// <summary>

/// 動態對象優化

/// </summary>

public class DynamicOptimization : MonoBehaviour {

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

}

/// <summary>

/// 動態對象優化

/// </summary>

/// <param name=”gameObject”>物體</param>

public void DynamicObjectOptimization(GameObject gameObject)

{

//SkinnedMeshRenderer:蒙皮網格渲染器—獲取所有帶有網格渲染器的物體(包含子物體)

SkinnedMeshRenderer[] smr = gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();

//CombineInstance:用來描繪網格合並的結構,結合網格有利於性能最優化

List<CombineInstance> listCom = new List<CombineInstance>();

//所有材質集合

List<Material> listMat = new List<Material>();

//物體的基本信息集合

List<Transform> listTrans = new List<Transform>();

for(int i=0;i<smr.Length;i++)

{

//獲取材質信息

listMat.AddRange(smr[i].materials);

//物體信息—bones:用於蒙皮網格的骨骼列表

listTrans.AddRange(smr[i].bones);

//獲取共享網格的信息

for(int k=0;k<smr[i].sharedMesh.subMeshCount;k++)

{

//合並實例

CombineInstance ci = new CombineInstance();

//獲取網格信息

ci.mesh = smr[i].sharedMesh;

//獲取網格的索引信息

ci.subMeshIndex = k;

//添加

listCom.Add(ci);

}

//刪除

Destroy(smr[i].gameObject);

}

//獲取物體上的渲染器信息

SkinnedMeshRenderer smRenderer = gameObject.GetComponent<SkinnedMeshRenderer>();

//判斷是否包含有網格渲染器,如果沒有則進行添加

if(smRenderer==null)

{

smRenderer = gameObject.AddComponent<SkinnedMeshRenderer>();

}

//蒙皮網格

smRenderer.sharedMesh = new Mesh();

//骨骼列表

smRenderer.bones = listTrans.ToArray();

//材質

smRenderer.materials = new Material[] { listMat[0] };

//獲取物體的信息

smRenderer.rootBone = gameObject.transform;

//合並網格(CombineMeshes)函數的第二個參數是設置是否將多個子網格合並成一張實際的網格。

//一個實際的網格只能施加一個材質,所以只有被合並的所有網格原來使用的就是同一個材質(即共享材質)時,

//將它們真正合並才能正確應用材質。否則應該將該參數置為false,表示不實際合並這些sub mesh,

//而是將它們作為被合並後Mesh對象的sub mesh。

smRenderer.sharedMesh.CombineMeshes(listCom.ToArray(), true);

}

}

以上就是本文所述的全部內容了,希望大家能夠喜歡

除聲明外,跑步客文章均為原創,轉載請以鏈接形式標明本文地址
Unity3D動態對象優化代碼分享

本文地址: http://www.paobuke.com/develop/c-develop/pbk23117.html






相關內容

技術分享圖片詳解C#中的System.Timers.Timer定時器的使用和定時自動清理內存應用技術分享圖片C#實現的Excel文件操作類實例技術分享圖片詳解c#讀取XML的實例代碼技術分享圖片C#中Dictionary的作用及用法講解
技術分享圖片C#靜態變量與實例變量實例分析技術分享圖片C# 數組實例介紹(圖文)技術分享圖片WinForm中DefWndProc、WndProc與IMessageFilter的區別技術分享圖片
C#中實現屏蔽Ctrl+C的方法

Unity3D動態對象優化代碼分享