Unity で狩猟ゲームを作成する
このチュートリアルでは、Unity で基本的な狩猟ゲームを作成する手順を説明します。このゲームには、プレイヤーの動き、動物の AI、射撃の仕組み、スコアリング システムなどの要素が含まれます。次の内容について説明します。
- プロジェクトと環境の設定
- プレーヤーコントロールの作成
- 動物AIの実装
- 射撃メカニクスの追加
- スコアリングシステムの設定
プロジェクトの設定
まず、新しい Unity プロジェクトをセットアップして環境を作成しましょう。
プロジェクトの作成
- Unity を開き、新しい 3D プロジェクトを作成します。
- プロジェクトに
HuntingGame
という名前を付けて、Create
をクリックします。 - プロジェクト ウィンドウで、
Scripts
、Prefabs
、Materials
という名前のフォルダーを作成して、アセットを整理します。
環境の設定
- 階層内で右クリックし、
3D オブジェクト > 地形
を選択して地形を作成します。 地形ツール
を使用してテクスチャをペイントし、木を追加し、草やその他の詳細を配置して地形をカスタマイズします。- 環境をよりリアルにするために、岩や木などの 3D オブジェクトをいくつか追加します。
プレーヤーコントロールの作成
次に、プレイヤー キャラクターを作成し、物理ベースの移動制御を実装します。
プレイヤーキャラクター
- 階層内で右クリックし、
3D オブジェクト > カプセル
を選択してプレイヤー キャラクターを作成します。 - カプセルの名前を
Player
に変更し、地形の上に配置します。 - 物理ベースの動きを実現するために、
Player
オブジェクトにRigidbody
コンポーネントを追加します。 - プレーヤーの視点として機能する
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);
}
}
Scripts
フォルダーにPlayerMovement.cs
という名前の新しい C# スクリプトを作成します。PlayerMovement
スクリプトをPlayer
オブジェクトにアタッチします。
動物AIの実装
環境内を歩き回り、プレイヤーに反応するシンプルな動物 AI を作成します。
動物プレハブ
- 動物(鹿など)の 3D モデルをインポートまたは作成します。
- モデルをシーンにドラッグし、地形上に配置します。
- 階層内のモデルを右クリックし、
Create Empty
を選択して親オブジェクトを作成します。Deer
という名前を付けます。 - 3D モデルを
Deer
オブジェクトにドラッグし、その変換をリセットします。 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);
}
}
}
Scripts
フォルダーにAnimalAI.cs
という名前の新しい C# スクリプトを作成します。AnimalAI
スクリプトをDeer
プレハブに添付します。NavMeshAgent
コンポーネントをDeer
プレハブに追加します。- 空の 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);
}
}
}
Scripts
フォルダーにPlayerShooting.cs
という名前の新しい C# スクリプトを作成します。PlayerShooting
スクリプトをPlayer
オブジェクトにアタッチします。- 衝撃効果 (パーティクル システムなど) を作成し、それをスクリプトの
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;
}
}
Scripts
フォルダーにScoreManager.cs
という名前の新しい C# スクリプトを作成します。ScoreManager
スクリプトを、GameManager
という名前の新しい空の GameObject にアタッチします。- スコアを表示するための 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 を実装し、射撃の仕組みを追加し、スコアリング システムを設定しました。この基礎知識を拡張して、より複雑な動作、追加の動物、洗練されたゲーム メカニズムを含め、狩猟ゲームを強化することができます。