質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.65%

Unity アニメーション 推移 SE

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 497
退会済みユーザー

退会済みユーザー

 前提・実現したいこと

Unityのアニメーションのトリガー起動時にSEを出す方法を教えてくれませんか?

 発生している問題・エラーメッセージ

エラーメッセージ

 該当のソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
// Inspector
[SerializeField] private float    m_WalkSpeed        = 2.0f;
[SerializeField] private float    m_RunSpeed        = 3.5f;
[SerializeField] private float    m_RotateSpeed    = 8.0f;
[SerializeField] private float    m_JumpForce        = 300.0f;
[SerializeField] private float    m_RunningStart    = 1.0f;

// member
private Rigidbody    m_RigidBody    = null;
private Animator    m_Animator    = null;
private float        m_MoveTime    = 0;
private float        m_MoveSpeed    = 0.0f;
private bool        m_IsGround    = true;

/*!

  •    ----------------------------------------------------------------------
  •    @brief    生成
    */
    private void Awake()
    {
    m_RigidBody = this.GetComponentInChildren<Rigidbody>();
    m_Animator = this.GetComponentInChildren<Animator>();
    m_MoveSpeed = m_WalkSpeed;
    }

/*!

  •    ----------------------------------------------------------------------
  •    @brief    初期化
    */
    //    private void Start()
    //    {
    //    }

/*!

  •    ----------------------------------------------------------------------
  •    @brief    更新
    */
    private void Update()
    {
    if( null == m_RigidBody ) return;
    if( null == m_Animator ) return;

// check ground
float rayDistance = 0.3f;
Vector3 rayOrigin = (this.transform.position + (Vector3.up * rayDistance * 0.5f));
bool ground = Physics.Raycast( rayOrigin, Vector3.down, rayDistance, LayerMask.GetMask( "Default" ) );
if( ground != m_IsGround )
{
m_IsGround = ground;

// landing
if( m_IsGround )
{
m_Animator.Play( "landing" );
}
}

// input
Vector3 vel = m_RigidBody.velocity;
float h = Input.GetAxis( "Horizontal" );
float v = Input.GetAxis( "Vertical" );
bool isMove = ((0 != h) || (0 != v));

m_MoveTime = isMove? (m_MoveTime + Time.deltaTime) : 0;
bool isRun = (m_RunningStart <= m_MoveTime);

// move speed (walk / run)
float moveSpeed = isRun? m_RunSpeed : m_WalkSpeed;
m_MoveSpeed = isMove? Mathf.Lerp( m_MoveSpeed, moveSpeed, (8.0f * Time.deltaTime) ) : m_WalkSpeed;
//        m_MoveSpeed = moveSpeed;

Vector3 inputDir = new Vector3( h, 0, v );
if( 1.0f < inputDir.magnitude ) inputDir.Normalize();

if( 0 != h ) vel.x = (inputDir.x * m_MoveSpeed);
if( 0 != v ) vel.z = (inputDir.z * m_MoveSpeed);

m_RigidBody.velocity = vel;

if( isMove )
{
// rotation
float t = (m_RotateSpeed * Time.deltaTime);
Vector3 forward = Vector3.Slerp( this.transform.forward, inputDir, t );
this.transform.rotation = Quaternion.LookRotation( forward );
}

m_Animator.SetBool( "isMove", isMove );
m_Animator.SetBool( "isRun", isRun );

// jump
if( Input.GetButtonDown( "Jump" ) && m_IsGround        )
{
m_Animator.Play( "jump" );
m_RigidBody.AddForce( Vector3.up * m_JumpForce );
}

// quit
if( Input.GetKeyDown( KeyCode.Escape ) ) Application.Quit();
}

}

 試したこと

 補足情報(FW/ツールのバージョンなど)

Unity2018.2.15f1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sakura_hana

    2018/11/15 13:25

    質問者さんの言う「トリガー起動時」とは何ですか?

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/11/15 13:36

    例えばアニメーションのRunからJumpに変化したときのことを(トリガー起動)というと思います・・・・    言い方が分からなかったもので・・

    キャンセル

  • MMashiro

    2018/11/15 16:30

    トリガー と 起動時 は微妙に似た意味のニュアンスなのであえてトリガーという言葉を使うのであれば「RunからJumpの遷移をトリガーに〇〇したいのですが」とかだとわかりやすいかもしれません

    キャンセル

回答 1

0

「RunからJumpに変化したとき」なら
m_Animator.Play( "jump" );の後ろにでもSE再生のコードを入れればいいかと思います。
AudioSource.Play - Unity スクリプトリファレンス


Unityでは「トリガー起動」という言葉はありません。
下手な言い換えは誤解を生むので「アニメーションのRunからJumpに変化したとき」とやりたいことをそのまま書いてもらった方が分かりやすいです。
次回質問する時は質問するときのヒント|teratail(テラテイル)を見てもらえると助かります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.65%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる