fork download
  1. // Encoding UCS-2 LE
  2.  
  3. using UnityEngine;
  4. using System.Collections;
  5.  
  6. /* DrawMeshとCombineMeshesのテスト
  7. meshListに複数のメッシュを指定して描画する
  8. isCombineをtrueにすると、その瞬間のmeshList、offsetList、rotationListからCombineMeshesを行い
  9. isCombineがtrueの間、Combineしたメッシュを描画する
  10. */
  11. [ExecuteInEditMode]
  12. public class DrawMeshScript : MonoBehaviour {
  13. public Material useMaterial; // メッシュを描画する時に使うマテリアル
  14. public Mesh[] meshList; // 描画するメッシュのリスト
  15. public Vector3[] offsetList; // メッシュ個別のオフセット
  16. public Vector3[] rotationList; // メッシュ個別の回転
  17. public bool isCombine = false; // trueにするとCombineしたメッシュを利用して描画する
  18. private bool isCreateCombine = false; // Combineしたメッシュを作ったかどうかのフラグ
  19. private Mesh combineMesh; // Combineしたメッシュの格納先
  20.  
  21. void Awake () {
  22. // メッシュの作成
  23. combineMesh = new Mesh();
  24. }
  25.  
  26. void Update () {
  27. // Combineしたメッシュの作成
  28. if (isCombine == true && isCreateCombine == false) {
  29. CombineInstance[] combine = new CombineInstance[meshList.Length];
  30. for (int i = 0; i < meshList.Length; ++i) {
  31. combine[i].mesh = meshList[i];
  32. combine[i].transform = CalcMeshMatrix(i, Matrix4x4.identity);
  33. }
  34. combineMesh.CombineMeshes(combine);
  35. }
  36. isCreateCombine = isCombine;
  37. }
  38. // 個々のメッシュのMatrixを計算
  39. Matrix4x4 CalcMeshMatrix (int index, Matrix4x4 parentMatrix) {
  40. return Matrix4x4.TRS(
  41. parentMatrix * (index < offsetList.Length ? offsetList[index] : Vector3.zero),
  42. index < rotationList.Length ? Quaternion.Euler(rotationList[index]) : Quaternion.identity,
  43. Vector3.one) * parentMatrix;
  44. }
  45. void LateUpdate () {
  46. // Combineしている場合の描画
  47. if (isCombine) {
  48. Graphics.DrawMesh(combineMesh, transform.localToWorldMatrix, useMaterial, 0);
  49. }
  50. // Combineしていない場合の描画
  51. else {
  52. if (meshList == null) { return; }
  53. Matrix4x4 thisMatrix = transform.localToWorldMatrix;
  54. for (int i = 0; i < meshList.Length; ++i) {
  55. Graphics.DrawMesh(meshList[i], CalcMeshMatrix(i, thisMatrix), useMaterial, 0);
  56. }
  57. }
  58. }
  59. }
  60.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty