問題点
Animation Eventで下記のコードの下のほうにあるFootStep関数を呼び出しているのですが、Update関数の中ほどにあるAudioClipの変更が適応されません。
C#のコード
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Controller : MonoBehaviour 6{ 7 Animator animator; 8 9 [Header("GameObject")] 10 [SerializeField] GameObject mousePos; 11 [SerializeField] GameObject bullet; 12 [SerializeField] GameObject muzzlePoint; 13 [SerializeField] GameObject bulletParent; 14 private GameObject audioObj; 15 private Rigidbody rb; 16 private CharacterController cc; 17 18 [Space(1)] 19 20 [Header("Move")] 21 [SerializeField] float speed; 22 [SerializeField] float bulletSpeed; 23 [SerializeField] float gravity; 24 private float footStepInterval; 25 private float horizontral; 26 private float vertical; 27 28 [Header("Sounds")] 29 private AudioSource[] ad; 30 //--------------------------- 31 private AudioSource GunReady; 32 private bool playGunAudio = true; 33 34 private AudioSource Shot; 35 private bool playShotAudio = true; 36 37 private AudioSource Walk; 38 private bool playWalkAudio = true; 39 //--------------------------- 40 private AudioClip gunReadyClip; 41 private AudioClip shotClip; 42 private AudioClip walkClip; 43 44 private PlayerSounds playerSounds; 45 46 private RaycastHit groundHit; 47 48 private void Awake() 49 { 50 audioObj = transform.Find("AudioObj").gameObject; 51 52 rb = GetComponent<Rigidbody>(); 53 cc = GetComponent<CharacterController>(); 54 animator = GetComponent<Animator>(); 55 playerSounds = audioObj.GetComponent<PlayerSounds>(); 56 57 ad = audioObj.GetComponents<AudioSource>(); 58 GunReady = ad[0]; 59 gunReadyClip = playerSounds.gunReadyClip; 60 Shot = ad[1]; 61 shotClip = playerSounds.shotClip; 62 Walk = ad[2]; 63 64 } 65 66 void Update() 67 { 68 horizontral = Input.GetAxis("Horizontal"); 69 vertical = Input.GetAxis("Vertical"); 70 71 //動き 72 Vector3 move = new Vector3(horizontral, 0, vertical); 73 move.y -= gravity; 74 cc.Move(move * speed * Time.deltaTime); 75 animator.SetFloat("speed_Hor", horizontral); 76 animator.SetFloat("speed_Ver", vertical); 77 78 transform.LookAt(mousePos.transform); 79 80 if (Mathf.Abs(horizontral) > 0 || Mathf.Abs(vertical) > 0) 81 { 82 animator.SetBool("IsWalk", true); 83//------------------------------------------------ここ------------------------------------ 84 if(Physics.Raycast(transform.position, Vector3.down, out groundHit, 1.0f))//足音 85 { 86 string tag = groundHit.collider.tag; 87 switch (tag) 88 { 89 case null: walkClip = playerSounds.AspfaltWalkClip; 90 break; 91 92 case "Aspfalt": walkClip = playerSounds.AspfaltWalkClip; 93 break; 94 95 case "Wood": walkClip = playerSounds.WoodWalkClip; 96 break; 97 98 case "Soil": walkClip = playerSounds.SoilWalkClip; 99 break; 100 } 101 } 102 103 } 104 else 105 { 106 Walk.Stop(); 107 animator.SetBool("IsWalk", false); 108 } 109//------------------------------------------------------------------------------- 110 111 if (Input.GetMouseButton(1))//構え 112 { 113 animator.SetBool("IsReady", true); 114 115 if(playGunAudio)//一度のみ再生 116 { 117 GunReady.PlayOneShot(gunReadyClip); 118 playGunAudio = false; 119 } 120 if (Input.GetMouseButtonDown(0))//射撃 121 { 122 GameObject bullets = Instantiate<GameObject>(bullet, muzzlePoint.transform.position, Quaternion.identity); 123 bullets.GetComponent<Rigidbody>().velocity = muzzlePoint.transform.forward * bulletSpeed * Time.deltaTime; 124 bullets.transform.parent = bulletParent.transform; 125 126 if (playShotAudio) 127 { 128 Shot.PlayOneShot(shotClip); 129 playShotAudio = false; 130 } 131 } 132 } 133 else 134 { 135 animator.SetBool("IsReady", false); 136 playGunAudio = true; 137 } 138 } 139 140//-----------------------ここ----------------------- 141 public void FootStep() 142 { 143 Walk.PlayScheduled(20.5f); 144 } 145} 146//------------------------------------------------
詳細
使用Ver Unity 2019.4.17f1 Personal
C 言語は本件とどう関係するのでしょう。
すみません!ミスです!
Debug.Logを入れる等して、if文の中に入っているか、「transform.position」や「tag」はどうなっているか等を確認してください。
transform.positionが想定よりも上でRaycastが地面まで届いていない、transform.positionが想定よりも下で地面より下からRayを飛ばしているせいで当たらない等が考えられます。
transform.positionを見直してみた所、無事に足音が鳴るようになりました。
ですが、今度は同時に呼ばれているのか音が重なったようになってしまいました。
質問は編集できますので、タグ含めて調整してください。
修正しました
何の音が重なっているのですか? 歩き用のAudioSourceは1つなので、足音が複数鳴ることは基本的にありえないと思います。このコンポーネントとAudioSourceがシーン上にもう1セットある等も含めて確認してください。
結局、足跡の実装はあきらめることにしました。ありがとうございました。
回答1件
あなたの回答
tips
プレビュー