إنشاء لعبة صيد في 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. قمنا بإعداد المشروع والبيئة، وإنشاء عناصر تحكم للاعب مع حركة تعتمد على الفيزياء، وتنفيذ الذكاء الاصطناعي للحيوانات، وإضافة آليات التصويب، وإعداد نظام تسجيل النقاط. يمكن توسيع هذه المعرفة الأساسية لتشمل سلوكيات أكثر تعقيدًا، وحيوانات إضافية، وميكانيكا لعب محسنة لتحسين لعبة الصيد الخاصة بك.