[유니티] 네트워크 The Basics of Unity 5 Networking



네트워크 프로그래밍 난생처음 맛보기..

유투브에서 30분 분량의 튜토리얼을 보고 그대로 따라 해보긴 하는데 실제로는 기초 지식이 필요할것 같다 




The Basics of Unity 5 Networking


https://www.youtube.com/watch?v=JlKf0h0K5PU


Import Asset > CrossPlatformInput

drive.cs 작성. pika 오브젝트에 스크립트 add


오브젝트 Add component > Network > network identity

local player authority 체크

add > network > network transfer

transform sync mode : sync transform

Create Empty  > 이름 NetworkManager

여기에 Add > network>network manager

Add>network>network manager HUD


오브젝트를 프리팹으로 만들어놓고 비활성화

NetworkManager 오브젝트 > Spawn Info > Player Prefab 칸에 pika 프리팹을 드래그


BUILD할때 FULLSCREEN해제

하나는 호스트 접속. 하나는 클라이언트 접속해서 방향키 테스트 해보기

(이때 스폰되는 좌표가 0,0,0이어서 카메라뷰에 안들어오는 바람에 처음엔 오류로 착각했음


그리고 둘이 같은 키보드 인풋을 받기 떄문에 동시에 움직이는 문제가 발생한다

pika 프리팹에서 Drive 스크립트 비활성화

그리고 새로운 스크립트 만들기 > 이름 SetupLocalPlayer



이 코드를 pika 프리팹에 드래그앤드랍하고서 플레이해보면 스폰된 clone 오브젝트 클릭해보면 아까 비활성화했던 drive 스크립트가 자동으로 활성화됨.

빌드해서 호스트+클라이언트 테스트해보면 이제 따로 움직임


프리팹에있던 pika를 다시 씬으로 꺼내서 child에 3d Text꺼내서 Player 입력 


이제 회전을 해도 같은 방향으로 보도록 수정해야함

새 스크립트 faceCamera.cs 만들어서 카메라 방향으로 rotate되도록 코드 작성


name 차일드 오브젝트에 이 코드 붙여줌


플레이어 이름 입력받기

SetupLocalPlayer열어서 OnGUI와 Update에 키보드 인풋으로 이름 바꾸는 코드 작성

//OnGui()를 OnGUI()로. 대소문자 유의



SetupLocalPlayer  다시 열어서 여러개의 이름 받을수있도록 하기 

[SyncVar] 추가해주고 public으로 변수. pname이 바뀌면 서버에서 모든 클라이언트에게 이 변수를 동기화하라고 하는 one-way direction.

저장하고 나오면 SetupLocalPlayer컴포넌트에 Pname player SyncVar가 생김



그다음 현재 구현된 GUI는 매 업데이트마다 텍스트를 보내는 형식이라 비효율적이므로 버튼 누르면 바뀌도록 작성 


버튼 + [Command]  

CmdChangeName(pname); 으로 클라이언트로부터 서버에 텍스트 보냄 

이 [SyncVar]와 [Command]관계를 이용해 게임에서 응용 가능 


1. 첫번째 테스트 : local host로 2명의 유저 접속


 유니티에디터에서 맥 app으로 빌드 (이때 카메라 뷰를 살짝 다르게 해줘봤음) -> 유니티에디터에서 게임 플레이 -> 아까 빌드한 맥 app 재생 -> 에디터의 게임뷰에서 LAN Host 실행 -> 맥 app 에서는 localhost로 LAN client 실행 하고나면 맨 첫 이미지처럼 두 캐릭터가 나타나며, 초기 위치는 동일





160809 추가


2. 두번째 테스트. localhost가 아닌, usb로 연결된 스마트폰과 맥을 unity remote로 연동



우선 unity remote (https://docs.unity3d.com/Manual/UnityRemote4.html) 를 안드로이드폰 (테스트는 nexus 7으로 했음) 에 설치하고 개발자 설정에 가서 usb 디버깅 가능하게 체크 -> 맥에는 안드로이드 빌드 환경이 되어있어야 함 (android sdk와 java sdk) -> 유니티 옵션에서 안드로이드 sdk 경로 지정해줌. 혹은 안드로이드로 빌드 설정하면 sdk 경로 지정하라고 뜨기도 함. -> 이때 identifier 이름 제대로 지정되어있나 다시 확인잘해보고 -> 안드로이드에서 unity remote 켜놓고 맥에서 build & run 하면 폰화면에 실행됨!


맥에서 LAN Host + 안드로이드에서 Client 옆칸에 맥 ip주소 입력

안드로이드에서 LAN Host + 안드로이드에서 폰 ip 주소 입력.

둘이 usb 연결되어있어서 같은 localhost로 될줄 알았는데 안되는거 같다.


3. 세번째 테스트 : 안드로이드용 apk로 설치하여 외부 접속


맥은 안드로이드 폴더에 접속이 바로 안되서 android file transfer(https://www.android.com/filetransfer/)를 깔면 된다는데 이유는 모르겠으나 안되서 인터넷으로 apk 파일 업로드 (이때 확인되지 않은 외부 앱 사용용가능하도록 안드로이드 보안 설정 바꾸어주어야 함) 다운로드하여 설치 .


2번처럼 잘 됨 :) 


4. 네번째 테스트 : 웹 브라우저


PC <> Mac <> web 다 됨



(여기서부터 과정은 암유발..지저분한 링크들..)


1) 유니티 에디터에서 웹플레이어 버젼 빌드 (튜토리얼  https://www.youtube.com/watch?v=8u06DdPy7ec

이때 switch platform 선택. 폴더 지정해주면 html 파일과 unity 파일 두개가 생긴다.


2) 이제 이 두 파일을 웹에 올려야 하는데.. 


일단 크롬은 유니티 웹플레이어가 지원이 안되서 사파리, 파이어폭스, 익스플로러로 열어야 함. 그리고 모바일 브라우저도 안됨. 


2-1) 로컬에서 열기 (내컴퓨터)


