본문 바로가기

유니티 개발 정보/개념

Transform.TransformDirection Transform.TransformDirection public Vector3 TransformDirection(Vector3 direction); : direction을 로컬 공간에서 월드 공간으로 변형한다.이 명령은 transform의 스케일 혹은 위치에 영향을 받지 않는다. 리턴값인 vector는 direction과 동일한 길이를 가진다.만약 벡터의 방향 보다 위치를 표시해야한다면 Transform.TransformPoint를 사용하라. 유니티에서 3D로 작업을 한다면, 꼭 한번씩은 만나게되는 TransformDirection함수.이해했다가도 다시 보면 햇갈리기 딱 쉬운 함수이기에 이번 기회에 제대로 한번 파헤쳐 보자. 일단 2차원 좌표 공간에서 (1, 1)이 의미하는 것을 생각해보자. 좌표공간 (.. 더보기
Lerp 유니티를 사용할 때 많이들 유니티 공식홈페이지에서 제공하는 API 문서를 참조할 것이다.하지만 모든 함수가 있을지 언정, 문서만 보고 이해가 쉽지 않은 API들이 몇개 있는데오늘은 그중에서 Lerp에 대해서 알아보도록 하자. Lerp는 선형보간(Linear Interpolation)을 나타낸다. 간단히 설명하면점 p1에서 점 p2사이에 있는 점들에 대해서 시간의 변화에 따라서 해당 점들을 예측하는 것을 말한다. 유니티에서 Lerp함수는 보통 3개의 매개변수를 가진다. 1 2 3 4 5 // Example valuesvalue1 = 10;value2 = 20;result = Mathf.Lerp(value1, value2, 0.5f);// result == 15cs 밑에 예제를 통해서, Lerp를 사용한 예.. 더보기
유한 상태 기계(Finite State Machines, FSM) #2 (3/3) 원문보기 1편보기 2편보기(이어서 계속) 클로저 (역자 주 : 클로저에 대해서 처음들어보시는 분은 밑에 내용을 읽기 전에 링크를 통해서 클로저에 대한 대략적인 이해를 하시고 보시면 좀 더 쉽게 내용을 이해하실 수 있습니다.) 자, 우리는 위에서 클로저를 만들기 위해 델리게이트에 인스턴스의 참조를 어떻게 숨기는지를 봤다. 이런 이유로, 델리게이트를 사용할 때, Action이 인스턴스 맴버 혹은 static 맴버를 가리키는지, 이 메소드가 존재하는 클래스가 무엇인지 등을 알 필요가 없다. 단지 알아야 하는 것은 someAction()를 호출했을 때 그저 잘 작동할 것이라는 것이다. 여기 놀라운 소식이 하나있다 : 클로저 내부에서도 다른 변수를 숨길 수 있다! 방법은 익명 함수(anonymous functio.. 더보기
유한 상태 기계(Finite State Machines, FSM) #2 (2/3) 원문보기 1편보기 3편보기 (이어서 계속) * 전편에 약간 누락된 부분이 있어 전편 마지막부분에 추가하였습니다. (13. 12. 2)델리게이트 그럼 이제 델리게이트를 한번 써보자. .NET에는 2개의 일반적인 델리게이트 타입(Func, Action)이 내장되어 있고, 스스로도 정의할 수 있는데, 첫번째 함수를 예로 들어 보자.public delegate void UnityTriggerFunctionDelegate(Collider collider); 이제 트리거 함수를 가리키는 변수를 정의할 수 있다:UnityTriggerFunctionDelegate _triggerFunc;그리고 다음과 같이 델리게이트에 함수를 할당할 것이다. 123456789void Start(){ _triggerFunc = OnTri.. 더보기
유한 상태 기계(Finite State Machines, FSM) #2 (1/3) 원문보기 간단한 switch기반 FSM에서 강력한 힘을 가진 delegate기반 프레임으로 변경하기 두번째 강좌에 온 것을 환영한다. 사실 첫번째 튜토리얼은 꽤 쉬운 편이였다. 이번 강좌에서는 성능이 좋고, 깔끔한 FSM 프레임워크를 만들어 볼 생각이다. 이 튜토리얼은 FSM 프레임워크를 어떻게 만드는지 보여주는데, 분량이 많다고 너무 걱정하지는 마라. 뒷부분에서는 FSM을 사용해서 어떤식으로 게임을 디자인하는지 보여줄 것이다. 이런 상황은 노트북을 살때, 샐러리맨이 다음과 같이 말하는 것과 같다."좋아요, 제가 CPU를 만드는데 사용된 실리콘 동판화 프로세스를 설명해드리죠. 걱정마세요 딱 1시간이면 충분합니다"첫번째 튜토리얼 이후에, 이 튜토리얼은 많이 발전되었다. 대충 느낌을 파악하기 위해서 비디오를.. 더보기
유한 상태 기계(Finite State Machines, FSM) #1 (3/3) 원문은 이곳에서 보실수 있습니다. 내용이 길어 총 3편으로 나눠서 올리겠습니다. (2편에 이어서 계속) 우리의 첫번째 실용적인 유한 상태 기계 enemy에 대해서 더 주의깊게 생각하고, 상태를 정의한 다음, enemy들을 한 번에(at a time) 하나의 상태에 넣어보자. enemy는 다음 중 하나의 상태에 있을 수 있다 : sleeping, following, attacking, being hit, dying. 우리는 실제 다음과 같이 작동하기를 바란다: Part 1/Scene 2우리는 FiniteStateMachine1.cs파일을 만든 다음, 파일안에서 가장 먼저 해야할 일은 상태를 정의하는 열거형을 만드는 것이다: 0102030405060708091011public enum EnemyStates{.. 더보기
유한 상태 기계(Finite State Machines, FSM) #1 (2/3) 원문은 이곳에서 보실수 있습니다. 내용이 길어 총 3편으로 나눠서 올리겠습니다. *번역을 하면서 이해가 잘되지 않은 부분은 원문과 같이 배치하였습니다. (1편에 이어서 계속) 유한 상태 기계의 타입 많은 사람들이 알다시피, 유한 상태 기계를 만드는 것을 도와주는 많은 그래픽 툴이 있다. - 이 튜토리얼은 코드 기반의 FSM에 대한 것이다. 만약 그래픽 툴을 사용하고 싶다면, PlayMaker 또는 그외 경쟁사 제품을 확인해봐라. - 하지만 그래픽 툴을 이용하는 것은 스스로 코드를 작성하는 것보다 훨씬 더 많은 제약이 존재한다. 여기에는 2가지 형태의 코드 기반 FSM이 있다. Discoverable FSM/On Demand FSM 가끔씩, 특별한 목적으로 특정 시간에, 어떤 대상의 상태만 알면 되는 경우.. 더보기
유한 상태 기계(Finite State Machines, FSM) #1 (1/3) 원문은 이곳에서 보실수 있습니다. 내용이 길어 총 3편으로 나눠서 올리겠습니다. 튜토리얼의 첫 부분에서, 우리는 유한 상태 기계를 사용하는 이유를 파헤치고, switch문을 사용하여 이를 구현하는 가장 간단한 방법을 보여줄 것이다. Getting in a State? 당신이 작성하는 모든 프로그램은 상태 기계이다. if문을 작성하는 순간에도, 적어도 2개의 상태중 하나를 만든 것이다. - 코드를 작성할수록, 프로그램에는 더 많은 상태가 들어갈 것이다. switch와 if문의 과도한 사용은, 겉으로 이해하기 힘든 이상한 버그들과 함께, 해결방법의 복잡성은 증가하고 컴포넌트간의 상호작용은 예기치 않은 결과를 초래하면서, 감당할 수 없게 될 것이다. 당신의 프로젝트는 확장하기 어려워 지게 되고, 심지어 개념화.. 더보기
상급 코루틴 개념(Advanced Coroutines) 원문은 이곳에서 보실수 있습니다. 제 능력에 한해서 최대한 쉽게 쓰려고 노력했습니다만 이해가 잘 안되는 부분이 있을 것입니다. 여러분의 잘못이 아니기에 좌절하지 마시고, 이해가 안되시는 부분만 원문을 참고하시는 것도 좋을 것 같습니다. 본문에 나와있는 소스코드를 보면서 읽으시면 조금 더 이해가 쉬울 것입니다. 코루틴이 어떻게 작동하는지 궁금한가? yield 명령문의 뒤에서 도대체 무슨 일이 일어나는가? 한번 알아보자.목적 코루틴이 화면 밖에서는 어떤 일들이 일어나는지 알고 싶다면 반드시 이 글을 읽어야 한다. 만약 당신이 FSM 튜토리얼을 따라하고 있거나, 후에 다시 재시작 가능한 개입 중단 가능한(interruptable) 코루틴을 어떻게 만들 수 있는지에 대한 세부사항을 알고 싶다면 이 튜토리얼은 매.. 더보기
코루틴(Coroutine)++ 목적 만약 코루틴에 대해서 확실하게 모르거나, 원하는 작업을 하고자 할 때 문제가 발생했다면 당신은 반드시 이 튜토리얼을 읽어야 한다. 코루틴은 다음과 같은 특성을 가진다 : 특정 작업을 단계적으로 발생하게 한다. 시간이 흐름에 따라 발생하는 루틴을 작성할 수 있다. 다른 연산이 완료될때까지 기다리는 루틴을 작성할 수 있다. 예를 들어, 컷 씬 시퀀스를 조직하거나 또는 단순히 적이 죽는 애니메이션을 기다린 다음, 재생성을 할 수도 있다. 코루틴은 유니티의 매우 강력한 부분이지만, 종종 초보자들은 코루틴을 이해하는데 많은 어려움을 겪는다. 이 튜토리얼은 당신이 강력하고 융통성있는 코루틴을 파악하고, 그들이 어떻게 작동하는지 이해하는데 도움을 줄 것이다. 만약 단지 몇 초 동안 특정 연산을 지연시키기를 원한.. 더보기
유니티 메모리 관리 - 4(마지막) 늦어서 죄송합니다. 그동안 잠시 다른 일이 생겨서 마지막 부분 업로드가 늦었습니다.해당 글 원문은 http://unitygems.com/memorymanagement/에서 보실수 있습니다.번역중에 이상한 부분은 댓글 남겨주시면 확인 후에 수정하겠습니다.(저도 공부하면서 올리는 거라 미흡한 점이 많이 있습니다. 미흡한 부분이 있더라도 조금만 양해부탁드립니다^^;)Static Variables정적 변수많은 초보자들은 이 간단한 실수를 한다:1234public static int health;void Start(){    health=100;}다른 스크립트에서 우리는 다음과 같은 코드를 발견할 것이다.123456void OnCollisionEnter(Collision other){    if (other.g.. 더보기
유니티 메모리 관리 - 3 원문이 약간 길어 3~4개로 나눠어서 올릴 예정입니다. 해당 글 원문은 http://unitygems.com/memorymanagement/에서 보실수 있습니다.번역중에 이상한 부분은 댓글 남겨주시면 확인 후에 수정하겠습니다. (저도 공부하면서 올리는 거라 미흡한 점이 많이 있습니다. 미흡한 부분이 있더라도 조금만 양해부탁드립니다^^;) Struct vs Class그래서 어떤 상황에서 어느 것을 사용해야 하는가? 클래스를 사용하는 것은 추가적인 변수(참조변수)가 추가 된다는 것을 알았다. 만약 수천 개의 객체를 만든다면, 수천 개의 추가적인 변수를 얻을 것이다. 하지만 구조체는 이들을 생성하지 않는다. 밑의 예제를 보자: 0102030405060708091011121314151617181920212223.. 더보기
유니티 메모리 관리 - 2 원문이 약간 길어 3~4개로 나눠어서 올릴 예정입니다. 해당 글 원문은 http://unitygems.com/memorymanagement/에서 보실수 있습니다.번역중에 이상한 부분은 댓글 남겨주시면 확인 후에 수정하겠습니다. 참조형식과 힙 참조형식 변수는 참조형으로 메모리에 저장된 객체를 말한다. 새로운 클래스 인스턴스를 만들 때,이들의 데이터 위치의 참조변수를 만들뿐만 아니라 데이터도 힙에 저장된다.이 참조는 값형식으로 객체의 주소값을 가지는 변수이다.(참조변수) 클래스의 인스턴스를 만들기 위해서 new 키워드를 사용하는데, 이는 OS에게 객체의 타입에 맞는 메모리 공간과 객체를 초기화 하는데 필요한 코드를 수행하도록 요청한다. 밑에 Dog타입의 객체의 예시를 보자. (역주: 위에서 말한 참조형식 변.. 더보기
유니티 메모리 관리 - 1 원문이 약간 길어 3~4개로 나눠어서 올릴 예정입니다.해당 글 원문은 http://unitygems.com/memorymanagement/에서 보실수 있습니다.번역중에 이상한 부분은 댓글 남겨주시면 확인 후에 수정하겠습니다. 만약 당신의 게임이 실행되고 있는 컴퓨터나 장치의 메모리에서 어떤 일이 일어나는지 궁금했던 적이 있다면 이 글은 당신에게 좀 더 효율적인 게임을 만들고 클래스와함수의 메모리사용을 최적화하는데 도움을 줄 것이다.이번 글에서는메모리 구역값타입과 스택참조타입과 힙구조체와 클래스참조타입을 만드는 것정적 클래스정적 변수정적 함수힙 파편화, 오브젝트 풀링, 가비지 컬렉션이 튜토리얼은 유니티 개발을 위해 C#을 사용하게된 C/C++ 프로그래머에게 특별히 유용하다. C#은 처음에는 혼란과 마법같은.. 더보기
유니티 코딩 규칙 해당 글은 http://unitygems.com/coding-conventions/을 번역한 글입니다.잘못 번역된 부분이 있을 겁니다. 이부분은 댓글에 적어주시면 보는대로 바로 수정하겠습니다. 감사합니다.---------------------------------------------------------------------------------------------------------------------------------How you write code can make it legible and easy to share or impenetrable and a great alternative to cross word puzzles if you like a challenge and need to .. 더보기