U
タブ 01基礎11 レッスン — タップで開く
06 / 11 · 8 分
基礎

最初のシーン:平らな 3D の床

ここまでのプロジェクト

Assets/

Scenes/

Arena.unity
FloorMain CameraDirectional Light

Materials/

M_Floor

すでにあるものこのレッスンで追加

いよいよ作りましょう。このレッスンの目標は、平らな床が一枚あるだけの空の 3D シーンに、ライトを置き、カメラでそこを向けることです。

アニメーション図

Plane は Y = 0 にある平らな面です。ゲーム中の他のものはすべてその上に立ちます。

プロジェクトを作る

  1. 1

    Unity Hub → New project → テンプレートは Universal 3D(古いバージョンでは 3D (URP))。URP の方が見栄えがよく、モバイル側が求めるのもこっちです。

  2. 2

    名前は UnityClass にしてください。パスにはスペースやアクセント文字、ベトナム語の文字を入れないでください。

  3. 3

    開いたらまずシーンを保存:File▸Save As → Assets/Scenes/Arena.unity

床を追加する

  1. 1

    GameObject▸3D Object▸Plane と選ぶと、10×10 メートルの床が現れます。

  2. 2

    Hierarchy で Floor に名前を変えます(ゆっくりダブルクリック、または F2)。

  3. 3

    Inspector で Position を 0、0、0 に。Transform の見出しを右クリック → Reset を選べば一度で済みます。

  4. 4

    Scale を 3、1、3 にすると床は 30×30 メートル。Plane は Scale 1 の時点で 10 メートルあります。

マテリアルを当てよう

マテリアルとは、オブジェクトの色と表面のことです。mesh が形を与え、マテリアルが見た目を与えます。

  1. 1

    Project で Assets▸Create▸Material を選び、名前は M_Floor にします。

  2. 2

    Base Map の色を濃いグレー(#2B3040)に、Smoothness を 0.2 前後に設定します。

  3. 3

    Project ウィンドウから M_Floor を直接ドラッグし、Scene ビューの床に落とします。

オプション:グリッドの texture で移動が見えるように

  • 模様がない単色の床だと、キャラクターが動いているのか止まっているのか判断できません。

  • 市松模様の texture を何か置いて Tiling を 10、10 にすれば、床の動きが一目で分かります。

カメラとライト

  1. 1

    Main Camera を選んで Position を 0、12、-14、Rotation を 35、0、0 に。上から見下ろす斜めのアングルで、全体が見やすくなります。

  2. 2

    もっと速い方法:Scene ビューを好きな位置に動かしてからカメラを選び、GameObject▸Align With View(Ctrl/Cmd+Shift+F)。

  3. 3

    Directional Light は最初からシーンにあります。50、-30、0 あたりに回すと影がいい感じになります。

任意:コードで床を生成する

FloorBuilder.cs — attach to an empty GameObject
using UnityEngine;

public class FloorBuilder : MonoBehaviour
{
    public Material floorMaterial;
    public float sizeInMeters = 30f;

    void Start()
    {
        GameObject floor = GameObject.CreatePrimitive(PrimitiveType.Plane);
        floor.name = "Floor";
        floor.transform.position = Vector3.zero;
        floor.transform.localScale = Vector3.one * (sizeInMeters / 10f); // plane = 10 m
        if (floorMaterial != null)
            floor.GetComponent<Renderer>().material = floorMaterial;
    }
}