유니티 웹플레이어가 깔려 있어야 하고 ( http://unity3d.com/kr/webplayer)

실행하려면 자바 보안 설정 변경해야함 : 윈도우 시작메뉴 -> 자바구성 실행 -> 예외사이트에 http://webplayer.unity3d.com 추가

https://www.java.com/ko/download/faq/exception_sitelist.xml

맥, 윈도우 둘다 로컬에서 열어서 호스트 ip만

입력하면 잘 연결됨 


2-2) 드랍박스에서 열기 


http://answers.unity3d.com/questions/954694/is-it-still-possible-to-host-web-player-builds-thr.html

맥과 윈도우 둘다 잘 안됨. pro 계정으로 업그레이드 해야 호스트 기능이 사용 가능한듯?


2-3)  구글드라이브에서 열기 


https://www.youtube.com/watch?v=8u06DdPy7ec 이 예전 영상에서는 구글드라이브에서 바로 호스팅 주소를 따올수있었는데 ui가 바뀌면서  http://answers.unity3d.com/questions/937188/unity-web-player-on-google-drive-not-loading.html http://kkangeva.tistory.com/24  이 게시물처럼 해당 파일 id를 따서 주소를 고쳐서 사용해야 한다. 이때 한참 애를 먹었던 부분이 html 파일 주소 아이디로 했더니 web player는 뜨는데 로딩이 안되는 현상. 결국 폴더 id로 새주소 만든 다음에  /파일이름.html  이렇게 바꾸어줘야 잘됨.

어쨌든 구글도 구글도 2016년 8월 31일 까지만 지원하고 그 이후로는 안된다고하니 어서 버려야겠다


2-4. 개인 호스팅 


결국 내 홈페이지에 ftp 로 올려서 하니까 진짜 2초 만에 잘된다. 으 날린 네시간이 아까워.

사실 ftp 도 하도 오랜만에 써서 아이디 비번도 까먹고 맥 ftp 앱 윈도우 ftp 앱 뭔가 둘다 잘 안되고 새로 받은 filezilla만 잘되네. 이유는 모르겠다. 



모두 모여라





저작자 표시 비영리 변경 금지
신고

[유니티] 엑셀 파일을 XML로 변환하는 사이트 MR.Data Converter





http://shancarter.github.io/mr-data-converter/

