island demo中的combinechildren脚本
来源:互联网 发布:开票软件赋码 编辑:程序博客网 时间:2024/05/02 06:13
using UnityEngine;using System.Collections;/*Attach this script as a parent to some game objects. The script will then combine the meshes at startup.This is useful as a performance optimization since it is faster to render one big mesh than many small meshes. See the docs on graphics performance optimization for more info.Different materials will cause multiple meshes to be created, thus it is useful to share as many textures/material as you can.*/[AddComponentMenu("Mesh/Combine Children")]public class CombineChildren : MonoBehaviour { /// Usually rendering with triangle strips is faster. /// However when combining objects with very low triangle counts, it can be faster to use triangles. /// Best is to try out which value is faster in practice. public bool generateTriangleStrips = true; /// This option has a far longer preprocessing time at startup but leads to better runtime performance. void Start () { Component[] filters = GetComponentsInChildren(typeof(MeshFilter)); Matrix4x4 myTransform = transform.worldToLocalMatrix; Hashtable materialToMesh= new Hashtable(); for (int i=0;i<filters.Length;i++) { MeshFilter filter = (MeshFilter)filters[i]; Renderer curRenderer = filters[i].renderer; MeshCombineUtility.MeshInstance instance = new MeshCombineUtility.MeshInstance (); instance.mesh = filter.sharedMesh; if (curRenderer != null && curRenderer.enabled && instance.mesh != null) { instance.transform = myTransform * filter.transform.localToWorldMatrix; Material[] materials = curRenderer.sharedMaterials; for (int m=0;m<materials.Length;m++) { instance.subMeshIndex = System.Math.Min(m, instance.mesh.subMeshCount - 1); ArrayList objects = (ArrayList)materialToMesh[materials[m]]; if (objects != null) { objects.Add(instance); } else { objects = new ArrayList (); objects.Add(instance); materialToMesh.Add(materials[m], objects); } } curRenderer.enabled = false; } } foreach (DictionaryEntry de in materialToMesh) { ArrayList elements = (ArrayList)de.Value; MeshCombineUtility.MeshInstance[] instances = (MeshCombineUtility.MeshInstance[])elements.ToArray(typeof(MeshCombineUtility.MeshInstance)); // We have a maximum of one material, so just attach the mesh to our own game object if (materialToMesh.Count == 1) { // Make sure we have a mesh filter & renderer if (GetComponent(typeof(MeshFilter)) == null) gameObject.AddComponent(typeof(MeshFilter)); if (!GetComponent("MeshRenderer")) gameObject.AddComponent("MeshRenderer"); MeshFilter filter = (MeshFilter)GetComponent(typeof(MeshFilter)); filter.mesh = MeshCombineUtility.Combine(instances, generateTriangleStrips); renderer.material = (Material)de.Key; renderer.enabled = true; } // We have multiple materials to take care of, build one mesh / gameobject for each material // and parent it to this object else { GameObject go = new GameObject("Combined mesh"); go.transform.parent = transform; go.transform.localScale = Vector3.one; go.transform.localRotation = Quaternion.identity; go.transform.localPosition = Vector3.zero; go.AddComponent(typeof(MeshFilter)); go.AddComponent("MeshRenderer"); go.renderer.material = (Material)de.Key; MeshFilter filter = (MeshFilter)go.GetComponent(typeof(MeshFilter)); filter.mesh = MeshCombineUtility.Combine(instances, generateTriangleStrips); } } } }
0 0
- island demo中的combinechildren脚本
- Delta3d 2.8 Island Demo
- AutoplayMediaStudio脚本demo
- webdriver脚本demo
- Shell脚本Demo
- ios 脚本打包demo
- lua脚本demo实例
- shell脚本基础demo
- vbs脚本demo
- vbs脚本学习整人Demo
- jasperreport中的demo学习
- jasperreport中的demo学习
- Tornado中的Demo Blog
- JQuery中的轮播图demo
- Android 中的BaseActivity demo
- Unity3D如何通过CombineChildren和MeshCombineUtility优化场景
- 一个android monkey自动化脚本demo
- Shell脚本循环和运算的Demo
- Circular Area 两圆相交面积(模板)
- java的高级特性
- linux下查看某一程序具体用到了那些库
- UIKit--UILabel详解
- oracle存储过程例子
- island demo中的combinechildren脚本
- 伪类和为元素
- ImportError: No module named feedparser
- 支付宝充退、充退转账
- 中断服务子程序
- Python Show-Me-the-Code 第 0002 题 MySQL操作
- UIKit---UIButton详解
- 重定位PC相对引用(PC-relative reference relocation)
- SMARTFORMS(小计、合计)