前回授業へのコメント
モーションが扱えるようになると,色々な研究に応用可能な気がしてきて,夢が広がりますよね!この授業で学んだことを卒論のテーマなどに役立ててくださると嬉しく思います。
キャラクターが回ってしまうなどの問題が上がっていましたが,アニメーションをインポートする際の設定で、向きが変わらないように設定できます。今回の動画を参考に、アニメーションの部分で「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リアクション