示例#1
0
文件: FSM.cs 项目: coding137/-
    //----------------------------------------------------------------------------
    /// <summary>
    /// 타겟에게 나의 능력치를 기반하여 HP를 감소시킨다
    /// </summary>
    void Enter_AttackState()
    {
        MonsterStatus myAttribute = gameObject.GetComponent <MonsterStatus>();

        if (ProcessDeadState(myAttribute))
        {
            return;
        }

        //애니메이션 실행

        Playerstatus targetAttribute = Target.GetComponent <Playerstatus>();

        targetAttribute.current_hp -= myAttribute.damage;

        Debug.Log("Attack : " + gameObject.name + "->" + Target.name);
        Debug.Log("Hp : " + targetAttribute.current_hp.ToString());

        CharacterStateMachine targetStateMachine = Target.GetComponent <CharacterStateMachine>();

        targetStateMachine.SetState(State.DAMAGED);

        //대상이 죽은 경우는 타겟 해제
        if (targetAttribute.current_hp <= 0)
        {
            Target = null;
        }

        StartCoroutine("TransStateToIdle", myAttribute.Atk_delay);
    }
示例#2
0
文件: FSM.cs 项目: coding137/-
    void Update_IdleState()
    {
        MonsterStatus myAttribute = gameObject.GetComponent <MonsterStatus>();

        if (ProcessDeadState(myAttribute))
        {
            return;
        }

        //타겟이 계속 바뀌면 안됨으로, 타겟이 유효한 경우는 유지되도록
        bool isFindTarget = false;

        if (Target != null)
        {
            Playerstatus targetAttribute = Target.GetComponent <Playerstatus>();
            if (targetAttribute.current_hp > 0)
            {
                isFindTarget = true;
            }
        }

        if (!isFindTarget)
        {
            //Target = FindEnemy(searchDistanceMeter: 2.0f);


            if (Target != null)
            {
                //적을 찾았으면 대상으로 지정하고 이동
                Playerstatus targetAttribute = Target.GetComponent <Playerstatus>();

                Vector3 dir = Target.transform.position - transform.position;
                dir.Normalize();
                float distance = Vector3.Distance(Target.transform.position, transform.position);


                if (distance > targetAttribute.playerRadius + myAttribute.monsterrad)
                {
                    transform.LookAt(Target.transform.position);

                    TargetPosition = Target.transform.position;
                    SetState(State.MOVE);
                }
                else
                {
                    if (nextAttackCooltime_ == 0.0f || nextAttackCooltime_ < Time.time)
                    {
                        nextAttackCooltime_ = Time.time + myAttribute.Atk_delay;
                        SetState(State.ATTACK);
                    }
                }
            }
            else
            {
                //적을 못 찾았으면 랜덤한 위치로 이동한다.
                // TargetPosition = FindRandomTargetPosition(minRangeMeter: 4, maxRangeMeter: 8);
                SetState(State.MOVE);
            }
        }
    }
示例#3
0
    // Use this for initialization
    void Start()
    {
        Player = GameObject.Find("Player");

        Status = Player.GetComponent <Playerstatus>();

        UpdateStamina.text = "Stamina: " + Mathf.Round(Status.Stamina);
    }
示例#4
0
    // Use this for initialization
    void Start()
    {
        //dizendo quem é o player
        Player = GameObject.Find("Player");

        //Dizendo quem é o status do player
        Status = Player.GetComponent <Playerstatus>();


        UpdateStatus.text = "Sede: " + Mathf.Round(Status.Sede);
    }
