From 22891bf59032ba88262824255a706d652031384b Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 10 Mar 2022 14:07:40 +0800 Subject: * move folder --- Assets/Scripts/Effects/ShurikenBakedMeshEmitter.cs | 124 --------------------- 1 file changed, 124 deletions(-) delete mode 100644 Assets/Scripts/Effects/ShurikenBakedMeshEmitter.cs (limited to 'Assets/Scripts/Effects/ShurikenBakedMeshEmitter.cs') diff --git a/Assets/Scripts/Effects/ShurikenBakedMeshEmitter.cs b/Assets/Scripts/Effects/ShurikenBakedMeshEmitter.cs deleted file mode 100644 index 65a36d9d..00000000 --- a/Assets/Scripts/Effects/ShurikenBakedMeshEmitter.cs +++ /dev/null @@ -1,124 +0,0 @@ -using UnityEngine; -using System.Collections; - -public class ShurikenBakedMeshEmitter : MonoBehaviour -{ - [Tooltip("パーティクルで使用したいメッシュ")] - public SkinnedMeshRenderer skin; - //使用するメッシュの現在の形を保存 - Mesh baked; - //再生に使用するパーティクルシステム - ParticleSystem particle; - ParticleSystemRenderer render; - [Tooltip("パーティクルの再生/停止")] - public bool emit; - [Tooltip("パーティクルを放出する間隔(秒)")] - public float coolDown = 0.5f; - //現在の待機時間 - float interval = 0; - - // Use this for initialization - void Start() - { - //元となるメッシュが指定されていなければ本スクリプトを停止 - if (!skin) - this.enabled = false; - //使用するパーティクルシステムへのアクセス - particle = GetComponent(); - render = GetComponent(); - } - - // Update is called once per frame - void Update() - { - //emitが[true]なら... - if (emit) - { - //待機時間の計算 - interval -= Time.deltaTime; - //必要分の待機時間が経過したなら... - if (interval < 0) - { - //シーンに新たなGameObjectを再生(本GameObjectのコピー) - GameObject newEmitter = Instantiate(gameObject, transform.position, transform.rotation) as GameObject; - //再生したGameObjectにEmitMesh()を指示 - newEmitter.GetComponent().EmitMesh(); - //待機時間のリセット - interval = coolDown; - } - //emitが[false]なら... - } - else - { - //待機時間のリセット - interval = coolDown; - } - } - - //外部からのアクセスでパーティクルの再生をさせる - public void EmitMesh() - { - //Update ()させない為に[false] - emit = false; - //メッシュの型をリセット - baked = new Mesh(); - //使用するメッシュの現在の形を保存 - skin.BakeMesh(baked); - - //自身のパーティクルシステムへのアクセス - particle = GetComponent(); - render = GetComponent(); - - Mesh mainMesh = baked; - Mesh meshToCopy = new Mesh(); - meshToCopy.vertices = mainMesh.vertices; - meshToCopy.triangles = mainMesh.triangles; - meshToCopy.normals = mainMesh.normals; - meshToCopy.uv = mainMesh.uv; - int amount = 8; - Matrix4x4[] matrix = new Matrix4x4[amount]; - for (int i = 0; i < amount; i++) - { - matrix[i].SetTRS(new Vector3(i * 10, 0, 0), Quaternion.Euler(new Vector3(Random.Range(-5, 5), Random.Range(0, 360), Random.Range(-5, 5))), Vector3.one); - } - - CombineInstance[] ci = new CombineInstance[amount]; - for (int i = 0; i < amount; i++) - { - ci[i] = new CombineInstance(); - ci[i].mesh = meshToCopy; - ci[i].transform = matrix[i]; - } - - Mesh batchedMesh = gameObject.AddComponent().mesh = new Mesh(); - batchedMesh.CombineMeshes(ci); - - int[] mainSubTri; - int[] newSubTri; - batchedMesh.subMeshCount = mainMesh.subMeshCount; - - for (int i = 0; i < mainMesh.subMeshCount; i++) - { - mainSubTri = mainMesh.GetTriangles(i); - - newSubTri = new int[mainSubTri.Length * amount]; - - for (int ii = 0; ii < amount; ii++) - { - for (int iii = 0; iii < mainSubTri.Length; iii++) - { - newSubTri[(ii * mainSubTri.Length) + iii] = mainSubTri[iii] + (ii * mainMesh.vertexCount); - } - } - batchedMesh.SetTriangles(newSubTri, i); - } - - - //パーティクルシステムで使用するメッシュを指定 - render.mesh = meshToCopy; - //パーティクルの再生 - particle.Play(); - //本GameObjectの破棄の指示 - Destroy(gameObject, particle.duration); - } -} \ No newline at end of file -- cgit v1.1-26-g67d0