【Unity入門】プレイヤーの右手にオブジェクトを出現させる方法(ワールドトリガー)

こんにちは、カバゴトです!今回は、プレイヤーの右手にトリオンを配置し、ワートリの世界を再現していきたいと思います!

今回作ったシーンは下のようになります!

目次

プレイヤーの準備

Game Object」→「3D Object」→「Capsule」と「Plane」でカプセルと地面を出します。

Plane」のポジションを(0,0,0)にし、「Capsule」のポジションを(0,1,0)にします。

Add Component」→「Physics」→「Rigidbody」で重力を付けます。

Assets」→「Create」→「Material」でカプセルに色を付けます。

右側で色を選択し、カプセルにドラッグ&ドロップします。

これで準備できました!

プレハブ化したキューブの準備

先ほど同じように「GameObject」→「3D Object」→「Cube」でキューブを出します。

キューブの大きさを0.6に設定し、Hierarchyの「Cube」を下のProjectの中にドラッグ&ドロップします。

プレハブ化が完了したら、右クリックし、「Delete」をクリックしましょう。

また、先ほどと同様に「Assets」→「Create」→「Material」でキューブに色を付けます。

RGBAの値をこのようにしましょう。

色を設定したら、「Emission」にチェックを入れ、HDRColorを設定します。RGBの値は上のようにしましょう。

このEmissionで色の光沢感を調整することができます。

できたマテリアルをプレハブ化したキューブにドラッグ&ドロップします。

スクリプト作成

Assets」→「Create」→「C#Script」でスクリプトを2つ作ります。名前を「controller」と「shooter」にします。作ることができたら、「controller」をvisualStudioで開きます。

controllerのスクリプト

using UnityEngine;

public class CubeMovement : MonoBehaviour
{
    public float moveSpeed = 5f; // 移動速度

    void Update()
    {
        // sキーが押されている間のみz軸正方向に移動
        if (Input.GetKey(KeyCode.S))
        {
            Move(-Vector3.forward);
        }
        // aキーが押されている間のみx軸正方向に移動
        else if (Input.GetKey(KeyCode.A))
        {
            Move(-Vector3.right);
        }
        // wキーが押されている間のみz軸負方向に移動
        else if (Input.GetKey(KeyCode.W))
        {
            Move(Vector3.forward);
        }
        // dキーが押されている間のみx軸負方向に移動
        else if (Input.GetKey(KeyCode.D))
        {
            Move(Vector3.right);
        }
        // スペースキーが押されている間のみy軸正方向に移動
        else if (Input.GetKey(KeyCode.Space))
        {
            Move(Vector3.up);
        }
    }

    void Move(Vector3 direction)
    {
        // 指定された方向に移動
        transform.Translate(direction * moveSpeed * Time.deltaTime);
    }
}

controllerにこのコードを書きます。これでカプセルがwasdキーで移動、Spaceでジャンプすることができます

shooterのスクリプト

using UnityEngine;

public class CubeSpawner : MonoBehaviour
{
    public GameObject cubePrefab; // 生成するキューブのプレハブ
    public float spawnDistance ; // キューブを生成する距離

    private GameObject trion; // 生成されたキューブの参照を保持

    void Update()
    {
        if (trion == null)
        {
            // 左クリックが押されたら
            if (Input.GetMouseButtonDown(0))
            {
                // オブジェクトの位置を取得
                Vector3 objectPosition = transform.position;
                // オブジェクトの右側にキューブを生成する位置を計算
                Vector3 spawnPosition = objectPosition + transform.right * spawnDistance;
                // キューブを生成
                trion = Instantiate(cubePrefab, spawnPosition, Quaternion.identity);
            }
        }
        else
        {
            // すでにキューブが生成されている場合、その位置を更新
            trion.transform.position = transform.position + transform.right * spawnDistance;
        }
    }
}

shooterにはこのコードを書きます。このコードで左クリックするとカプセルの右側にキューブを出現させます

具体的に解説すると、左クリックすると、プレイヤーの位置を取得しその位置を参照してキューブが生成する位置を計算・生成します。そして、キューブが生成されているときキューブの位置をプレイヤーの移動に合わせ位置を更新します。

できたスクリプトを「Capsule」にドラッグ&ドロップします。

カプセルに入れたスクリプトの「Cube Prefab」にプレハブ化したキューブを、「Span Distance」にはを入れます。これで完成です。

実際に動かしてみる!

では、実際に動かしてみます!

動きました!

終わりに

最後まで読んでくださりありがとうございます!今回は、プレイヤーの右手にトリオンを配置する方法について解説しました。もし、うまくいない場合や意見等あればコメントの方をよろしくお願いします!

この記事が参考になれば幸いです。また、次回のブログでお会いしましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次