示例#5
0
    void Idle()
    {
        if (current_state == State.Died)
        {
            return;
        }


        Debug.Log("NOwIDle");
        bool          isTargetAlive = false;
        MonsterStatus mon           = gameObject.GetComponent <MonsterStatus>();

        if (Target == null)
        {
            plyerrad = Target.GetComponent <Playerstatus>();
            if (plyerrad.current_hp >= 0)
            {
                isTargetAlive = true;
            }
        }

        if (!isTargetAlive)
        {
            float distance = Vector3.Distance(Target.transform.position, transform.position);// target과 나의 distance 를  잡아준다 .

            if (distance > 5.0f)
            {
                transform.LookAt(Target.transform.position);
                TargetPosition = Target.transform.position;
                SetState(State.Move);
            }
            else
            {
                Debug.Log("attakc!!");

                td.enabled = false;

                SetState(State.Attack);
            }



            // 몬스터 죽었을때 컨트롤 파츠
            if (plyerrad.current_hp < 0)
            {
                SetState(State.Died);
            }
        }
    }
示例#6
0
    // Update is called once per frame
    void Update()
    {
        plyerrad = Target.GetComponent <Playerstatus>();
        mon      = transform.GetComponent <MonsterStatus>();
        td       = GetComponent <TestCode>();

        float distance = Vector3.Distance(Target.transform.position, transform.position);// target과 나의 distance 를  잡아준다 .

        //  Debug.Log(" x:       "+td.objEndCube.transform.position.x + "z :"+td.objEndCube.transform.position.z);



        if (count == 0 && mon.current_hp <= 50)
        {
            Debug.Log("countup");
            count++;

            SetState(State.Hiding);
        }

        switch (current_state)
        {
        case State.Idle: Idle(); break;

        case State.Move: Move(); break;

        case State.Attack: Attack(); break;

        case State.Died: DIED(); break;

        case State.Hiding: Hiding(); break;

        case State.Sleeping: Sleeping(); break;
        }



        // 몬스터 죽었을때 컨트롤 파츠
        if (plyerrad.current_hp < 0)
        {
            SetState(State.Died);
        }
    }
示例#7
0
    void Move()
    {
        plyerrad = Target.GetComponent <Playerstatus>();
        mon      = transform.GetComponent <MonsterStatus>();
        td       = GetComponent <TestCode>();
        Vector3 dir = Target.transform.position - transform.position;

        dir.Normalize();

        // Debug.Log("move");



        float distance = Vector3.Distance(Target.transform.position, transform.position);// target과 나의 distance 를  잡아준다 .

        if (distance > mon.monsterrad + plyerrad.playerRadius)
        {
            transform.LookAt(Target.transform.position);


            SetState(State.Move);
            td.enabled      = true;
            td.objEndCube   = GameObject.FindGameObjectWithTag("End");
            td.objStartCube = monster;
            // StopAllCoroutines();
        }
        else
        {
            td.enabled = false;
            Debug.Log("transfer");

            StartCoroutine("TransfertoIdle", 0.5f);
        }


        // 몬스터 죽었을때 컨트롤 파츠
        if (plyerrad.current_hp < 0)
        {
            SetState(State.Died);
        }
    }
示例#8
0
    // Use this for initialization
    void Start()
    {
        //rigidbody
        rb = GetComponent <Rigidbody>();

        //dizendo quem é o jogador
        Jogador = GameObject.Find("Player");

        //pegando o playerstatus
        StatusDoJogador = Jogador.GetComponent <Playerstatus>();


        //variaveis//

        //velocidade
        Speed = 10.0f;
        //velocidade correndo
        RunningSpeed = 25.0f;
        //velocidade de rotação
        RotationSpeed = 140.0f;
    }
示例#9
0
 // Use this for initialization
 void Start()
 {
     Player = GameObject.Find("Player");
     Status = Player.GetComponent <Playerstatus>();
 }
示例#10
0
    // private AI AI;


    // Use this for initialization
    void Start()
    {
        status = GetComponent <Playerstatus>();
    }
示例#11
0
 // Use this for initialization
 void Start()
 {
     Player   = GameObject.Find("Player");
     Status   = Player.GetComponent <Playerstatus>();
     Txt.text = "Fome: " + Status.Fome;
 }