전략게시판

전략게시판 [스튜디오]
텔레포트 만들기
2020.09.30 18:55 조회 : 285
Lv. 427님들밥먹고히죠 빌런 작성자 게시물 더보기
플레이어 닉네임으로 그사람 위치로 텔레포트하는 기능을 옛날부터 생각해봤음
그러다 문득 카 슨 온라인에서 객체도 다른 언어 객체처럼
독립적이고 동적으로 객체의 내용이 지속적으로 바뀌는게 반영이 되는건지 궁금해서 확인한번 해봄



버튼 두개만듬
버튼1을 눌렀을때 버튼을 누른플레이어 위치랑
해당 플레이어 객체를 arr이란 배열에 저장함

그리고 버튼2를 눌렀을땐 버튼을 누른 플레이어 객채가 아니라
버튼1을 눌렀을때 arr에 저장했던 플레이어 객체를 가져와서 그 위치를 출력하는 내용






이런 상태일때 내가 예상한 결과는 
버튼1을 눌렀을때의 위치(-2,-3,1)가 출력되고
그다음 버튼2를 눌렀을때에도 버튼1을 눌렀을때의
좌표가 그대로 출력될거라고 예상했었음




근데 실제 출력결과가 다름
2번째 버튼을 눌렀을때 분명 첫번째 버튼에서 저장했던
플레이어의 객체를 가져온건데 2번째 버튼을 누른 위치가 출력됨
이 결과로 플레이어 객체가 각 플레이어의 고유한 객체이고
플레이어의 상태에 따라 내용도 동적으로 계속 바뀐다는걸 확인함

이때 생각난 아이디어가 
방안 플레이어들 객체를 하나의 배열에 담아두고
ui에서 특정 플레이어 닉네임을 보내면 그 플레이어 닉네임을
배열에서 찾아내면 해당 닉네임의 플레이어의 위치를 알수있지 않나?
라고 생각해봤음
실제 처음의 버튼 예시처럼 배열에 담긴 플레이어 객체는 계속 동적으로 내용이 바뀌는거라
플레이어가 어디에 있든간에 그 플레이어 객체만 있으면 위치를 알아낼수있음
그러면 ** 간단하게 채팅으로 플레이어 닉네임을 치면
그 닉네임을 서버로 전송해서 배열에서 찾으면 되지 않을까 하고 시도해봄





근데 그게 안됨 ui signal은 숫자만 가능함
그러면 다시 생각을 바꿔서 플레이어 닉네임을 입력하면 
그사람의 index를 서버로 보내면 가능하지 않을까 라는 생각을해봄
근데 그러려면 먼저 클라이언트 쪽에서 현재 방안 플레이어들 목록이 필요했음
뭔소리냐면

현재 방안에

[로즈,소냐,크헌]

이렇게 셋이 있을때
서버에선 하나의 배열에 저렇게 세명의 정보를 담아두고있고
각각의 클라이언트에서도 

-로즈 
[로즈,소냐,크헌]

-소냐 
[로즈,소냐,크헌]

-크헌 
[로즈,소냐,크헌]

이런식으로 방안 모든 플레이어의 정보를 가지고 있어야

소냐 입장에서 로즈의 위치를 알고싶다
그러면 소냐 입장에서 채팅을 치면 ui에서 바로(클라이언트에서)
로즈의 인덱스(1번)을 찾고 그 번호를 서버로 보내면 
서버에서도 1번 플레이어를 찾을수있음






그러면 이번엔 서버에있는 플레이어들 목록을
어떻게 클라이언트로 전달해야하나?
플레이어가 접속을 하면 그 플레이어 닉네임과 인덱스를 같이 클라이언트로 
보내면 될꺼 같아서 시도한번 해봄



이것도 안됨 플레이어한테 신호보내는건데 이것도 숫자만 가능함
뭔 되는게 하나도없노;


마지막 방법으로 유일하게 문자열 값을 전달할수있는데
싱크밸류를 사용하기로함



싱크밸류에 플레이어 닉네임이랑 인덱스를 그냥
문자열로 붙여서 클라에 싱크벨류로 전달하면
클라에선 문자열을 split으로 나눠서 배열에다 다시 저장하면 된다



















왠만한 언어 다 있는 split 이 루아에는 없다
js하다가 루아 하니까 ** 불편한데 이런 기본적인거 조차 없다
진심 개빡침
그래서 그냥 인터넷에 다른 사람이 만든 split 함수 복사해서 가져다씀





그니까 대충 요약하자면


서버에서 누군가 접속할때마다 배열에다
새로들어온 사람을 추가하고
방안 플레이어를 담은 배열을 플레이어 닉네임+인덱스번호로
하나의 문자열로 바꿈

'로즈 1,소냐 2,크헌 3'

이 문자열을 클라이언트로 전달하면
클라이언트에선 이걸 split으로 나눠서

로즈 1 소냐 2 크헌 3

이렇게 된걸
또다시 split으로 나누고
순서대로 배열에

(클라이언트쪽)arr[1]=로즈
(클라이언트쪽)arr[2]=소냐

이런식으로 클라이언트 배열에다 저장을 해둠
그리고 마지막으로 채팅으로 누군가의 닉네임을 치면
arr에서 닉네임을 찾고 그 닉네임의 인덱스 번호를 UI.Signal()로 서버에 전송함
최종적으로 서버에서 신호를 받으면
서버에 저장되있던 arr에서 해당 전달받은 인덱스에 접근하면
채팅으로 입력한 닉네임인 플레이어의 객체가 나오는거고 거기에서 position으로 그 플레이어의
위치를 알수가있음



추천 : 3
댓글을 남기시려면 로그인 해주세요
댓글 : 1
  • 뭔소린진 이해가 안가지만 카스 열심히 해주세요 Lv. 1043Asault 2020.09.30