###前提・実現したいこと
敵キャラクターに、Unityのアニメーション中に【理想のタイミング】に【理想の位置】と【理想の角度】でエフェクトを発生させたい
###発生している問題・エラーメッセージ
いくら設定しても、対象のCharacterが動くとエフェクトの発生位置がどんどんおかしくなる
###該当のソースコード
C#で記述しています。
1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class EnemyBindVoice : StateMachineBehaviour{ 7 8 public float start, end; //期間の指定 9 10 GameObject Enemy; 11 public string EnemyName; 12 13 [Header("Efect")]//エフェクト関係 14 public GameObject Effect; //出すエフェクト 15 public Quaternion rote; //出すエフェクトの角度 16 public Vector3 posi; //出すエフェクトの位置 17 protected GameObject clone; 18 19 //音関係 20 public AudioClip AtkSe; 21 public AudioClip AtkVoiceSe; 22 23 //条件がマッチした時に何をするか? 24 override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) 25 { 26 Enemy = GameObject.Find(EnemyName); 27 } 28 //条件がマッチする期間の指定 29 override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) 30 { 31 32 float currentTime = stateInfo.length * (stateInfo.normalizedTime % 1f); 33 34 if (currentTime > start && currentTime < end) 35 { 36 //音を鳴らす 37 AudioSource.PlayClipAtPoint(AtkSe, animator.gameObject.transform.position); 38 AudioSource.PlayClipAtPoint(AtkVoiceSe, animator.gameObject.transform.position); 39 clone = Instantiate(Effect, (Enemy.transform.position) + posi, (Enemy.transform.rotation) * rote) as GameObject; 40 clone.transform.parent = Enemy.transform; 41 } 42 else 43 { 44 Destroy(clone); 45 } 46 47 } 48 49 //条件の終了 50 override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) 51 { 52 Destroy(clone); 53 } 54}
###試したこと
わからないなりに、ペアレント設定をやってみたり(自分の能力ではこれが出来ないからだと思う)、エフェクトをだす専用の空のゲームオブジェクトを置いたのですが、座標まで親子関係になっておらずキャラクターが移動すると、どんどんエフェクトが遠ざかっていきます。
###補足情報(言語/FW/ツール等のバージョンなど)
MonoBehaviourだと、public GameObject XXX を宣言して、空のゲームオブジェクトをヒエラルキービューからクリックドラッグで出現位置を調整していたのですが、StateMachineBehaviourだと、同じようにクリックドラッグすることができません。
やろうとしているのは、怒りを表すモーションのときに、怒りの咆哮と空気の振動のエフェクトを出そうとしています。
みなさまどうかよろしくお願いいたします。
もっとC#ができるようになりたいです。
回答2件
あなたの回答
tips
プレビュー