心理サイエンス応用演習1-07

前回授業へのコメント
モーションが扱えるようになると,色々な研究に応用可能な気がしてきて,夢が広がりますよね!この授業で学んだことを卒論のテーマなどに役立ててくださると嬉しく思います。

キャラクターが回ってしまうなどの問題が上がっていましたが,アニメーションをインポートする際の設定で、向きが変わらないように設定できます。今回の動画を参考に、アニメーションの部分で「Root transfer rotation」の「bake into pose」をチェックしてみてください。他にも,Unityのアニメーションの仕組みは(メカニムというのですが)あちこちで解説されているので、調べてみるのも良いかもしれません。アニメーションに音声をつけるって言う話も出ていましたが,Unityには、アニメーションの特定のコマに音声ファイルを再生させる機能があります。これを使って打撃音をつけると,ゲームの面白さが全く変わります。我々は正確な動作を「音を頼りに」行っているのだと理解させられます。ゲーム作品には色々な心理学的発見がありますね!

主人公を歩かせる・走らせる

 今日は少しだけ実用的な課題として、3人称視点で主人公キャラを操作する方法を学びましょう。必要なファイルは全てMixamoからダウンロードできますが、探すのが面倒くさいと思うのでここのフォルダからダウンロードして使用してください。ダウンロードの方法はこちらの動画を参照してください。ここでは、

・AnmatorControllerにアニメーションを登録しスクリプトからコントロールする
・アニメーションを読み込む際の設定方法

などを学びます。

下記は、キャラクタのコントロールに使うaction2.csというファイル名のスクリプトです。「Input.GetKey(KeyCode.W)」などでキー入力を受け、「anim.SetFloat(“speed”, speed); 」などでAmimatorControllerにパラメーターを渡すという内容です。

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

public class action2 : MonoBehaviour
{
    Animator anim;
    float speed = 0f;
    float turn = 0f;
    public float rotSpeed=10f;

    // Start is called before the first frame update
    void Start()
    {
        anim = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        speed = 0f;
        turn = 0f;

        //前進
        if (Input.GetKey(KeyCode.W)) {
            if (!Input.GetKey(KeyCode.LeftShift))   //歩き
            {
                speed = 1f;
            }

            if (Input.GetKey(KeyCode.LeftShift))    //走る
            {
                speed = 2f;
            }
        }

        //後退
        if (Input.GetKey(KeyCode.S))
        {
            speed = -1f;
        }

        //右ターン
        if (Input.GetKey(KeyCode.D))
        {
            if (speed == 0f) {
                turn = 1f;
            }
            else
            {
                transform.Rotate(new Vector3(0f, Time.deltaTime * rotSpeed, 0f));   //移動中に右回転
            }
        }

        //左ターン
        if (Input.GetKey(KeyCode.A))
        {
            if (speed == 0f)
            {
                turn = -1f;
            }
            else
            {
                transform.Rotate(new Vector3(0f, Time.deltaTime * -rotSpeed, 0f));  //移動中に左回転
            }
        }

        anim.SetFloat("speed", speed);  //AnimatorControllerにspeedを渡す
        anim.SetFloat("turn", turn);    //AnimatorControllerにturnを渡す

        Debug.Log("Time:"+Time.realtimeSinceStartup+"/Speed:"+speed+"/Turn:"+turn);
    }
}


リアクションの記入
課題が終わった方は、下記アドレスから3日以内にリアクションを登録してください(リアクションは出欠記録を兼ねています)。
心理サイエンス応用演習1リアクション