بيانات العدو
الدرس 2 من 25 في دورة لعبة Unity: الدفاع عن الأبراج على Coddy.
ينضم Runner إلى Grunt. وهو أسرع وصحته أقل، ويتشارك كل Runner هذه الأرقام، لذا فهي تخص النوع لا عدوًا بعينه. تُخزَّن هذه الأرقام في الأصل ScriptableObject EnemyData: يحتوي المشروع على GruntData (السرعة 2، الصحة 9) وRunnerData (السرعة 3.5، الصحة 5)، ويُعيّن Inspector لكل عدو أصلًا خاصًا به في الحقل data.
يقرأ كل عدو أرقام نوعه من خلال هذا الحقل، كلما احتاج إليها:
void Start()
{
Debug.Log(name + " pays " + data.reward);
}الصحة مختلفة: فـ Grunt الذي تلقى ضربة تكون صحته أقل من Grunt الذي يقف خلفه. لذا يحتفظ الأصل بالقيمة maxHealth، وينسخها كل عدو إلى حقل خاص به في Awake، التي تعمل فور إنشاء الكائن. لا تغيّر الأصل نفسه أبدًا: فسيؤدي ذلك إلى تغيير كل عدو من هذا النوع.
التحدي
سهلامنح كل عدو إحصاءات نوعه من الأصل الخاص به.
- في
Enemy، استبدلspeedبـpublic EnemyData data;واجعله يتحرك بسرعةdata.speed. - أضف
private int health;واجعل قيمتهdata.maxHealthفيAwake.
اضغط على «العب»: يتجاوز Runner Grunt. ثم اضغط على «تحقق».
جرّب بنفسك
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
private int next = 1;
void Update()
{
if (next >= waypoints.Length)
{
return;
}
Vector3 target = waypoints[next].position;
transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
if (transform.position == target)
{
next++;
}
}
}
جميع دروس لعبة Unity: الدفاع عن الأبراج
تدرّب بنفسك: Playground لـ Unity