الفارس يهاجم
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 40 من 64.
التحدي
متوسطاجعل الفارس يهاجم عندما يمسك باللاعب.
- في
KnightStates.cs، اكتبAttackState: نفّذknight.Stop()وknight.playerHealth.TakeDamage(1)فورًا، ثم كل ثانية. إذا كانت المسافة أكبر منattackRange، فطارده. - في
ChaseState، إذا كانت المسافة أقل منattackRange، فغيّر الحالة إلىknight.attack. - في الدالة Awake الخاصة بـ
Knight، أضفattack = new AttackState(this);.
اضغط على «العب» ودع الفارس يمسك بك: ستعرض وحدة التحكم Player hp: 9. ثم اضغط على «تحقق».
جرّب بنفسك
using UnityEngine;
public class PatrolState : IState
{
private Knight knight;
private int next;
public PatrolState(Knight knight)
{
this.knight = knight;
}
public void Enter()
{
}
public void Tick()
{
if (knight.PlayerDistance() < knight.sightRange)
{
knight.machine.ChangeState(knight.chase);
return;
}
Vector3 point = knight.waypoints[next].position;
if (knight.DistanceTo(point) < 0.3f)
{
next = (next + 1) % knight.waypoints.Length;
}
knight.WalkTo(knight.waypoints[next].position);
}
public void Exit()
{
}
}
public class ChaseState : IState
{
private Knight knight;
public ChaseState(Knight knight)
{
this.knight = knight;
}
public void Enter()
{
}
public void Tick()
{
float distance = knight.PlayerDistance();
if (distance > knight.loseRange)
{
knight.machine.ChangeState(knight.patrol);
return;
}
knight.WalkTo(knight.player.position);
}
public void Exit()
{
}
}
جميع دروس هندسة الألعاب في Unity
1المكوّنات، لا التسلسلات الهرمية
مكوّنات صغيرةنص برمجي أساسي للعدومكوّنات مجرّدةالمكوّنات تعمل معًامراجعة: برج معياريمراجعة: مدفع مزدوج4البيانات المُسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائممراجعة: اختيار الغنائم عشوائيًا7آلات الحالات
الحالات كأصنافحالة التنبيهآلة حالاتالانتقالاتعقول الأعداءالفارس يهاجممراجعة: حالات الباب2الواجهات في Unity
IDamageableالواجهات وTryGetComponentGetComponentsمراجعة: مفتاح التفاعلمراجعة: أقرب عنصر ضمن النطاقتدرّب بنفسك: Playground لـ Unity