【第二弾】Unityでキャラクターを歩かせよう!【実装方法解説 その2】
こんにちは!
テックチャンスブログ編集部の國貞です!
今回はUnityでどんなことができるのか知ってもらうために、Unityを使って実際にキャラクターを動かしてみます!
手元にUnityを動かせる環境があれば、ぜひ一緒にやってみてくださいね!
それでは初めていきましょう!
実際にキャラクターを操作していきますよ!
この記事のコンテンツ一覧
前回のプロジェクトを開こう!
前回の続きから解説するよ!
まだ前回の内容を見てない人は、以下のリンクからアクセスして見てみよう!
【第一弾】Unityでキャラクターを歩かせよう!【実装方法解説】
キャラクターの設定をする
前回作ったキャラクターが勝手に倒れてしまわないように少し設定するよ!
「ユニティちゃん」を選択して、「Inspector」の「Rigidbody」から、「Constraints」を見つけよう!
その中の「Freeze Rotation」で「X」と「Z」にチェックを入れておきます!
キャラクターを制御するプログラムを作成する
次に、キャラクターの操作を制御するためのプログラムを作成するよ!
「Project」の「+」から、「C# Script」をクリックします。
プログラムの名前を「PlayerController」としておきます。
ダブルクリックして開くと、次のようなエディタが表示されますね!
次のようにプログラムを記述します!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody _rigidbody;
private Transform _transform;
private Animator _animator;
private float _horizontal;
private float _vertical;
private Vector3 _velocity;
private float _speed = 2f;
void Start()
{
_rigidbody = GetComponent<Rigidbody>();
_transform = GetComponent<Transform>();
_animator = GetComponent<Animator>();
}
void FixedUpdate()
{
_horizontal = Input.GetAxis("Horizontal");
_vertical = Input.GetAxis("Vertical");
_velocity = new Vector3(_horizontal, _rigidbody.velocity.y, _vertical).normalized;
if (_velocity.magnitude > 0.1f) {
_animator.SetBool("walking", true);
} else {
_animator.SetBool("walking", false);
}
_rigidbody.velocity = _velocity * _speed;
}
}
プログラムを簡単に解説すると
まず初めに、キャラクターを動かすために使う「変数(情報を入れておく箱)」を準備しています。
private Rigidbody _rigidbody;
private Transform _transform;
private Animator _animator;
private float _horizontal;
private float _vertical;
private Vector3 _velocity;
private float _speed = 2f;
以下は、ゲームが始まった直後に実行されるプログラム部分です。
プログラムをアタッチしたキャラクターの「Rigidbody」と「Transform」、「Animator」の情報を直接読み込んでいます。
void Start() {
_rigidbody = GetComponent<Rigidbody>();
_transform = GetComponent<Transform>();
_animator = GetComponent<Animator>();
}
以下はゲームプレイ中にずっと動くプログラム部分です。
void FixedUpdate() {
_horizontal = Input.GetAxis("Horizontal");
_vertical = Input.GetAxis("Vertical");
_velocity = new Vector3(_horizontal, _rigidbody.velocity.y, _vertical).normalized;
if (_velocity.magnitude > 0.1f) {
_animator.SetBool("walking", true);
} else {
_animator.SetBool("walking", false);
}
_rigidbody.velocity = _velocity * _speed;
}
この状態でゲームをプレイすると、矢印キーで操作した方向にキャラクターが歩きながら移動することが分かりますね!
キャラクターの向きを制御しよう!
今のままだと、ずっと正面を向いたまま動くことになるね。
進む方向に向きを変えるように、プログラムを修正しよう!
「PlayerController」を開いて、次のようにプログラムを修正するよ!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody _rigidbody;
private Transform _transform;
private Animator _animator;
private float _horizontal;
private float _vertical;
private Vector3 _velocity;
private float _speed = 2f;
private Vector3 _aim; // 追記
private Quaternion _playerRotation; // 追記
void Start()
{
_rigidbody = GetComponent<Rigidbody>();
_transform = GetComponent<Transform>();
_animator = GetComponent<Animator>();
_playerRotation = _transform.rotation; // 追記
}
void FixedUpdate()
{
_horizontal = Input.GetAxis("Horizontal");
_vertical = Input.GetAxis("Vertical");
var _horizontalRotation = Quaternion.AngleAxis(Camera.main.transform.eulerAngles.y, Vector3.up); // 追記
_velocity = _horizontalRotation * new Vector3(_horizontal, _rigidbody.velocity.y, _vertical).normalized; // 修正
_aim = _horizontalRotation * new Vector3(_horizontal, 0, _vertical).normalized; // 追記
if(_aim.magnitude > 0.5f) { // 以下追記
_playerRotation = Quaternion.LookRotation(_aim, Vector3.up);
}
_transform.rotation = Quaternion.RotateTowards(_transform.rotation, _playerRotation, 600 * Time.deltaTime); // 追記
if (_velocity.magnitude > 0.1f) {
_animator.SetBool("walking", true);
} else {
_animator.SetBool("walking", false);
}
_rigidbody.velocity = _velocity * _speed;
}
}
これで矢印キーを押した方向に向きを変えながら進むようになったね!
まとめ
どうでしたか?
今回はプログラミングによってキャラクターを動かすところまでを解説してみました。
今後もゲーム開発に役立つ内容を発信していきますのでお楽しみに!
お気軽にテックチャンスの無料体験にお越しください!
我々が運営しているプログラミング教室テックチャンスでも、定期的に無料体験授業を実施しています。
テックチャンスでは、ビジュアル型プログラミングを用いたScratchコースや、マインクラフトの中で「タートル」というロボットにプログラミングをして動かすマインクラフトプログラミングコース、実際にアプリやゲームを本格的に作れるUnityアプリ・ゲーム開発コースなど、初心者から上級者まで幅広くプログラミングを学べるよう多数のコースを揃えています。
コンピュータを全然使ったことがない状態でも、お気軽に無料体験にお越しください。
実際、TechChance! で初めてプログラミングを学び、一年半でプログラミングコンテストで受賞した生徒も居ます。
詳細はこちら→学習歴たった1年半の広島県の高校生が、プログラミングコンテストで入賞出来た理由
機会を与えてあげられるのは、周りの大人だけ。
お待ちしています!