小中高生向けプログラミングスクールTechChance!

【第二弾】Unityでキャラクターを歩かせよう!【実装方法解説 その2】

WRITER
 
この記事を書いている人 - WRITER -
プログラミング教室TechChance!の運営担当。 広島県広島市出身。広島大学総合科学部数理情報科学コース卒業。 大学2年生の時にプログラミングの魅力に引き込まれ、アプリ開発やゲーム開発、Webサイト制作など幅広い分野でのプログラミングの知識と技術をベースに、立ち上げ当時からテックチャンスの運営に携わる。 大学受験進学塾「広大研」の数学科講師としてのスキルも生かし、教材作成力と指導力を駆使して、小中高生のプログラミンングへの好奇心とモチベーションを刺激するべく日々奮闘している。

こんにちは!

テックチャンスブログ編集部の國貞です!

今回は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年半の広島県の高校生が、プログラミングコンテストで入賞出来た理由

機会を与えてあげられるのは、周りの大人だけ。

お待ちしています!

詳細はこちら80%超の参加者が入塾を決めるTechChance!の無料体験授業とは?

この記事を書いている人 - WRITER -
プログラミング教室TechChance!の運営担当。 広島県広島市出身。広島大学総合科学部数理情報科学コース卒業。 大学2年生の時にプログラミングの魅力に引き込まれ、アプリ開発やゲーム開発、Webサイト制作など幅広い分野でのプログラミングの知識と技術をベースに、立ち上げ当時からテックチャンスの運営に携わる。 大学受験進学塾「広大研」の数学科講師としてのスキルも生かし、教材作成力と指導力を駆使して、小中高生のプログラミンングへの好奇心とモチベーションを刺激するべく日々奮闘している。

- Comments -

Copyright© TechChance! 公式ブログ , 2022 All Rights Reserved.