엑셀 파일에서 원하는 셀들을 선택해서 사이트 상단에 붙여넣으면 아래쪽에 원하는 포맷으로 바뀌고 텍스트를 복사하여

Xml 포맷을 작성할수있는 텍스트 에디터로 붙여넣기해서 저장하면 된다.



일단은 그냥 깔려있던 Xcode로 하긴 했는데 저장이 수월하지 않다. 

유니티 공부가 좀 끝나면 코딩용 텍스트 에디터를 뭘로쓸지 탐색해봐야할듯. (UTF-8형식으로 저장하면 된다고 함)





저작자 표시 비영리 변경 금지
신고

[유니티] 유니티5 액션 RPG 전투 입문 강좌 수강



아래 두 강좌 수강을 끝내고 


[유니티] 초보자를 위한 유니티 C# 스크립트 강좌 수강


[유니티] 유니티 4 기초테크닉 80


ibatstudio의 액션 RPG 게임 강좌 출시 기념으로 50프로 할인중 (7월 21일까지) 이라 냉큼 구매해서 듣고 있다. 

게임을 만들어야하는건 아니지만 이 강좌에서 다루는 주요 모듈들이 내가 만들어야하는 프로토타이핑에 요긴하게 쓰일것 같다.




항상 초보자도 이해하기 쉽도록 풀어서 설명해주시고

 작은 부분도 놓치지않고 반복적으로 섬세하게 짚고 넘어가주시는게 감사하다.

아쉬운 점이라면 교안이나 예제 코드가 따로 없어서 

강좌들으면서 일일히 다 중요 내용은 필기를 따로 해놓아야 하고, 

오타나 작은 실수 때문에 문제가 생겼을때 뭐가 잘못됐는지 찾으려면 영상을 일일히 열어서 다시 체크해야한다는 점때문에

하나하나 넘어갈때마다 시간이 엄청 오래걸리면서도

그 때문에 좀더 꼼꼼하게 공부하게 된다는 엄청난 장점이 있다(?)

