יצירת משחק ציד באחדות
במדריך זה, נעבור על תהליך יצירת משחק ציד בסיסי ב-Unity. משחק זה יכלול אלמנטים כמו תנועת שחקנים, בינה מלאכותית של בעלי חיים, מכניקת ירי ומערכת ניקוד. אנו נכסה:
- הקמת הפרויקט והסביבה
- יצירת פקדי שחקן
- הטמעת בינה מלאכותית של בעלי חיים
- הוספת מכניקת ירי
- הקמת מערכת ניקוד
הגדרת הפרויקט
בואו נתחיל בהקמת פרויקט Unity חדש ויצירת הסביבה.
יצירת הפרויקט
- פתח את Unity וצור פרויקט תלת מימד חדש.
- תן שם לפרויקט שלך
HuntingGameולחץ עלCreate. - בחלון הפרויקט, צור תיקיות בשם
Scripts,Prefabsו-Materialsכדי לארגן את הנכסים שלך.
הגדרת הסביבה
- בהיררכיה, לחץ לחיצה ימנית ובחר
3D Object > Terrainכדי ליצור שטח. - התאם אישית את השטח באמצעות
כלי שטחכדי לצבוע טקסטורות, להוסיף עצים ולהציב דשא או פרטים אחרים. - הוסף כמה אובייקטים תלת מימדיים כמו סלעים ועצים כדי להפוך את הסביבה למציאותית יותר.
יצירת בקרות נגן
לאחר מכן, ניצור את דמות השחקן וניישם בקרות תנועה מבוססות פיזיקה.
דמות שחקן
- בהיררכיה, לחץ לחיצה ימנית ובחר
3D Object > Capsuleכדי ליצור דמות שחקן. - שנה את שם הקפסולה ל-
Playerוהצב אותה מעל השטח. - הוסף רכיב
RigidbodyלאובייקטPlayerלתנועה מבוססת פיזיקה. - הוסף
מצלמהבתור ילד של האובייקט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.
הטמעת בינה מלאכותית של בעלי חיים
ניצור בינה מלאכותית פשוטה של בעלי חיים כדי לשוטט בסביבה ולהגיב לשחקן.
בעלי חיים טרומיים
- ייבא או צור מודל תלת מימד עבור החיה (למשל, צבי).
- גרור את הדגם לתוך הסצנה והצב אותו על השטח.
- לחץ לחיצה ימנית על המודל בהיררכיה ובחר
Create Emptyכדי ליצור אובייקט אב. תן לזהצבי. - גרור את המודל התלת-ממדי לתוך האובייקט
Deerואפס את ההמרה שלו. - שמור את האובייקט
Deerבתור prefab על ידי גרירתו לתיקיה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);
}
}
}- צור סקריפט C# חדש בשם
AnimalAI.csבתיקייהScripts. - צרף את הסקריפט
AnimalAIל-Deerהקדם. - הוסף רכיב
NavMeshAgentל-Deerהקדם. - הגדר נקודות ציון בסצנה על ידי יצירת GameObjects ריקים והצבתם כרצונך. הקצה נקודות ציון אלו למערך
נקודות ציוןבסקריפט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. הקמנו את הפרויקט והסביבה, יצרנו בקרות שחקנים עם תנועה מבוססת פיזיקה, הטמענו בינה מלאכותית של בעלי חיים, הוספנו מכניקת ירי והקמנו מערכת ניקוד. ניתן להרחיב את הידע הבסיסי הזה כך שיכלול התנהגויות מורכבות יותר, בעלי חיים נוספים ומכניקת משחק מעודנת כדי לשפר את משחק הציד שלך.