こんにちは、めたらびです!

3Dアクションゲームの移動方法の実装、2回目です





前回はユニティちゃんをシーン上に配置するところまでやりました

今回はキー操作でユニティちゃんを動かしてみたいと思います

それでは、ゆる~くやっていきましょう☆




※私自身、ゲーム制作については全くの素人ですので、

ここ、こうした方が良いよ!とか、

ここ、間違ってるよ!というものがありましたら、

ぜひ、コメントにて教えてくださるとありがたいです。



画像が見にくい場合は、画像をクリックしてください

動かすための下準備をしよう!

前回、ユニティちゃんを配置しましたが、

ヒエラルキー画面を見てみると、

ユニティちゃんのオブジェクトだけ四角いマークが水色になっています

unity画像4

これは、このオブジェクトがPrefab状態だよ!ということを表しています

Prefabとは、同じオブジェクト間で状態を共有できる機能です

ユニティちゃんは1人しか動かさないので、Prefab状態を解除します



ヒエラルキー上のunitychanのところで右クリックし、

プレハブの中の展開をクリックします

スクリーンショット (348)

四角いマークが水色ではなくなり、普通のオブジェクトになりました

スクリーンショット (358)

ユニティちゃんを選択して、インスペクター画面を見ると、

Idle Changer , Face Update , Auto Blinkの3つのスクリプトが付いています

Idle ChangerとFace Updateは不要なので削除します

削除するには、黄色の丸で囲んだ点々をクリックし、

コンポーネントを削除を選択します

スクリーンショット (349)

スクリーンショット (350)

Auto Blinkはまばたきをするスクリプトです

不要な場合は、これも同様に削除してください





ユニティちゃんとカメラの位置を調節して、

ユニティちゃんがカメラに映るようにします



ユニティちゃんのTransformの中の

位置X , Y , Zを全て0にし、Y軸に180度回転させました

スクリーンショット (356)

カメラのTransformの中の位置Xを0 , Yを1 , Zを-2にしました

スクリーンショット (355)

これでゲーム画面にしたとき、

カメラにユニティちゃんの全身が映るようになりました

スクリーンショット (359)



Unityでオブジェクトを動かすとき、様々な方法がありますが、

ここでは、RigidBodyのvelocityを使って動かしてみたいと思います

RigidBodyをオブジェクトに付けると

そのオブジェクトに物理的な動きをさせることができます



velocityを使っての移動は速度を変化させて移動させるイメージです

ということで、ユニティちゃんにRigidBodyを付けます

RigidBodyを付けるにはユニティちゃんを選択し、

コンポーネントを追加を押します

スクリーンショット (360)

そして、Physicsの中のRigidbodyを選択します

スクリーンショット (361)

Rigidbodyを付けたら、その中のConstraintsを開いて、

回転を固定の場所全てにチェックをつけます

これでユニティちゃんが何かの影響で回転したり、倒れたりしなくなります

スクリーンショット (362)




今のユニティちゃんは宙に浮いている状態なので、地面を作りましょう

ヒエラルキーのプラスボタンを押して、

3Dオブジェクトの中のキューブを選択します

スクリーンショット (363)

Cubeの名前を変更します

右クリックして、名前を変更を押します

スクリーンショット (365)

分かりやすいように名前をStageに変更しました

スクリーンショット (366)

Stageの位置と大きさを変更します

StageのTrasformの値を画像のように変更しました

スクリーンショット (368)



今の状態でゲームを実行すると

ユニティちゃんが地面をすり抜けて下に落ちてしまいます

これはユニティちゃんに当たり判定がないためです





ユニティちゃんに当たり判定を付けましょう

Rigidbodyを付けた時と同じように

コンポーネントを追加を押し、

Physicsの中のCapsule Colliderを選択します

スクリーンショット (369)

緑の線がCapsule Colliderの範囲なのですが、位置がずれています

スクリーンショット (370)

ユニティちゃん全体を覆うように調整します

Capsule Colliderの中の中心、半径、高さを画像のように変更しました

スクリーンショット (372)

これでCapsule Colliderがユニティちゃん全体を覆うようになりました

スクリーンショット (371)

ゲームを実行してみます

ユニティちゃんが大地に降り立ちました!

(デフォルトで胸に手を当てたポーズが設定されていますが、後で変更します)

スクリーンショット (373)

スクリプトを書いてみよう!

下準備が完了したので、

次は動かすためのスクリプトを書きます

プロジェクトウィンドウの何もないところで右クリックし、

作成の中のC#スクリプトを選択します

スクリーンショット (374)

名前はunitychanControllerにしました

スクリーンショット (375)

ダブルクリックして開きます

開くとVisual Studioが起動し、以下のような画面になります

ここにコードを書いていきます

スクリーンショット (376)

以下のコードを入力してください
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class unitychanController : MonoBehaviour
{
    public float Speed;
    float x, z;
    Rigidbody rb;
    Vector3 moving;

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

    // Update is called once per frame
    void Update()
    {
        x = Input.GetAxis("Horizontal");
        z = Input.GetAxis("Vertical");

        moving = new Vector3(x, 0, z);

        moving = moving.normalized * Speed;
    }

    void FixedUpdate()
    {
        rb.velocity = moving;
    }
}
コードの意味を簡単に説明します
void Start()
{
    rb = GetComponent<Rigidbody>();
}
Start関数では、ユニティちゃんに付けた

Rigidbodyコンポーネントを取得し、velocityが使えるようにしています
x = Input.GetAxis("Horizontal");
z = Input.GetAxis("Vertical");
Input.GetAxisは矢印キーやWASDを押したときに、数字を返してくれるメゾットです

これによって、キー操作で動かせるようになります。

Horizontalが横、Verticalが縦です
moving = new Vector3(x, 0, z);

moving = moving.normalized * Speed;
normalizedを付けることによって、

斜めのベクトルを縦、横のベクトルと長さを同じにしています(対角線はちょっと長いため)

これで斜めに移動するときも、縦、横に移動するときと同じ距離にしています
void FixedUpdate()
{
    rb.velocity = moving;
}
RigidbodyをUpdate関数で使いたいときは

どんな端末でも呼ばれる回数が一定のFixedUpdateを使うのが良いらしいです

動かしてみよう!

コードが書けたら、忘れずに保存しましょう

右上のファイルから保存できます

スクリーンショット (384)

Unityに戻り、できたスクリプトをユニティちゃんにドラッグ&ドロップします

スクリーンショット (380)

ユニティちゃんを選択し、

unitychan Controller内の速度を1にします

この速度はユニティちゃんの動く速度になります。値を大きくすると速く動きます

スクリーンショット (382)

Rigidbody内の補間を補間にすると滑らかに動くようになります

スクリーンショット (383)

ゲームを実行してキー操作で動くか確認します

gif画像がうまく載せれなかったので、見せることができませんが、

キー操作でユニティちゃんが動きました!

操作が反転しているのが、気になる場合は、

ユニティちゃんを180度回転してください




ですが、歩いているようには見えないですよね…

次回はユニティちゃんを歩かせてみたいと思います!

お疲れ様でした、またね~


unitychangazou

この作品はユニティちゃんライセンス条項の元に提供されています