إنشاء لعبة صيد في Unity
في هذا البرنامج التعليمي، سنستعرض عملية إنشاء لعبة صيد أساسية في Unity. ستتضمن هذه اللعبة عناصر مثل حركة اللاعب، والذكاء الاصطناعي للحيوانات، وميكانيكا التصويب، ونظام تسجيل النقاط. سنغطي:
- إعداد المشروع والبيئة
- إنشاء عناصر التحكم في اللاعب
- تنفيذ الذكاء الاصطناعي الحيواني
- إضافة آليات التصوير
- إعداد نظام تسجيل النقاط
إعداد المشروع
لنبدأ بإعداد مشروع Unity جديد وإنشاء البيئة الخاصة به.
إنشاء المشروع
- افتح Unity وقم بإنشاء مشروع ثلاثي الأبعاد جديد.
- قم بتسمية مشروعك
HuntingGame
وانقر علىCreate
. - في نافذة المشروع، قم بإنشاء مجلدات باسم
Scripts
، وPrefabs
، وMaterials
لتنظيم أصولك.
إعداد البيئة
- في التسلسل الهرمي، انقر بزر الماوس الأيمن وحدد
كائن ثلاثي الأبعاد > التضاريس
لإنشاء تضاريس. - قم بتخصيص التضاريس باستخدام
أدوات التضاريس
لرسم القوام وإضافة الأشجار ووضع العشب أو التفاصيل الأخرى. - قم بإضافة بعض الكائنات ثلاثية الأبعاد مثل الصخور والأشجار لجعل البيئة أكثر واقعية.
إنشاء عناصر التحكم في اللاعب
بعد ذلك، سنقوم بإنشاء شخصية اللاعب وتنفيذ عناصر التحكم في الحركة المستندة إلى الفيزياء.
شخصية اللاعب
- في التسلسل الهرمي، انقر بزر الماوس الأيمن وحدد
كائن ثلاثي الأبعاد > كبسولة
لإنشاء شخصية لاعب. - قم بإعادة تسمية الكبسولة إلى
Player
وضعها فوق التضاريس. - أضف مكون
Rigidbody
إلى كائنPlayer
للحركة المعتمدة على الفيزياء. - أضف
Camera
كجزء من كائنPlayer
ليكون بمثابة وجهة نظر اللاعب.
نص حركة اللاعب
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);
}
}
- قم بإنشاء برنامج نصي C# جديد باسم
PlayerMovement.cs
في المجلدScripts
. - قم بإرفاق البرنامج النصي
PlayerMovement
إلى الكائنPlayer
.
تنفيذ الذكاء الاصطناعي الحيواني
سنعمل على إنشاء ذكاء اصطناعي حيواني بسيط للتجول في البيئة والتفاعل مع اللاعب.
حيوانات جاهزة
- استيراد أو إنشاء نموذج ثلاثي الأبعاد للحيوان (على سبيل المثال، الغزلان).
- اسحب النموذج إلى المشهد وضعه على التضاريس.
- انقر بزر الماوس الأيمن على النموذج في التسلسل الهرمي وحدد
إنشاء فارغ
لإنشاء كائن رئيسي. أطلق عليه اسمDeer
. - اسحب النموذج ثلاثي الأبعاد إلى الكائن
Deer
وأعد تعيين تحويله. - احفظ الكائن
Deer
كنموذج جاهز عن طريق سحبه إلى المجلدPrefabs
.
نص الذكاء الاصطناعي للحيوانات
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);
}
}
}
- قم بإنشاء برنامج نصي C# جديد باسم
AnimalAI.cs
في المجلدScripts
. - قم بإرفاق البرنامج النصي
AnimalAI
بالنموذج المسبقDeer
. - أضف مكون
NavMeshAgent
إلى النموذج الأوليDeer
. - قم بإعداد نقاط التوجيه في المشهد عن طريق إنشاء كائنات لعبة فارغة ووضعها في المكان المطلوب. قم بتعيين نقاط التوجيه هذه إلى المصفوفة
waypoints
في البرنامج النصيAnimalAI
.
إضافة آليات التصوير
سننفذ قدرة اللاعب على إطلاق النار على الحيوانات.
نص التصوير
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);
}
}
}
- قم بإنشاء برنامج نصي C# جديد باسم
PlayerShooting.cs
في المجلدScripts
. - قم بإرفاق البرنامج النصي
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;
}
}
- قم بإنشاء برنامج نصي C# جديد باسم
ScoreManager.cs
في المجلدScripts
. - قم بإرفاق البرنامج النصي
ScoreManager
إلى GameObject فارغ جديد يسمىGameManager
. - قم بإنشاء عنصر نص واجهة المستخدم لعرض النتيجة وقم بتعيينه إلى الحقل
scoreText
في البرنامج النصيScoreManager
.
تحديث نص التصوير لتتبع النتيجة
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. قمنا بإعداد المشروع والبيئة، وإنشاء عناصر تحكم للاعب مع حركة تعتمد على الفيزياء، وتنفيذ الذكاء الاصطناعي للحيوانات، وإضافة آليات التصويب، وإعداد نظام تسجيل النقاط. يمكن توسيع هذه المعرفة الأساسية لتشمل سلوكيات أكثر تعقيدًا، وحيوانات إضافية، وميكانيكا لعب محسنة لتحسين لعبة الصيد الخاصة بك.