Unity で狩猟ゲームを作成する

このチュートリアルでは、Unity で基本的な狩猟ゲームを作成する手順を説明します。このゲームには、プレイヤーの動き、動物の AI、射撃の仕組み、スコアリング システムなどの要素が含まれます。次の内容について説明します。

  • プロジェクトと環境の設定
  • プレーヤーコントロールの作成
  • 動物AIの実装
  • 射撃メカニクスの追加
  • スコアリングシステムの設定

プロジェクトの設定

まず、新しい Unity プロジェクトをセットアップして環境を作成しましょう。

プロジェクトの作成

  1. Unity を開き、新しい 3D プロジェクトを作成します。
  2. プロジェクトにHuntingGameという名前を付けて、Createをクリックします。
  3. プロジェクト ウィンドウで、ScriptsPrefabsMaterials という名前のフォルダーを作成して、アセットを整理します。

環境の設定

  1. 階層内で右クリックし、3D オブジェクト > 地形 を選択して地形を作成します。
  2. 地形ツール を使用してテクスチャをペイントし、木を追加し、草やその他の詳細を配置して地形をカスタマイズします。
  3. 環境をよりリアルにするために、岩や木などの 3D オブジェクトをいくつか追加します。

プレーヤーコントロールの作成

次に、プレイヤー キャラクターを作成し、物理ベースの移動制御を実装します。

プレイヤーキャラクター

  1. 階層内で右クリックし、3D オブジェクト > カプセル を選択してプレイヤー キャラクターを作成します。
  2. カプセルの名前を Player に変更し、地形の上に配置します。
  3. 物理ベースの動きを実現するために、Player オブジェクトに Rigidbody コンポーネントを追加します。
  4. プレーヤーの視点として機能する Player オブジェクトの子として Camera を追加します。

プレイヤー移動スクリプト

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float rotationSpeed = 100f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent();
        rb.freezeRotation = true;
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = transform.forward * moveVertical * moveSpeed * Time.deltaTime;
        rb.MovePosition(rb.position + movement);

        float rotation = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
        Quaternion turnRotation = Quaternion.Euler(0f, rotation, 0f);
        rb.MoveRotation(rb.rotation * turnRotation);
    }
}
  1. Scripts フォルダーに PlayerMovement.cs という名前の新しい C# スクリプトを作成します。
  2. PlayerMovement スクリプトを Player オブジェクトにアタッチします。

動物AIの実装

環境内を歩き回り、プレイヤーに反応するシンプルな動物 AI を作成します。

動物プレハブ

  1. 動物(鹿など)の 3D モデルをインポートまたは作成します。
  2. モデルをシーンにドラッグし、地形上に配置します。
  3. 階層内のモデルを右クリックし、Create Empty を選択して親オブジェクトを作成します。Deer という名前を付けます。
  4. 3D モデルを Deer オブジェクトにドラッグし、その変換をリセットします。
  5. Deer オブジェクトを Prefabs フォルダにドラッグしてプレハブとして保存します。

動物AIスクリプト

using UnityEngine;
using UnityEngine.AI;

public class AnimalAI : MonoBehaviour
{
    public Transform[] waypoints;
    private NavMeshAgent agent;
    private int currentWaypoint = 0;

    void Start()
    {
        agent = GetComponent();
        agent.SetDestination(waypoints[currentWaypoint].position);
    }

    void Update()
    {
        if (agent.remainingDistance < agent.stoppingDistance)
        {
            currentWaypoint = (currentWaypoint + 1) % waypoints.Length;
            agent.SetDestination(waypoints[currentWaypoint].position);
        }
    }
}
  1. Scripts フォルダーに AnimalAI.cs という名前の新しい C# スクリプトを作成します。
  2. AnimalAI スクリプトを Deer プレハブに添付します。
  3. NavMeshAgent コンポーネントを Deer プレハブに追加します。
  4. 空の GameObject を作成し、必要に応じて配置して、シーン内にウェイポイントを設定します。これらのウェイポイントを AnimalAI スクリプトの waypoints 配列に割り当てます。

射撃メカニクスの追加

プレイヤーが動物を撃つ機能を実装します。

撮影台本

using UnityEngine;

public class PlayerShooting : MonoBehaviour
{
    public Camera playerCamera;
    public float range = 100f;
    public GameObject impactEffect;

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Shoot();
        }
    }

    void Shoot()
    {
        RaycastHit hit;
        if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
        {
            AnimalAI animal = hit.transform.GetComponent();
            if (animal != null)
            {
                Destroy(hit.transform.gameObject);
            }

            GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
            Destroy(impactGO, 2f);
        }
    }
}
  1. Scripts フォルダーに PlayerShooting.cs という名前の新しい C# スクリプトを作成します。
  2. PlayerShooting スクリプトを Player オブジェクトにアタッチします。
  3. 衝撃効果 (パーティクル システムなど) を作成し、それをスクリプトの impactEffect フィールドに割り当てます。

スコアリングシステムの設定

プレイヤーの成功した狩りを追跡するための簡単なスコアリング システムを追加します。

スコアマネージャースクリプト

using UnityEngine;
using UnityEngine.UI;

public class ScoreManager : MonoBehaviour
{
    public static int score = 0;
    public Text scoreText;

    void Update()
    {
        scoreText.text = "Score: " + score.ToString();
    }

    public static void AddScore(int points)
    {
        score += points;
    }
}
  1. Scripts フォルダーに ScoreManager.cs という名前の新しい C# スクリプトを作成します。
  2. ScoreManager スクリプトを、GameManager という名前の新しい空の GameObject にアタッチします。
  3. スコアを表示するための UI テキスト要素を作成し、それを ScoreManager スクリプトの scoreText フィールドに割り当てます。

スコアを追跡するための射撃スクリプトの更新

void Shoot()
{
    RaycastHit hit;
    if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
    {
        AnimalAI animal = hit.transform.GetComponent();
        if (animal != null)
        {
            Destroy(hit.transform.gameObject);
            ScoreManager.AddScore(10);
        }

        GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
        Destroy(impactGO, 2f);
    }
}

結論

Unity で基本的な狩猟ゲームを作成しました。プロジェクトと環境を設定し、物理ベースの動きでプレイヤー コントロールを作成し、動物の AI を実装し、射撃の仕組みを追加し、スコアリング システムを設定しました。この基礎知​​識を拡張して、より複雑な動作、追加の動物、洗練されたゲーム メカニズムを含め、狩猟ゲームを強化することができます。