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초단위로 끈켜서
이제 내일은 저 타겟중 거리가 제일 짧은 타겟을 노리게하는것을하려한다.
반응형
'개인프로젝트 3D RPG 개발일지' 카테고리의 다른 글
12.(유니티포폴) 몬스터 피격 구현 (0) | 2022.06.28 |
---|---|
11.(유니티포폴)캐릭터구현 (1) | 2022.06.27 |
9. (유니티포폴) 메인신구현 (0) | 2022.06.25 |
8. (유니티포폴) 캐릭터 구현 (0) | 2022.06.23 |
7. (유니티포폴) 메인신 구현 (0) | 2022.06.21 |