728x90

오늘은 캐릭터 ai 를 구현해보려고한다

 

일단은 나는 캐릭터 앞 부채꼴 모양으로 그 안에 있는 적을 타겟할려고한다.

 

 

일단 먼저 생각해야할거

 

프로그래밍 진행순서

 

부채꼴 모양에 들어있는 몬스터들을 List 형태로 보관한다 

그리고 나랑 몬스터 들사이에 거리를 재서 최소한에 거리에있는 몬스터를 target으로 해주고 그 몬스터에 정보를 얻어서 몬스터안에있는 settarget(밑에 빨간색동그라미든 아니면  ( ) 몬스터한테 가로를 쳐주든 이미지를 넣을예정) 오브젝트를 켜준다 . 화살을 쐇을때 타겟이된 몬스터에 무조건 맞는다.

 

그러면 일단 부채꼴 부터 진행을 해야한다 .

 

 public float angleRange = 120f;
 public float distance = 15f;
 
 private void OnDrawGizmos()
    {
        Handles.color = Color.blue;
        Handles.DrawSolidArc(transform.position, Vector3.up, transform.forward, angleRange / 2, distance);
        Handles.DrawSolidArc(transform.position, Vector3.up, transform.forward, -angleRange / 2, distance);

    }

캐릭터에 이코드를 추가하게되면 

 

부채꼴이 그려지는데 

OnDrawGizmos 는 신에서만 그려지기때문에 확인할때좋다.

 

 

 

 

 

 

이런식으로 부채꼴 모양이 생기게되고 

 

이제 그럼 큐브를 몬스터 라고생각하고 큐브를 몇개만든뒤에 몬스터 gamobject list 를 만들어서 그안에 넣어주겠다.

 

 

 

  void SetTartget()
    {
        Targets.Clear(); //배열에 계속쌓이는걸 방지하려고 클리어 하고 받기 
       targetIndistance = Physics.OverlapSphere(transform.position, distance, targetmask); // 내위치 중점, distance=사거리 구체반경,target마스크찾기위한거

        for (int i = 0;i<targetIndistance.Length; i++) //내사거리안에 몬스터만큼 돌려주려고 한거 
        {
            Transform target = targetIndistance[i].transform; //몬스터위치 
            Vector3 dirTarget = (target.position-transform.position).normalized; //몬스터위치 - 내포지션 normalized
            if(Vector3.Angle(transform.forward,dirTarget)<angleRange/2) // 몬스터위치가 내가 정해놓은 부채꼴안에 내적하는지 
            {
                float dstTarget=Vector3.Distance(transform.position, target.position);
                if(!Physics.Raycast(transform.position,dirTarget,distance,etcmask))
                {
                    Targets.Add(target.transform.gameObject);
                 

                }
            }
        }

    }

코드를 추가해준다 

 

 

그러면 이렇게 타겟에 부채꼴 모양으로 타겟이 잡힌다 1초단위로 끈켜서 

 

이제 내일은 저 타겟중 거리가 제일 짧은 타겟을 노리게하는것을하려한다.

 

 

반응형