Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            RaycastHit hit;

            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, Mathf.Infinity))
            {
                GameObject characterGameObject = hit.collider.gameObject;
                if (characterGameObject.CompareTag("Player"))
                {
                    foundCharacter = false;
                    foreach (var item in characterList)
                    {
                        if (item == characterGameObject)
                        {
                            item.GetComponent <CharacterMove>().SetTarget(null);
                            item.GetComponent <CharacterMove>().SetDestination(item.transform.position);
                            characterGameObject.GetComponent <CharacterMove>().selected.SetActive(false);
                            characterList.Remove(item);
                            foundCharacter = true;
                            break;
                        }
                    }
                    if (foundCharacter == false)
                    {
                        characterGameObject.GetComponent <CharacterMove>().selected.SetActive(true);
                        characterList.Add(characterGameObject);
                    }
                }
                else if (characterGameObject.CompareTag("Enemy"))
                {
                    target = characterGameObject;
                    Instantiate(enemyParticle, hit.point, Quaternion.identity);
                }
                else
                {
                    Instantiate(clickParticle, hit.point, Quaternion.identity);
                    target       = null;
                    walkPosition = hit.point;
                }
            }
        }
        foreach (var item in characterList)
        {
            CharacterMove move = item.GetComponent <CharacterMove>();
            move.SetTarget(target);
            if (target == null)
            {
                move.SetDestination(walkPosition);
            }
        }
    }
Esempio n. 2
0
    void Walking()
    {
        //if(characterMove.arrived)
        //    ChangeState(State.Attacking);



        //Vector3 destinationPosition = characterMove.m_
        characterMove.SetDestination();
        if (characterMove.arrived)
        {
            state = State.Attacking;
        }



        //// 대기 시간이 아직 남았다면.
        //if (waitTime > 0.0f)
        //{
        //    // 대기 시간을 줄인다.
        //    waitTime -= Time.deltaTime;
        //    // 대기 시간이 없어지면.
        //    if (waitTime <= 0.0f)
        //    {
        //        // 범위 내의 어딘가.
        //        Vector2 randomValue = Random.insideUnitCircle * walkRange;
        //        // 이동할 곳을 설정한다.
        //        Vector3 destinationPosition = basePosition + new Vector3(randomValue.x, 0.0f, randomValue.y);
        //        // 목적지를 지정한다.
        //        SendMessage("SetDestination", destinationPosition);
        //    }
        //}
        //else
        //{
        //    // 목적지에 도착한다.
        //    if (characterMove.Arrived())
        //    {
        //        // 대기 상태로 전환한다.
        //        waitTime = Random.Range(waitBaseTime, waitBaseTime * 2.0f);
        //    }
        //    // 타겟을 발견하면 추적한다.
        //    if (attackTarget)
        //    {
        //        ChangeState(State.Chasing);
        //    }
        //}
    }