駆け出しプログラマーの成長日記

駆け出しプログラマーの成長日記をご覧いただきありがとうございます。何かお気づきの点、このような場合どうすればよいかなど質問やアドバイスお待ちしております。僕の成長のため、皆様の成長の手助けのためになればよいなと思います。

Unity3D キーボードの矢印キーで物体を操作する方法(Vecter3の利用方法)

Unity環境

エディターバージョン : 2021.3.16f1
コア : 3D
PC : Windows11


球体オブジェクトとステージの作成

・地面の作成

まず、Unityを上記記載の環境でUnityの立ち上げ。
Hierarchyビューから3DObjectのCubeを選択し、Stageを作成する。

Cubeの作成

作成したCubeの名前をStageに変更。
Stageを選択した状態でInspecterビューのTransformのScaleを(25, 1, 25)に変更しCubeのサイズを変更。

・ボールが落ちないように左右上下の壁を作る。

先ほどと同様にCubeの作成し、オブジェクト名を「Wall」する。
HierarchyビューでWallを選択したままInspecterビューのTransformのPosition(0,1,13), Scale(25, 3, 1)に変更する。

WallのTransformの変更

1辺の壁ができたので他の壁も同じように作成していく。
ここで、先ほど見たく、1からWallの作成をしていってもよいが、作成したWallをコピー&ペーストで作成した方が手間が省けるのでコピーする。
HierarchyビューでWallを選択の上、[Ctrl] + [D]でWallの複製が可能。
それぞれのWallにPosionとScaleを以下のように設定。

オブジェクト名 Position Location Scale
Wall(1) (0, 1, -13) (0, 0, 0) (25, 3, 1)
Wall(2) (13, 1, 0) (0, 90, 0) (27, 3, 1)
Wall(3) (-13, 1, 0) (0, 90, 0) (27, 3, 1)

これでステージの準備はできたので次はボールの作成と動的処理について説明する。

ボールの作成とボールの動的処理

・ボールの作成方法

Cubeの作成と同様にHierarchyビューから3DObjectのSphereを選択。
そうすると、球体オブジェクトができる。
SphereのPositionを(0, 2, 0)に設定。
ここでGameをプレイしてみる。
Sceneビューの「▶」ボタンを押すとゲームが開始される。

GameStart

ゲームをスタートすると球体が浮いて止まっているのがわかる。
この球体にはまだ重力が働いていないため、このような現象になる。
ここでこのSphereに重力を加える。
HierarchyビューでSphereを選択し、Inspecterビューの一番下に「Add Component」をクリックし、検索画面でRigidbodyと検索しRigidbodyを追加する。

Componentの追加(Rigidbody)

これでGameStartしてみるとしっかりと重力がかかり、落下してくるのを確認できると思う。
これではまだ操作はできないので次に操作するためのスクリプトについて説明していく。

・ボールの動的処理

ボールの動的処理はいくつか方法はあるが、今回はGravity(重力)を操作してボールを操ってみたいと思う。
Projectビューで右クリックし、Create -> C#Scriptを作成。

C#Scriptの作成

作成されたC#Scriptの名前を「GravityOperation」に変更し、Scriptファイルをエディターで開く。
プログラムを下記のように編集。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GravityOperation : MonoBehaviour
{
    //重力加速度定数
    const float Gravity = 9.81f;

    //重力の適用具合
    public float gravityScale = 1.0f;
    
    //毎フレーム読み出されるメソッド
    void Update()
    {
        Vector3 vector = new Vector3();
        //キーボードの矢印キーを取得。
        vector.x = Input.GetAxis("Horizontal");
        vector.z = Input.GetAxis("Vertical");
        vector.y = -1.0f;
        //gravityに値を反映
        //normalizedはvectorを正規化している。
        Physics.gravity = Gravity * vector.normalized * gravityScale;
    }
}

編集できたスクリプトを保存し、Unity画面に戻る。
作成したスクリプトをオブジェクトにアタッチ処理をする。
HierarchyビューでSphereを選択し、ProjectビューのGravityOperationスクリプトをInspecterにドラッグ&ドロップ。
InspecterにGravityOperation(Script)が設定されていればOK。
GameStartボタンを押して動作確認してみると、矢印キーでボールの動きを制御できているのがわかる。