竜太のテクニカルメモ

物理やへっぽこなゲーム作りについて易しく解説するよ

ユニティちゃんライセンス

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

Unityで3Dのゲームを作る(6)

前回までで3DのUnityの使い方を一通り見てきたので,今回からは実際に3Dのシリンダーキャッチゲームの制作に入りたいと思います.

まず,3Dの新規ProjectをCylinderCatchGameなどとして作成します.次にHierarchyビューから[Create]→[3D Object]→[Plane]で床を作ります:

f:id:lagrangian:20210125064827p:plain
平面を設置
次にこのままでは床が狭いのでInspectorビューでPlaneのScaleをXとZを100にし,名前をFloorに変えます:
f:id:lagrangian:20210125065455p:plain
床が完成
これで床が完成しました.

次に回転するシリンダーをキャッチするパドルを作成します.Hierarchyビューで[Create]→[3D Object]→[Capsule]を選択します.カプセルができます:

f:id:lagrangian:20210125070312p:plain
Capsule生成
このCapusleの名前をPaddleに変更し,InspectorビューのTransformでRotationのZを-90,ScaleのX,Yをそれぞれ2にし,最後にpositionのYを1にします:
f:id:lagrangian:20210125071504p:plain
PaddleのInspectorのTransform
これでPaddleができました:
f:id:lagrangian:20210125071823p:plain
Paddle完成
このままではSceneビューの向きがよろしくないのでHierarchyビューでMain Cameraを選択した状態でAltキーを押しながらSceneビューをドラッグして向きを変えます.さらにカメラを上の方に移動しておいてCamera Previewを見ながら丁度良いカメラの位置を探します:
f:id:lagrangian:20210125074416p:plain
Cameraの位置を調節
正確に配置したい場合はInspectorビューで次のように入力してください:
f:id:lagrangian:20210125074813p:plain
Camera位置
これでMain Cameraの位置と向きが決まりました.

続いてPaddleを操作するスクリプトを作ります.ProjectビューのAssetsフォルダ内を右クリックして[Create]→[C# Script]を選択しできたファイルの名前をPaddleControllerにします.それからPaddleControllerをダブルクリックで開いてスクリプトに以下の内容を書き込んでください:

using UnityEngine;

public class PaddleController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.LeftArrow) && transform.position.x > -10f)
        {
            transform.Translate(-10 * Time.deltaTime, 0f, 0f,Space.World);
        }
        if (Input.GetKey(KeyCode.RightArrow) && transform.position.x < 10f)
        {
            transform.Translate(10 * Time.deltaTime, 0f, 0f, Space.World);
        }
        if (Input.GetKey(KeyCode.UpArrow) && transform.position.y < 10f)
        {
            transform.Translate(0f,10 * Time.deltaTime, 0f, Space.World);
        }
        if (Input.GetKey(KeyCode.DownArrow) && transform.position.y > 1f)
        {
            transform.Translate(0f, -10 * Time.deltaTime, 0f, Space.World);
        }
    }
}

このコードの意味はC#を勉強された方なら大体わかるとは思うのですが,ご説明すると例えばif文の最初のブロック

        if (Input.GetKey(KeyCode.LeftArrow) && transform.position.x > -10f)
        {
            transform.Translate(-10 * Time.deltaTime, 0f, 0f,Space.World);
        }

は左の矢印キーが押されx座標が-10より大きいなら世界座標軸Space.Worldでx軸負の方向に10×Time.deltaTime分移動せよという意味です.なおTime.deltaTimeは処理速度の速いパソコンでは小さな値で,処理速度の遅いパソコンでは大きな値になるので,結果的にどんな動作環境でも同じ移動速度になるようするために掛けています.以下同様です.

さて,ctrl + sでこのスクリプトを保存したら,UnityでこのスクリプトをHierarchyビューのPaddleまでドラッグしてドロップしてください.PaddleにPaddleControllerがアタッチされます.これでPaddleが操作できるようになりました.Playをクリックして4つの矢印キーを押すときちんと動きます:

www.youtube.com

今回は以上です.次回は回転するシリンダーを一定間隔で生成します.


ゲーム制作ランキング

にほんブログ村 ゲームブログ ゲーム制作へ
にほんブログ村