수업
-
[유니티] 19강 풀 메모리2[유니티] 기본 2022. 6. 2. 22:24
18강 Start()에 있는 내용을 함수로 만들었다. prefabs를 이용한 방법과 사용하지 않는 방법을 구분해서 함수로 만들었다. Start()함수에서 비활성화된 5개를 만든다. Hierachy에는 보이고, active가 false인 상태니까 Game뷰에서는 보이지 않는 상태다. 즉, 18강에서 말한것 처럼 Hierachy에 미리 위치해 있으니까 사용하고 싶을때 setActive(true)로 부르면 된다. fire()함수에서 Hierachy에 미리 만들어두고 비활성화 상태인 오브젝트를 찾아서 활성화 시키는 로직이다. 미리 만들어둔 개수가 부족할 경우, Hierachy에 개수를 추가한다. Ball.cs에서 Update()함수에서 화면에서 벗어나면 파괴하던것을 비활성화 시키는것으로 변경한다. 실행되는 화면..
-
[유니티] 18강 풀 메모리1[유니티] 기본 2022. 6. 2. 19:18
슈팅 게임에서 총알을 쏘는 장면을 상상해보자. 1. 총알을 만든다. 2. 총알에 방향과 속도를 넣어서 날아가게 한다. 3. 비행 물체와 부딪힌다. (5번으로) 4. (3이 일어나지 않고) 화면에서 벗어난다. 5. 총알을 파괴한다. 런타임중에 1과 5의 과정이 반복적으로 일어나면 부하가 많이 발생하고 속도 저하의 원인이 된다. 그걸 개선하기 위해서, 필요한 총알을 미리 만들어 두고, 필요할때마다 사용하고, 다 사용하면 원위치 시키는 방식이다. 이론적인 부분은 단순하고, 구현은 제각각 편할데로 만들면 된다. 게임에서 풀 메모리가 필수적인 부분이라 다양한 구현 방법을 알아두는게 좋다. 1. 객체 Hero를 만들고, 스크립트 파일(Hero.cs)을 추가한다. 2. 스크립트 파일(Hero.cs)에 방향키를 누르면..
-
[유니티] 17강 함수 간결화 및 호출 시점[유니티] 기본 2022. 5. 31. 01:12
1. Generic 제너릭은 이미 파일 입출력 코드에서 사용했다.(13강, 14강 참고) 앞서 본 코드는 원하는 리턴 타입을 받고 싶을때 사용했고, 이번에는 함수 호출시 임의의 타입을 파라미터로 사용 예다. 2. 델리게이트 C/C++ 함수포인트와 거의 같다. typedef int (*funcDelegate)(int a, int b); // c/c++ delegate int funcDelegate(int a, int b); // c# c/c++에서는 static 함수만 되지만, c#은 모두 허용한다. 신기하다. 그냥 감탄사가 나왔다. 정말 된다!! 지면이 부족해서 안 넣었지만, 다른 객체에 있는 함수도 똑같은 원리로 구동된다. 3. Event C/C++ 함수포인트와 비슷하지만, EventHander가 호출..
-
[유니티] 16강 기타(namespace, 접근제한, 속성, 참조, 추상, 가상)[유니티] 기본 2022. 5. 31. 01:11
1. namespace, using 딱히 특별한게 없는 흔한 코드입니다. CodeNamespace라는 네임스페이스로 감싸고, 그 안에 Code라는 클래스를 만들었습니다. 아래는 CodeNamespcae.Code 라고 위에서 만든 클래스에 접근하는 코드입니다. CodeNamespace.Code이렇게 객체를 계속 사용하기에는 코드 작성도 불편하고, 나중에 코드의 가독성이 떨어지게 됩니다. 네임스페이스가 모호해 보이지 않는이상 using 네임스페이스명; 으로 긴~ 이름을 가볍게 작성할 수 있도록 할수 있습니다. 이제 유니티에서 C#코드를 만들면, 기본적으로 상단에 있는 using System.C~; using UntityEn~; 이 붙었는지 이해 했을거라 생각된다. 그럼 왜? 네임스페이스를 쓰는지 생각해 봅시..
-
[유니티] 15강 전처리기와 코루틴[유니티] 기본 2022. 5. 31. 01:10
1. 전처리기 C#에서의 전처리기는 다르다. 그냥 다르다. 없는것 만도 못하다. 이럴바엔 차라리 없는게 더 낫다. 기대하지 말고 살펴보자. 1. #define 심볼 C/C++ 치환하는 내용은 포함되어 있지 않다. 2. #if #elif #endif C/C++ 무조건 true 혹은 false 여야 한다. 3. #region #endregion 코드만 접을수 있게 해준다. 클래스나 함수는 비주얼 스튜디오에서 기본적으로 지원한다. 다만 필요한 블럭을 접고 싶을때 사용할수 있게 해준다. 근데, 필요한가? ㅋㅋ 어이없다. 그냥 전처리기는 없다고 보는게 마음 편하다. 2. 코루틴 53, 54, 71 line 에 있는 함수명이 doSomething이라는 이름으로 사용하면 doSomething(int a)함수가 아닌 ..
-
[유니티] 14강 파일 입출력2[유니티] 기본 2022. 5. 31. 01:09
a.txt, b.txt파일의 실제 경로는 다른 A와 B의 다른 폴더에 존재한다. Assets > A > Resources > a Assets > b > Resources > b 어디 폴더에 있는 Resources 폴더든 현재경로 처럼 인식한다는걸 특이하다. a라고 하더라도, Assets > A > Resources > a.txt 파일을 정확히 데이터를 가져온다. 출력을 해보면 정확히 잘 출력한다. 다음은 개발 중에 자체 에디터에서 별도의 포멧으로 저장된 파일을 읽어 들이는 예시다. C/C++이나 Object C에서 사용되는 방법과 별로 다르지 않다는걸, 다른 언어에서 파일 입출력을 해본 사람이면 쉽게 이해가 될것이니 설명은 생략한다. 이번 챕터에서 기억해야 하는건 Resources폴더가 어디에 있던 알아..
-
[유니티] 13강 파일 입출력1[유니티] 기본 2022. 5. 30. 21:35
고급언어로 갈수록 다양한 함수들이 가득하지만, 실제 사용하는데 있어서 다 필요하지도 않고, 언제 그렇듯 필요한건 바이너리로 읽고 쓸수 있으면 그만이다. 대략 이정도면 파일 입출력은 끝난거나 다름 없다. 하나씩 확인해보자. 일단 문자열을 저장하고 읽어보자. 문자열이 오고 갈수 있는 함수를 만들었다. 특정 개발 플랫폼에서 사용되는 패키지, 클래스, 함수들이 워낙 다양해서 내가 쓰기 편한 이름으로 바꾸는것에 불과하다. Encoding을 쓰기 위해서는, 상단에 using System.Text; 추가 해야 한다. 12강에서 사용한 버튼의 오른쪽 버튼을 누르면 저장 및 로드를 확인 해보도록 하자. 프로젝트가 있는곳에 파일이 잘 저장되고, 잘 읽는것을 확인할수 있다. 확인차 만든것이고, 게임이나 앱에서는 훨씬 더 복..
-
[유니티] 12강 오디오[유니티] 기본 2022. 5. 30. 21:34
오디오를 플레이하는데 여러가지 방법이 있지만, 굳이 다 알 필요없을거 같다. 솔직히 다른 방법을 알아보긴 했지만, 그딴게 왜 필요한지 모르겠다. 적어도 프로그래머에게는 필요없는것들이다. 원래 하던대로, 단순하게 plya함수만 호출하면 음원이 재생이 되도록 했다. 처음 시작되는 Scene에 객체하나 만들고, 그 객체에 스크립트 파일을 연동해서 프로그램이 끝날때까지 사용한다. 사운드 재생 클래스는 싱글턴 패턴을 이용했다. MonoBehaviour상속 받아서 처리해야 하는데, gameObject가 부모클래스에서 만들어져 오는 구조라서, 일반적인 C++이나 JAVA와는 다른 구조를 가진 형태이다. (싱글턴 패턴을 여기에 다 담기에는 힘드니까, 다른 게시글로 차후에 올리는걸로...아니면 수업시간에 하는걸로 미룬다..