예제 #1
0
    public override void Think(CharacterThinker thinker)
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        playerMovement.movement = new Vector2(h, v);

        playerMovement.direction = GetTarget(thinker);

        playerAttack.direction = GetTarget(thinker);

        //playerMovement.direction = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }
예제 #2
0
    public Vector2 GetTarget(CharacterThinker thinker)
    {
        Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(thinker.transform.position, searchRadius, LayerMask.GetMask("Enemy"));

        List <Collider2D> collider2dList = new List <Collider2D>();

        for (int i = 0; i < collider2Ds.Length; i++)
        {
            // Physics2D.Raycast()
            RaycastHit2D hit = Physics2D.Raycast(thinker.transform.position, (collider2Ds[i].transform.position - thinker.transform.position).normalized, searchRadius, LayerMask.GetMask("Environment"));
            if (!hit.collider)
            {
                collider2dList.Add(collider2Ds[i]);
            }
        }

        if (collider2dList.Count <= 0)
        {
            return(playerMovement.movement.normalized);
        }
        else
        {
            Vector3 target   = collider2dList[0].transform.position;
            float   distance = Vector3.Distance(thinker.transform.position, target);

            for (int i = 1; i < collider2dList.Count; i++)
            {
                if (Vector3.Distance(thinker.transform.position, collider2dList[i].transform.position) < distance)
                {
                    target = collider2dList[i].transform.position;
                }
            }

            return((target - thinker.transform.position).normalized);
        }
    }
예제 #3
0
 public virtual void Initialize(CharacterThinker thinker)
 {
 }
예제 #4
0
 public override void Initialize(CharacterThinker thinker)
 {
     playerMovement = thinker.GetComponent <PlayerMovement>();
     playerAttack   = thinker.GetComponent <PlayerAttack>();
 }
예제 #5
0
 public abstract void Think(CharacterThinker thinker);