목록전체 글 (96)
강께르의 개발일지
에디터 코딩과 관련 없지만 오클루전 컬링 관련 메소드 OnBecameVisible 해당 메소드를 가진 오브젝트가 카메라의 렌더 범위 내에 들어오기 시작하면 호출 OnBecameInvisible 해당 메소드를 가진 오브젝트가 카메라의 렌더 범위 바깥으로 나가기 시작하면 호출 OnWillRenderObject 해당 오브젝트가 보이는 경우에 각 카메라에서 호출 카메라마다 호출하기에 다른 카메라마다 다르게 렌더할 수 있게 분기할 수 있다. 팁! 메테리얼의 색깔이 바뀌는 것은 런타임 중에 메테리얼의 인스턴스를 생성해 변경하는 것으로 원본에 영향 X 하지만 공용으로 사용하는 메테리얼에서 빠져나와 다른 새로운 메테리얼을 생성해 적용하는 것이기에 그에 따른 DrawCall이 늘어나는 점은 감안해야한다. Geometry..
옵저버 패턴 - 하나의 서브젝트와 다수의 옵저버들 사이의 상호작용을 결합도를 낮게 / 응집도를 높게 만드려는 패턴이다. - 서브젝트의 일이 일어난다면, 다수의 옵저버들에게 그 일이 발생했다는 것을 알려주고, 옵저버들은 일이 발생했을 때, 처리하고 픈 특정 일을 수행하게 한다. - 서브젝트 클래스 혹은 인터페이스에는 세가지 기능을 갖고 있다. - 옵저버 추가, 옵저버 제거, 옵저버에게 공지 - 추가와 제거하기 위한 데이터 컨테이너를 지니고 있으며, 그 컨테이너를 순회하며 특정 메소드를 호출하는 방식이다. - 특정 메소드란 옵저버 클래스 혹은 인터페이스가 지니고 있을 메소드를 의미한다. - 옵저버들은 해당 클래스를 상속받은 클래스를 의미한다. 그 클래스를 상속받은 클래스 인스턴스들은 서브젝트 클래스를 상속받..
싱글톤 패턴 전역의 장점을 이용하지만 전역 변수를 사용하지 않고 클래스의 인스턴스를 딱 하나만 생성하여, 그 인스턴스를 어디에서든지 참조할 수 있도록 하는 패턴 특징 최초 단 한 번의 생성을 통해 고정된 메모리 영역만 사용하고 그 이후 인스턴스에 대한 요청은 생성한 인스턴스를 돌려주는 방식으로 동작하기에 메모리 낭비를 방지할 수 있다. 전역처럼 어디에서든지 참조할수 있다는 점에서 데이터 공유가 쉽다는 장점이 있다. 다만 여러 클래스의 인스턴스가 싱글톤 인스턴스를 동시에 접근한다면 문제가 있기에 설계 시 유의. 너무 많은 일이 주어지거나 공유하게 되면 높은 결합도를 갖게 돼서 좋지 못한 구조를 지니게 된다. 사용하는 방법 클래스의 생성자는 private으로 막아둘 것. 인스턴스가 수정되는 것을 막아둘 것...
파티클 시스템의 Rewind를 통해 역재생이 가능하다. 3d object의 3d Text를 이용해 데미지 텍스트 등을 출력할 수 있다. 이를 프리팹하고 Instantiate로 생성하여 사용한다. 프리팹 설정 시 유용한 것 Font Size : 폰트가 깨져있는 현상을 키워서 해결 Character Size : 너무 크다면 이 값을 조절 Anchor : 피봇점 위치 설정 Alignment : 문자열 정렬 TextMesh 컴포넌트로 텍스트 내용과 색깔을 트리거 : 물리적인 볼륨인데 판단하는 용도로 사용하고 물리적인 시뮬레이션을 하지 않는다. rigidbody가 붙여지면 그 쪽으로 이동에 관한 코드를 몰아주는 게 좋다. 포지션을 움직이면서 콜라이더가 붙어있으면 최적화에 좋지 않다. 굳이 하고 싶으면 콜라이더 트..
ScriptableObject를 이용해 많은 데이터를 담아 사용할 수 있는 또 하나의 데이터를 만들었다. 1. 마우스 매니저 1. 공격 대상이면, 커서 바꿔라 공격 대상을 판별하는 방법 RayCast의 결과로 hit 되는 Collider가 있을 것이다. 그 Collider의 게임오브젝트에서 Component를 갖고 오는데, 공격과 관련된 인터페이스 타입의 컴포넌트를 가져온다. 상속받으면 가져올 수 있다. 그 가져온 Component가 성공적으로 가져올 수 있어서 null이 아니라면 SetCursor로 커서 모양을 바꾼다. 2. 공격 대상을 좌클릭 하면, 공격 (유니티 이벤트 이용해서) 가져온 Component가 null이 아니라면 UnityEvent 데이터형으로 링크한 Hero 오브젝트의 메소드를 호출하..
3d 모델링 다루기 모델링 파일의 rig 탭을 보면 Extra Transforms to Expose가 있다. 이 부분을 열면 모델링이 보여주지 않은 부분이 다 있을 것이다. 만약 씬상에서 위치를 가져오고 싶은 부위나 이용하고 픈 부위가 있다면 이 탭에서 원하는 부위를 체크해 씬 상에서 접근 가능하게 할 수 있다. OnTrigger 시리즈 OnCollision 시리즈 위 메소드들은 FixedUpdate 메소드에서 호출된다. 위 메소드들의 매개변수인 Collision과 Collider의 차이점이 있다. Collision은 충돌 시의 정보를 디테일하게 갖고 있는 클래스 Colllider는 흔히 알고 있는 그냥 충돌체이다. 위의 과정은 투사체를 캐릭터에서부터 발사하기 위한 과정인데 던져서 피격 처리하고 싶다면 ..
3d그래픽스의 카메라 역할 게임의 렌더링되는 것을 보여준다. UI 렌더링이랑 월드 렌더링을 합친 결과를 게임 화면으로 보여준다. Light Baked RealTime 프레임마다 렌더링할 그래픽을 계속 계산한다. 특정 조건에 맞는 계산을 미리 해놓고 계산된 결과를 가져다 쓴다. Mode에 그 설정을 바꿀 수 있다. Mixed까지 포함 Baked는 Light 맵을 만드는 것이다. 빛 렌더링은 하드웨어가 많이 요구되는 렌더링이다. 최적화와 렌더링 품질을 올려주는 Light 맵 생성 추천하는 방법이라고 한다. 움직이는 오브젝트인가? 오브젝트 체크박스 중 static이 있다. 안 움직일 오브젝트인 경우 이 체크박스를 체크하면 된다. mesh renderer와 skin meshrenderer 오브젝트 렌더링의 경우..
거리 계산할 때, 이동한 량의 반을 체크하면 좋다. 예 : speed * Time.deltaTime * 0.5f; 오늘의 목차 코루틴 플러그인 중 하나 – ITween 코루틴 쓰레드란? 프로그램의 흐름이라고 하면 된다. 주된 프로그램의 흐름을 메인 루틴. 멀티쓰레드란? 프로그램이 동작하다가 다른 프로그램의 흐름이 또 생기는 거다. 다른 이야기로 메인 루틴이 있다가 다른 서브 루틴들이 많이 생성하는 것이다. 왜 이런게 필요한가? 메인 쓰레드 안에서 모든 일을 다 처리하는데 만약 그 안에 시간이 오래 걸리는 처리가 있다면 그만큼 쓰레드 안에서의 다른 일을 처리하는 게 딜레이 될 수 밖에 없다. 그래서 서브 루틴이라 불리는 쓰레드를 생성해서 업무를 분담해서 처리하는 것이다. 그 예로 네트워크를 분리하는 것. ..
오브젝트와 컴포넌트에 대한 이야기 public으로 선언한 멤버에 대해서 인스펙터에 노출된다. enum도 가능하다. flags 값도 다 선택할 수 있다. 3d 모델링 파일 / 게임 오브젝트 구분해서 차이점은 다음에 알려주실 듯. 게임 오브젝트의 태그와 이름을 활용할 수 있다. Find계 메소드들은 비활성화된 오브젝트들을 찾을 수 없다. 컴포넌트 추가하는 방법 드래그-드롭 다른 오브젝트의 컴포넌트를 Copy-Component -> 복사할 오브젝트에 Paste-Component를 한다. 3. Add Component 컴포넌트도 public 변수로 선언할 수 있다. Transform, Camera 같은 오브젝트에서 다른 컴포넌트를 가져와서 쓰기 그냥 private으로 선언하고 getComponent로 가져온다...
입력에 대해 Input 클래스에 정의된 메소드를 활용해 입력을 받는다. 키 코드는 열거형으로 입력값이 설정되어 있다. - q, w, e 위에 있는 숫자들은 Alpha0...에 해당된다. 사용법 : KeyCode.(코드에 해당되는 열거형) Input 클래스에 속한 입력 방법(메소드) GetKeyDown : 키 입력이 눌렸을 때 GetKey : 키 입력이 계속 눌려있을 때 GetKeyUp : 키 입력이 떼어졌을 때 anyKeyDown : 마우스를 포함한 입력이 눌렸을 때 anyKey : 마우스를 포함한 입력이 계속 눌려 있을 때 GetMouseButtonDown : 마우스 버튼이 눌렸을 때, 0 == 왼 / 1 == 오 / 2 == 가운데 Update() 함수에 보통 키 입력과 관련한 처리를 넣지만 Fixe..