Пример #1
0
    void Update() //업데이트문 전체 추가
    {
        if (Input.GetMouseButtonDown(0) || (Input.touchCount > 2 && Input.GetTouch(0).phase == TouchPhase.Began))
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;

            //레이케스트와 충돌한 대상의 레이어가 Click, Block, Enemy 인지 체크한다.
            if (Physics.Raycast(ray, out hitInfo, 100f, layerMask))
            {
                //광선과 충돌한 대상의 레이어 정보를 맴버변수에 담는다.
                int layer = hitInfo.transform.gameObject.layer;

                if (layer == LayerMask.NameToLayer(clickLayer))
                {
                    attackpoint++;
                    fsmEnemy = hitInfo.collider.transform.GetComponent <FSMEnemy>();
                    Vector3 dest = hitInfo.point;
                    movePoint.transform.position = dest;
                    movePoint.gameObject.SetActive(true);
                    //FSMBase 의 SetState 메소드를 호출한다.
                    if (attackpoint % 2 == 1)
                    {
                        SetState(CharacterState.Attack1);
                    }
                    else if (attackpoint % 2 == 0)
                    {
                        SetState(CharacterState.Attack2);
                    }
                }
            }
        }
    }
 // Use this for initialization
 void Start()
 {
     enemy         = GetComponent <FSMEnemy>();
     colliders     = enemy.Colliders;
     player        = GameSceneManager.Instance.Player;
     stringBuilder = new StringBuilder(64);
 }
Пример #3
0
    //부활 딜레이
    public void  ReviveEvent()
    {
        //현재 자신의 상태가 대기 또는 공격 상태일 경우
        if (CHState == CH_STATE.MS_Wait || CHState == CH_STATE.MS_Attack)
        {
            string enemyLayer = "Enemy";

            int layerMask = LayerMask.GetMask(enemyLayer);

            Collider[] colliders = Physics.OverlapSphere(transform.position, 3.0f, layerMask); // 3.0 반지름만큼 적 레이어를 확인하여 충돌자 배열에 집어넣음

            int Count = 0;

            //반복문을 돌면서 죽은 마리수를 확인
            for (int i = 0; i < colliders.Length; ++i)
            {
                FSMEnemy enemy = colliders[i].GetComponent<FSMEnemy>();

                if (enemy.IsDead())
                {
                    Count++;
                }
            }

            //3명 이상이라면 부활 가능이므로 부활 코루틴 실행
            if (Count > 2)
                SetState(CH_STATE.MS_Revive);
        }
    }
Пример #4
0
    // Use this for initialization
    void Start()
    {
        fsmEnemy   = this.GetComponent <FSMEnemy>();
        max_Health = fsmEnemy.maxHP;
        cur_Health = fsmEnemy.currentHP;

        InvokeRepeating("decreasehealth", 1f, 1f);
    }
    //gets the stats of FSM behaviour tree
    public void InspectFSM(FSMEnemy t_character)
    {
        TreeStats charStats = t_character.stats;


        NodesEvalText.text       = "" + charStats.getNodes();
        ConditionsCheckText.text = "" + charStats.getConditions();
        ActionsPerformText.text  = "" + charStats.getActions();
    }
Пример #6
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Enemy"))
        {
            FSMEnemy enemy = other.GetComponent <FSMEnemy>();

            enemy.TakeDamage();
        }
    }
Пример #7
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Enemy"))
        {
            IsAttack = true;
        }


        if (Player.IsWhirlwind() && Player.m_Anim.GetCurrentAnimatorStateInfo(0).IsName("WhirlwindShot") &&
            other.CompareTag("Enemy"))
        {
            FSMEnemy Enemy = other.GetComponent <FSMEnemy>();
            Enemy.TakeDamage();
        }
    }
Пример #8
0
    public FSMEnemy Initialize(Enemy enemy)
    {
        FSMEnemy fsmCopy = Instantiate(this);

        for (int i = 0; i < serializedStates.Length; ++i)
        {
            EnemyState stateCopy = Instantiate(serializedStates[i]);
            stateCopy.Initialize(i, enemy);

            fsmCopy.states.Add(stateCopy.Name, stateCopy);
        }

        fsmCopy.currentStateName = "";


        return(fsmCopy);
    }
Пример #9
0
    protected virtual void Awake()
    {
        data = DataTableManager.singleton.GetEnemyData(typeID);
        rb2d = GetComponent <Rigidbody2D>();

        defaultDrag = rb2d.drag;
        defaultMass = rb2d.mass;


        statistics = new StatisticSystem(data.Attributes, statusModifiers);
        statistics[StatisticType.Hp] = statistics[StatisticType.MaxHp];


        if (fsm)
        {
            fsm = fsm.Initialize(this);
        }
    }
    public void OnRevive()
    {
        string enemyLayer = "Enemy";

        int layerMask = LayerMask.GetMask(enemyLayer);

        Collider[] colliders = Physics.OverlapSphere(transform.position, 3.0f, layerMask);

        for (int i = 0; i < colliders.Length; ++i)
        {
            FSMEnemy enemy = colliders[i].GetComponent <FSMEnemy>();

            if (enemy.CHState == CH_STATE.MS_Dead)
            {
                enemy.gameObject.SetActive(false);
                enemy.gameObject.SetActive(true);
            }
        }
    }
    public void OnBashAttack()
    {
        MemoryPoolManager.Instance.CreateObject("BashEffect", this.transform);

        StartCoroutine(mainCamera.PlayShake(0.3f, 0.25f));

        int layerMask;

        layerMask = LayerMask.GetMask(player.enemyLayer);

        Collider[] colliders = Physics.OverlapSphere(this.transform.position, 2.0f, layerMask);

        for (int i = 0; i < colliders.Length; ++i)
        {
            FSMEnemy fsmEnemy = colliders[i].GetComponent <FSMEnemy>();

            fsmEnemy.TakeDamage();
        }
    }
Пример #12
0
    void Update()
    {
        if (Input.touchCount > 0)
        {
            touchesOld = new GameObject[touchList.Count];
            touchList.CopyTo(touchesOld);
            touchList.Clear();

            foreach (Touch touch in Input.touches)
            {
                Ray        ray = Camera.main.ScreenPointToRay(touch.position);
                RaycastHit hit;

                if (Physics.Raycast(ray, out hit, 100f, layerMask))
                {
                    int layer = hit.transform.gameObject.layer;

                    GameObject recipient = hit.transform.gameObject;
                    touchList.Add(recipient);

                    if (touch.phase == TouchPhase.Began && layer == LayerMask.NameToLayer(enemyLayer))
                    {
                        attackpoint++;
                        fsmEnemy = hit.collider.transform.GetComponent <FSMEnemy>();
                        Vector3 dest = hit.point;
                        movePoint.transform.position = dest;
                        movePoint.gameObject.SetActive(true);
                        Debug.Log("Click");

                        if (attackpoint % 2 == 1)
                        {
                            SetState(CharacterState.Attack1);
                        }
                        else if (attackpoint % 2 == 0)
                        {
                            SetState(CharacterState.Attack2);
                        }
                    }
                }
            }
        }
    }