• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

강사님 타겟팅설정에 관하여 질문좀하겠습니다

21.06.23 02:32 작성 조회수 38

0

삭제된 글입니다

답변 6

·

답변을 작성해보세요.

1

우선 질문하신 내용을 보니 아직
생각한 것을 자유롭게 구현하지 못하는 단계로 판단됩니다.
그 상태에서는 성능과 부하에 대해 고민할 필요가 전~혀 없습니다.
아직 차가 굴러가지도 않는데, 눈길 미끄러지는 것을 미리 걱정하는 것과 유사합니다.
그러니 일단 무조건 기능 구현에만 신경쓰고
부하는 잊고 생각하시기 바랍니다.
농담이 아니고 아무리 모바일 장치라 해도
CPU의 능력은 상상을 초월하고 초당 1억번의 연산은 우수운 수준이기 때문에
매 프레임마다 5중 for문을 중첩시키는게 아닌 이상 딱히 티도 안 납니다.

강의 프레임워크에서 몬스터 목록을 ObjectManager에서 들고 있습니다.
유니티 Scene에서 GameObject.Find 계열의 함수로 오브젝트를 찾아도 되지만,
ObjectManager에서 Controller를 통해 몬스터를 찾아도 어차피 동일합니다.
(MonsterController는 Component라서 GameObject에 붙어 있으니,
gameObject를 통해 해당 오브젝트도 알 수 있겠죠)

따라서 탭을 누르면, ObjectManager에서 Monster (혹은 대상이 될)
애들을 긁어온 다음에 [거리가 가장 가까우면서도, 바로 이전에 타게팅 하던 애가 아닌]애를 골라주고
그 애를 타게팅으로 인지해주면 됩니다.
PlayerController에서도 _targetId; 와 같은 변수를 둬서 관리해야 서버랑 통신하기 편하겠죠.

여담인데 서버를 붙이는 것은 싱글게임 대비 10배의 노력과 시간이 필요하기에
아직 유니티나 게임 개발에 익숙하지 않다면

당장 서버는 붙이지 않고, 클라로 싱글 게임 만드는 연습을 더 하고
나중에 서버로 쪼개는 것을 개인적으로 추천 드립니다.

1

타게팅에 관한거는 찾아보기 힘들어서 <<
컨텐츠 작업 단계로 넘어오면, 케바케로 워낙 구현이 다르기 때문에
당연히 인터넷 상에 정보는 없는게 당연한게 맞습니다.

GameObject.Find가 느린 것은 맞지만
매 프레임마다 계속 호출하는게 아닌 이상, 어쩌다가 한 번 (ex. 타겟이 바뀔 때) 호출하는 것은
크게 무리가 가는 행동은 아닙니다.

그와는 별도로 타게팅UI라는 것이 대략적으로 이름 근처에  [    ] 요런 표시를 하는 것을 말씀하시는거라면,
(참고로 이전 프로젝트에서 이런 애들을 일괄적으로 네임플레이트 라고 불렀습니다)
hpbar와 마찬가지로 각 오브젝트 머리 위에 미리 UI를 만들어놓고
평소에는 off 처리하다가 타게팅 대상만 on으로 처리한다거나, 하는 식으로 만들면 편합니다.
이전 프로젝트에서는 [ ] 뿐 아니라 길드마크, 호칭 등 다양한 애들을 이렇게 처리했었습니다.

사용자가 몬스터 타게팅을 찍어서 타겟에 변경이 생기는 순간,
기존 몬스터의 UI는 off, 신규 몬스터의 UI는 on으로 켜주면 됩니다.
그리고 GameObject.Find는 Scene에 있는 오브젝트를 찾아주는 것이지만
굳이 그렇게 할 필요 없이, 강의 기준으로 ObjectManager에 MonsterController를 들고 있으니
이를 이용해 빠르게 찾아서 처리를 해도 됩니다.

1

skck9972님의 프로필

skck9972

질문자

2021.06.23

추가로 질문좀하겠습니다 

타겟팅ui가 몬스터를 추적하게하려면 자기가보이고있는 화면에서 몬스터, 다른플레이어를 찾아서 ui가 그몬스터, 다른플레이어를 추적해야하는데 ,

스킬을 클릭했을때  혹은 타겟팅을 눌럿을때 GameObject.find 로 클라에서 몬스터나 플레이어를 추적하게 실시간으로 체킹하면 클라 부하가 많이들지않을까요?

GameObject.find말고 ui가 플레이어,몬스터를 추적하는 다른좋은방법이 있을까요?ㅠ 

타겟팅에관한거는 잘찾아보기힘들어서 염치없지만 질문드립니다 ㅠ

1

타게팅 스킬은 논타게팅 스킬에 비해
훠~~얼씬 쉽고 서버 부담도 적습니다.

타게팅UI 존재를 서버에서 굳이 알 필요는 없고
클라에서만 몬스터를 따라가도록 관리해주면 됩니다.
실제 스킬을 쓸 때 사용할 스킬ID랑 타게팅 대상 몬스터ID를 같이 서버에다 보내주면,
서버에서는
- 해당 몬스터가 존재하는지
- 해당 몬스터가 스킬 범위 내에 있는지
- 플레이어의 스킬 쿨타임이 아닌지, 사용 가능한지
등을 체크한 다음 그냥 그대로 스킬을 몬스터한테 날려주면 끝입니다.


0

skck9972님의 프로필

skck9972

질문자

2021.06.24

답변감사합니다!!  마음만 너무앞선거같네요 열심히 복습하고 노력하겠습니다! 감사합니다!!

0

skck9972님의 프로필

skck9972

질문자

2021.06.24

마지막으로 질문하나만하겠습니다 ㅠㅠ

타겟팅을 구현할때 MyPlayerController 에서 타겟팅함수를만들어서  if (input.getkeydown) 을받아서 tab키를 누를때마다 네임플레이트가 이동 

플레이어 근처에서 타겟들을 잡아준다 즉 tab을누르면 활성화가되면서 가까이에잇는몹하나를 타겟팅을잡고

다시tab를 누르면 다음근처의몹에게 타겟팅이 이동하게 하려고하는데

화면상에 몹이나 플레이어들 id를 List 로 받아놔서 0번인덱스부터 ~x번인덱스까지 채워넣고

tab을 누를때마다(타겟변경) id를 변경하게 하는건가요?? 곰곰히생각해봐도 리스트로 id받아서 다른아이디로넘어가는거밖에 생각이나질 않는데 혹시 다른구현법도있나요? 

만약 리스트로한다면 화면안에 비취는 몹들이 실시간으로바뀌는데 리스트안에 인덱스도 실시간으로바뀔텐데 그부분에대해서도 의문점이있습니다(리스트를 게속 실행해줘도괜찬은지 과부하에).

그리고 강사님께서 강의 기준으로 ObjectManager에 MonsterController를 들고 있으니

이를 이용해 빠르게 찾아서 처리를 해도 됩니다. 이렇게 답변주셨는데 이부분이 잘이해가가질않습니다 ㅠ

MonsterController부분이 몬스터 생성(add)되는부분 그부분을말씀하시는건가요? 그게맞다면 그다음은 어떻게진행되는지 마지막으로 질문드려봅니다 ..