この記事はUnity初心者でゲーム開発をしたいと思っていて、3D空間でキャラクターを動かせるようになりたい人のために書きました。
Unityではゲーム開発用にキャラクターを移動させる方法がいくつかあります。
何パターンかそれらの方法を試してみて、その中でも比較的初心者にもわかりやすいかなと思う方法でスクリプトを書いてみました。
私自身はゲーム開発関係の仕事をしているとはいえやっているのは3DCGイラストなどグラフィックパートのみでした。
プログラミングに関しては超ド素人です!
しかしそんな私でもマップ上で3Dキャラクターの操作方法を設定することができました。
そのためこの記事はこれからUnityをはじめて何か作りたい人への入門の踏み台くらいにはなれるかと思います。(笑)
紹介する内容は初歩レベルですが、キャラクター移動+攻撃アニメーションもするようになっているのでとりあえずゲームっぽい動きには見えるかと思います。
キャラクターが動いている画面を見せればご家族やご友人に「お、なんか動かせるようになってるじゃん!」のようにちょっとすごいと思わせることができるでしょう。
ぜひ最後まで読んでみてください。
それでは行ってみましょう!
Unity キャラクター移動で今回使うもの、設定など
実際にキャラクターの移動設定をする前に以下の物を確認しておきましょう。
②使用するアセット
③アニメーターコントローラー
④前回のスクリプト
①Unityのバージョンとバックエンドの設定
Unityは以下のバージョンを使っています。
またInput Manager, Input System Package の新旧両方をのシステムを使うのでActive Input Handling をBoth にしてあります。
Unity Version 2021.1.16
Active Input Handling ➡Both
Active Input HandlingはメニューバーのEdit➡Project Settingから設定できます。
②使用するアセット
使用するキャラクターはアセットストア(Asettostore)にあるRPG Hero PBR HP Polyart という3Dのキャラクターです。
歩く、攻撃するアニメーションなどRPGやアクションゲームでよく使いそうなモーションも作られていましたのでこれを使うことにしました。
Unityで3Dキャラクターを動かす練習としては適しているかと思いますので、興味のある人は使ってみましょう。
ただ、このキャラクターでなくとも同様のことができるので他に使いたいキャラクターがあればそれでも大丈夫です。
③アニメーターコントローラー
今回のスクリプトではアニメーターコントローラー(Animator Controller)を呼び出すようになっています。
この記事で使っているキャラクターのアニメーションコントローラーの設定方法はこちらの記事にまとめましたのでご覧ください。
Unityで3Dゲームを作ろう!と思ったときにどうすればいいのだろう? Unityでキャラクターを動かすときに、アニメーターコントローラー(Animator Controller) というものが[…]
④ベースになった前回のスクリプト
今回のスクリプトも前回作成したスクリプトをベースにしています。
こちらもアニメーションコントローラーの記事に記載してありますのでご覧になっていただければ幸いです。
移動中の方向転換の方法が今回の調整前の内容になっています。
Unityでキャラクターを移動させる方法
今回Unityでキャラクターを移動させるにあたって書いたスクリプトです。
前回の記事で使用したスクリプトをベースにしています。
ただ前回のスクリプトではキャラクターが向きを変える際に突然振り向くかのように見えていました。
そのため今回はそれよりもなめらかに歩行転換できるようにしてみました。
キャラクターを移動させるにあたって今回使用したスクリプト
今回のスクリプトです。
結果はこのようなアニメーションでキャラクターが移動します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerTest_02 : MonoBehaviour { private float x; private float z; public float Speed = 1.0f; float smooth = 10f; private Rigidbody rb; private Animator animator; void Start() { animator = GetComponent(); //アニメーションを取得する rb = GetComponent(); } void Update() { //x, z 平面での移動 x = Input.GetAxisRaw("Horizontal"); z = Input.GetAxisRaw("Vertical"); Vector3 target_dir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); rb.velocity = new Vector3(x, 0, z) * Speed; //歩く速度 animator.SetFloat("Walk", rb.velocity.magnitude); //歩くアニメーションに切り替える if (target_dir.magnitude > 0.1) { //キーを押し方向転換 Quaternion rotation = Quaternion.LookRotation(target_dir); transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.deltaTime * smooth); } if (Input.GetMouseButtonDown(0)) { animator.SetTrigger("Attack"); //マウスクリックで攻撃モーション } } }
移動
x = Input.GetAxisRaw(“Horizontal”);
z = Input.GetAxisRaw(“Vertical”);
Input.GetAxisRaw で x, z 方向(x, z 平面)の移動をコントロールします。
移動スピード
public float Speed = 1.0f;
… 移動スピードはInspector上でも設定できるので、プレーヤーが操作していて快適に思える速度を意識して調整しましょう。
また歩く、走るのアニメーションと速度があっていないと足が滑っているように見えるのでそれも合わせるようにしましょう。
方向転換
Quaternion.LookRotation
Quaternion.Lerp,
Smooth
Quaternion.Lerp, や Smoothなどが急な方向転換をしなくなるメソッド…らしいです。
上記を組み合わせてキャラクターを動画のように移動させるようにしてみました。
シンプルですがこれでカメラを見下ろし状態でキャラクターに追従させます。
敵も配置すれば海外ゲームのPath of Exile や Grim Dawn のような見下ろし方のハック&スラッシュゲームのような雰囲気になりそうです(笑)。
ここから要素を追加して後々の記事でよりアクションゲームらしくしていこうと思います。
キャラクタ―を動かせるようになったらAIで敵も設定してみましょう。
作成方法はこちらのNavMeshAgentに関する記事をご覧ください。
Unityでゲーム作ってるんだけどさ~、敵ってどうするとプレイヤーを追いかけてくるようになるの? 初心者だけどこれまでで キャラクター操作を設定できるようになった! となったら次はそのキャラクター[…]
Unityでキャラクターを自在に移動させよう
今回はUnityでキャラクターを動かす方法を紹介してみました。
私もまだまだ勉強中なので今回は簡単な方法解説になりましたがそれでもキャラクターが動かせるようになると、いかにも「ゲーム作ってる感」が出てモチベーションも上がるのではないでしょうか。
スクリプトやアニメーションの組み合わせで 出来ることが増えていきますのでもっといろいろな方法を試してみるといいでしょう。
また、マップなども作ってみると作りたいゲームのイメージがよりはっきりしてくることもあるでしょう。
ゲームマップ作りに興味のある方はぜひこちらもご覧ください。
UnityのTerrain機能で3Dゲームマップを作りたい UnityのTerrain機能を使いたいけどわかりづらい! 3Dゲームマップってどうやって作るの? このようなお悩みにお答えします[…]