역시 어렵게 얻을수록 살과 피가 되는건가.








  • Module #1 마우스 클릭 이동 배우기

    마우스 클릭 이동을 위해서는 화면 좌표를 월드 좌표로 변환하는 방법을 배우셔야 합니다. 우리가 3D 공간에서 캐릭터를 이동시키려고 마우스 클릭을 할 때, 실제로는 2차원 평면 화면을 클릭하고 있는 것입니다. 여기에서는 레이캐스트를 이용하여 2차원 좌표를 3차원 좌표로 변환하는 방법을 상세하게 알려 드립니다.

    m1

    Module #2 유한 상태 기계(FSM) 만들기

    복잡한 게임을 만들기 위해서는 우리가 캐릭터나 몬스터의 행동에 대해 일일이 조건문을 이용하여 조건 판단을 하는 식으로 작업할 수 없습니다. 대신 해당 캐릭터의 상태를 정의하고, 각 상태에서 어떤 행동을 하며, 각각의 상태는 어떤 조건에 의해 변하게 되는가를 지정해 주면 됩니다. 이를 위해 유한 상태 기계(FSM)의 개념을 상세하게 알려 드리고, 실제 FSM을 만들어 캐릭터와 몬스터의 행동을 제어해 보겠습니다.

    m2

    Module #3 부드러운 회전과 부드러운 이동

    이제 마우스 클릭 지점으로 캐릭터를 이동시켜야 합니다. 이 때 자연스럽게 회전하고 이동하기 위해서는 어떤 로테이션 값을 가져야 하는 지를 계산하는 것 뿐 아니라, 매 프레임당 얼마나 조금씩 회전해야 자연스럽게 보일 지를 계산해 내야 합니다. 다행히도 유니티는 이런 과정을 아주 쉽게 처리할 수 있는 명령어들을 제공하고 있습니다.

    m3

  • Module #4 자동 공격하는 몬스터 만들기

    몬스터 역시 FSM을 구현하여, 자동으로 공격과 추적 등을 판단하고 수행할 수 있도록 해야 합니다. 여기에서는 몬스터가 플레이어와의 거리를 체크하여, 이에 따라 스스로 추적과 공격, 그리고 재 추적 등을 행할 수 있도록 하는 방법을 상세하게 다루게 됩니다. 또한 정해진 시간 차를 두고 자동으로 공격을 반복하게 하는 기법 등도 상세히 알려 드립니다.

    m4

    Module #5 캐릭터 파라미터 관리하기

    플레이어와 몬스터가 공방을 벌일 때, 내부적으로는 다양한 수치 계산이 이루어집니다. 이를 위해 플레이어와 몬스터가 공통적으로 사용하는 파라미터들을 담은 "캐릭터 파라미터" 부모 클래스를 만들고, 이를 몬스터와 플레이어 캐릭터 파라미터 클래스들이 각각 상속하도록 해 보겠습니다. 또한 가상함수와 오버라이드 함수를 사용하는 방법도 상세히 알려 드립니다.

    m5

    Module #6 이벤트(Event) 이해하기

    게임을 하는 동안에는 다양한 이벤트들이 일어납니다. 이 때 특정한 이벤트가 발생하면, 그에 따라 미리 등록해 둔 여러 개의 함수들이 동시에 실행되도록 하는 식으로 많은 게임 오브젝트들이 특정한 사건에 대해 각자 다른 방식으로 반응하도록 할 수 있습니다. 여기에서는유니티 이벤트를 사용하는 방법과 함께, 캐릭터 애니메이션의 특정 프레임에 이벤트 함수를 등록하는 방법도 배우게 됩니다.

    m6

    Module #7 UI 만들기

    게임에 등장하는 많은 몬스터들은 각자 자신의 잔여 HP를 표시하기 위한 게이지 바를 가지고 있습니다. 여기에서는 유니티 UI를 이용하여 이들 게이지 바들이 몬스터 머리 위를 자연스럽게 따라 다니도록 하는 방법을 알려 드립니다. 또한 몬스터의 HP 값이 줄어들 때마다 게이지 바도 자동으로 줄어들게 하는 법과 플레이어 캐릭터의 헤드 업 디스플레이(HUD) 만드는 법도 다루어 보겠습니다.

    m7

    Module #8 리스폰 영역 만들기

    필드 곳곳에 특정한 종류의 몬스터들이 자동으로 생성되도록 하는 '리스폰 영역' 만드는 법을 다룹니다. 리스폰 영역 마다 서로 다른 종류의 몬스터들을 등록하고, 이들 몬스터들이 플레이어의 접근시 자동으로 생성되도록 해 보겠습니다. 또한, 전투 중 모든 몬스터들이 사망하면, 일정 시간 후에 죽은 몬스터들을 재활용하여 다시 리스폰 시키는 방법도 다루어 봅니다.

    m8

    Module #9 엑셀 파라미터 불러 오기

    게임 속에 등장하는 수 많은 종류의 몬스터들의 파라미터 값들을 유니티 에디터에서 일일이 입력하는 것은 비효율적인 일입니다. 여기에서는 게임 기획자들이 엑셀로 작업한 몬스터 파라미터 데이터를 XML 파일로 변환한 뒤, XML 파싱을 통해 실제 게임 몬스터들에게 자동으로 적용하는 방법을 다루어 보겠습니다.

    m9

     



저작자 표시 비영리 변경 금지
신고

[Unity] Delegate 와 Event 설명 모음


아무리 봐도 헷갈리는 Unity3d C#  이벤트 event 와 델리게이트 delegate 사용 참고 페이지들


[유니티] 터치이벤트 처리하기

http://www.bsidesoft.com/?p=164


delegate, action, event 활용 관련 

http://hyunity3d.tistory.com/522


유니티 event delegate 예제

http://hyunity3d.tistory.com/528


