Menu
CoddyTech

الفارس يهاجم

جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 40 من 64.

challenge icon

التحدي

متوسط

اجعل الفارس يهاجم عندما يمسك باللاعب.

  1. في KnightStates.cs، اكتب AttackState: نفّذ knight.Stop() وknight.playerHealth.TakeDamage(1) فورًا، ثم كل ثانية. إذا كانت المسافة أكبر من attackRange، فطارده.
  2. في ChaseState، إذا كانت المسافة أقل من attackRange، فغيّر الحالة إلى knight.attack.
  3. في الدالة 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

تدرّب بنفسك: Playground لـ Unity