Unity でGame 制作 #1

タイトル通りですな(=゚ω゚)

高度なことは無理なので、できる範囲でコツコツと、制作過程自体を楽しもうという心構えで。 ※完成させるとは言わないあたりが…^^;

Unityのインストールが完了していて、C#はそれなりに使えることが前提です。

最初はWSADでプレイヤーキャラクタを移動できるようにしてみます。

まずは空のプロジェクトを作成。

空のプロジェクトを作成

Trrainで地面を作成。

Trrainで地面を作成

Trrainのサイズを設定。なんとなく2の乗数にしてしまうのはプログラマーの性。

terrain設定

地面が寂しいのでMaterialを設定します。
おすすめはYughues Free Ground Materials
Paint Trrainを選択してEditTerrainLayersからAdd Layerでレイヤー追加。GrandMaterialsから好みのテクスチャと対応するNormalmapを設定。
TilingSettingsは1倍で。

レイヤー追加

Directional Light を(x512, y10, z512)に、MainCameraを(x512, y1, z510)に移動。Terrainの真ん中に置いただけです。

Directional Lightはどこに置いても変わりはないですが、なんとなく目に入る位置に居てほしい気分なので。

CreateEmptyでGameObjectを作成して名前をPlayerに変更します。
Positionを(x512, y0.5, z512)に変更。yが0.5なのは0だと地面に半分埋まってしまうので。
Playerの下に3DオブジェクトのCubeを追加。これは適当でいいのでCubeじゃなくてもOKです。

Playerの下に3DオブジェクトのCubeを追加

ここまでが下準備。やっとプログラム的な内容です(=゚ω゚)。

C# スクリプトを追加。名前はPlayer.cs。

[Player.cs]

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private Vector3 velocity;//移動ベクトル
    [SerializeField] private readonly float moveSpeed = 5.0f;//移動速度

    void Update()
    {
        // キー入力判定
        velocity = Vector3.zero;
        if (Input.GetKey(KeyCode.W))
            velocity.z += 1;
        if (Input.GetKey(KeyCode.A))
            velocity.x -= 1;
        if (Input.GetKey(KeyCode.S))
            velocity.z -= 1;
        if (Input.GetKey(KeyCode.D))
            velocity.x += 1;

        // 移動ベクトルを秒単位でmoveSpeedだけ進むように制限
        velocity = velocity.normalized * moveSpeed * Time.deltaTime;

        // 移動中?
        if (velocity.magnitude > 0)
        {
            // プレイヤー位置の更新
            transform.position += velocity;
        }
    }
}

Player オブジェクトにscriptをアタッチしたら、Play。

とりあえず、WSADで移動できるようになりました(=゚ω゚)ノ