[C#] delegate과 event의 차이점 

http://www.gpgstudy.com/forum/viewtopic.php?topic=18988


Delegate( 델리게이트 ) 는 어떨때 쓰나요?

http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=36068


C# 강좌 19편. 델리게이트와 이벤트

http://blog.eairship.kr/151


[Unity, C#] EventHandler를 이용해서 Event Driven Programming 하기

http://growingdever.tistory.com/215


<C# 강의> 5장. 델리게이트 (Delegate) - 콜백, 체인

http://mrw0119.tistory.com/19


<C# 강의> 7장. 이벤트 (Event)

http://mrw0119.tistory.com/21


C# event (이벤트) 를 알아보겠습니다.

http://aloloever.blogspot.kr/2015/01/c-event.html


유니티 - 탄막 슈팅 게임을 만들자(2), 이벤트(Event)와 Delegate 의 사용

http://linecode.tistory.com/12


UnityEvent, UnityAction and Delegate

http://rapapa.net/?p=2936


대리자(delegate)

http://penji.tistory.com/160


C#기초문법 <6> 델리게이트, 이벤트

http://blog.daum.net/_blog/BlogTypeView.do?blogid=0rMHK&articleno=104&categoryId=9&regdt=20151227150851


C# delegate 쉽게 이해하기

http://www.csharpstudy.com/CSharp/CSharp-delegate-concept.aspx


c# lambda expression

http://www.csharpstudy.com/CSharp/CSharp-lambda.aspx

저작자 표시 비영리 변경 금지
신고

[Open tutorials] data structure - Linked List, Visualgo

자료구조와 알고리즘의 기초를 시각화해서 이해하기 쉽게 도와주는 학습 사이트.

http://visualgo.net/


원하는 구조를 선택하고, 간단한 데이터를 몇개 입력하면 결과가 시각화되서 화면에 반영되는데, 

하단의 의사코드를 한줄씩 옮겨가면서 무슨 일이 일어난건지 단계별로 확인해볼수 있다. 

학습하고나서 연습문제를 푸는 기능도 있음


자료구조 수업에서 Linked List 단원에서 visualgo를 사용해서 알게되었다. (https://opentutorials.org/module/1335/8821)

이것이 시각화의 힘.. 

노드, 버텍스 이런 개념 자체를 오늘 난생 처음 접하고 있는데 

좋은 수업과 컨텐츠로 시작하게 되서 행운이라는 생각이 들었다.





저작자 표시 비영리 변경 금지
신고

[Open tutorials] data structure 자료구조 수강



https://opentutorials.org/module/1335


프로세싱에서 array에서 자꾸 에러나서 ArrayList로 바꾸는게 나은가 싶은 생각도 들고

Unity를 위한 C# 강의 듣다가 다시 List에서 막히기도하고

종인이가 방학되면 꼭 들으라고 여러번 강조했던 open tutorial의 자료구조 강의 수강 시작.

다 들으려면 순수 강의시간만 7-8시간 걸린다 ㄷ ㄷ 


정리정돈? 구조화? 이런건 진짜 태어날때부터 안되는 사람이지만..

어려운건 열번쯤 반복하면 언젠가 알게되겠지 뭐... 




<다음에 다시 챙겨볼 다른 강좌>

배열

https://opentutorials.org/course/1223/5373


Collections Framework

https://opentutorials.org/course/1223/6446






- 첫 강부터 왜이렇게 짠하니...



저작자 표시 비영리 변경 금지
신고

[유니티] 초보자를 위한 유니티 C# 스크립트 강좌 수강






거의 일년전에 배우다만 유니티에 다시 도전. ([지난글] : 유니티4 기초테크닉 80 + Roll a Ball + zombie run)

지난주부터 유니티4 기초테크닉 수업을 첨부터 다시 듣고, 3d 캠퍼스 프로젝트를 살짝 업그레이드했다.

ibatstudio 강좌가 꽤 맘에 들어서 스크립트 강좌도 55불에 결제했다.

(유투브에도 강좌가 꽤 있긴 하지만...돈 들이면 아까워서라도 더 열심히 하겠지.......)

한번 결제해놓으면 동영상 파일을 다운받아서 무제한으로 들을수 있게 되어있다.

단지 아쉬운 건 지난 epub 버젼과 달리 텍스트 버젼이 없어서 

추후에 급히 배웠던 내용을 찾아보기가 어려울 것 같음

에버노트에 정리하면서 들어야할듯


http://www.ibatstudio.com/csharp/

자바랑 그나마 조금 비슷해서 다행이다.









저작자 표시 비영리 변경 금지
신고

[유니티] 유니티4 기초테크닉 80 + Roll a Ball + zombie run


150819


1. <유니티 4 기초테크닉 80> (링크) 

교재 및 영상으로 우선 기초 계속 다지기, 기초 개념이나 팁들을 잘 끊어서 설명해줘서 좋다

내일 스터디 모임 전까지 Roll a ball 튜토리얼 다해보고 가야하는데 그 젤 쉽다는 튜토리얼도 나한테는 어려워서 최대한 테크닉 진도는 서둘러 나가둘수록 좋은것 같다 









잘 이해 안되는 (안 익숙한) 부분, empty object가 스크립트랑 연결된다는건 어떤 의미인거지.. 

그리고 스크립트 쓰고서 변수 필드에 드래그앤 드랍해서 오브젝트를 껴넣는데 그것도 내가 뭐하고있는건지 알수없지만 일단 시키니까 따라해본다..  자꾸 반복되면 왠지 감으로 알게될것만 같은 느낌..(ㅠㅠ)



요 교재 진도가 완료가 되고 나면 새로나온 5 강좌도 구매해서 복습할겸 프로젝트랑 병행해서 공부할 예정 http://www.ibatstudio.com/unity5/





저자가 올려두신 52분짜리 UNITY를 위한 C# 동영상 강좌도 http://meeis.tistory.com/65 








2. Roll a Ball  (https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial)



유니티에서 제공하는 튜토리얼에는 7개의 프로젝트와  Interface & Essentials에 대한 자잘한 영상들이 있다. 프로젝트중에 젤 쉬운 Roll a Ball 부터 시작

위의 책에 비해 엄청난 속도로 막 지나가버려서 계속 Pause를 눌러가며 힘겹게 따라함 ㅠ 

인터페이스 쪽은 그나마 책에서 따라하고있어서 그나마 익숙해지고 있는데 스크립트는 따라서 타이핑해봤자 아직 전혀 이해가 안되고 있다...

그대로 따라하기만 하는데도 자꾸 오류가 나는지......(알고보면 원인은 아주 사소한 오타나 체크박스 때문이긴하지만)




오브젝트가 중력이나 충돌 등의 물리적성질을 가질수있도록 세팅하고 오브젝트들의 관계를 유기적으로 설정해줄수있는게 유니티의 재미난점인것 같다


운동이나 각도를 다루는데에서 점차 수학이 등장하기 시작하니 멘붕.. 

영어+코딩+3D+수학까지 4중고



어찌어찌해서 게임은 완성 중간에 공을 키보드로 굴려서 노란색을 다 없애면 게임이 끝난다


유니티의 장점은  프로세싱이나 MAXMSP보다는 다양한 환경으로의 빌드가 용이하다는 것, 맥에서는 APP파일, 윈도우에서는 EXE파일로 재생가능하다. 

언능 배워서 웹이나 모바일을 위한 무언가도 만들어보아야지




3. Zombie Run





목요일 오전 스터디 모임, 반선배의 좀비 튜토리얼 

에셋스토어에서 무료로 다운받은 좀비 오브젝트로 간단한 게임을 만들어 보았다

1인칭 시점 카메라뷰의 플레이어가 키보드로 움직이면 좀비떼들이 쫓아오고 + 가까워질수록 좀비의 괴성이 커지도록

여기서도 등장하는 벡터. 와 무슨말인지 나만 몰라서 정석을 다시 꺼내어 울면서 공부를 따로 좀 해야할것 같으다..




좀비의 회전 각도 코드가 아직 약간 완성이 덜되어서 어느 위치에서는 좀 이상하게 회전되긴하지만..  선배님이 고쳐주시겠지 난 아직 저 코드의 의미도 다 모름 흑흑

튜토리얼 후 각자 앞으로 할 프로젝트에 대한 간단한 프로포절, 

선배들은 이미 진행중인 연구 주제에 맞게 준비들을 해왔는데 주영이랑 나랑은 아직 유니티로 뭘 할수있는건지 잘 모르기도 하고 진행중인 연구가 없다보니 일주일정도 더 생각해보기로 했다








저작자 표시 비영리 변경 금지
신고