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 を実装し、射撃の仕組みを追加し、スコアリング システムを設定しました。この基礎知識を拡張して、より複雑な動作、追加の動物、洗練されたゲーム メカニズムを含め、狩猟ゲームを強化することができます。