본문 바로가기

Unity/Knowledge

(58)
MonoBehaviour와 Unity 생명주기 1-1. Time.timeScale을 0으로 하면 Update와 FixedUpdate는 모두 호출이 되지 않을까요? 그 이유는 무엇일까요?Time.timsScale을 0으로 설정하면 게임의 시간을 멈춘 것으로 간주된다.Update 메서드는 프레임마다 호출되므로 Time.timeScale의 영향을 받기 때문에 호출되지 않는다.FixedUpdate 메서드 또한 고정된 시간 간격으로 호출되므로 Time.timeScale의 영향을 받기 때문에 호출되지 않는다.1-2. Update의 호출주기에 영향을 주는 것은 무엇일까요?프레임 레이트 - Update는 각 프레임마다 호출되기 때문에, 프레임 레이트(FPS)에 직접적으로 의존한다. 높은 프레임                          레이트에서는 더 자주 호출..
내가 자주 사용하는 LayerMask 가급적이면 접근제한자를 public을 사용하는 것 보다는 private을 선호한다.그러다보니 LayerMask를 필드 초기화하는 과정에서 든 의문이 있다. LayerMask.GetMask("xyz")   vs   LayerMask.NametoLayer("xyz")LayerMask.GetMask("Player")용도 : 지정된 레이어 이름을 포함하는 레이어 마스크를 반환반환값 : 지정된 레이어 이름을 포함하는 레이어 마스크의 정수 값 (비트 필드) LayerMask.NameToLayer("Player")용도 : 지정된 레이어 이름에 해당하는 레이어 번호를 반환반환값 : 해당 레이어 이름의 정수 값 요약LayerMask.GetMask("Player"): "Player" 레이어를 포함하는 비트마스크를 반환La..
생동감 있는 몬스터 만들어 보기 게임을 진행하게 되었을 때몬스터가 가만히만 있다가 플레이어를 감지했을 때에만 추적하는 메커니즘이라면 이 것 만큼 단조로운 상황이 존재할 수 있겠는가? FixedUpdate를 사용해서 몬스터가 플레이어를 감지 할때까지 기다리는 방법보다는코루틴을 사용하여 몬스터를 제어함과 동시에 생동감을 넣어주는 방법을 생각해 봤다. Start메서드에서 UltimatedMove라는 IEnumerator를 호출하여 코루틴을 시작한다.알다 시피 코루틴은 여러 프레임에 걸쳐 실행되는 작업을 가능케 한다. ⓐ while (true)무한 루프이다. 코루틴이 중단되지 않는 한 계속 실행되도록 설계한다. ⓑ if (monsterMechanism.isGrounded)몬스터가 지면에 닿아있는지 여부 ⓒ monsterMechanism.IsP..
그래픽스 - 셰이더 셰이더가 무엇일까? 궁금해서 찾아 봤다 1. 렌더링 파이프라인 이해하기기준점 SpawnPoint (0,0,0)개별의 꼭지점 들을 Vertex이 Vertex들을 이어주는게 VertexShader 과정 및 Scene으로 배치Model : LocalPosition -> WorldPosition View : 카메라위치로 이동Perspective : 원근감2. PBR 렌더링이해하기 렌더링 방식 - 유니티 허브를 켜보면 여러가지 탬플릿이 있다.LWRP -> URP = 가벼운 파이프라인Built in 셰이더가 대세였지만 모바일 성능이 좋아지면서 URP HDRP를 주로사용HDRP는 일반적으로 콘솔게임용PBR Rendering = Physically Based Rendring = 물리 기반 렌더링3. Shader Gra..
3D 카메라 타입 별 상호 작용 [ 3 가지 카메라 타입 ] [ 문제점 ] 현재 코드는 3인칭에서만 상호작용하고 있다.횡스크롤과 탑뷰에서도 상호작용하려면 어떤식으로 방향을 잡아야 하는가? [ 해결 방안 ]1. 레이를 생성하는 것을 고수하겠다고 하면, 카메라가 아닌 플레이어에서 레이가 나가는 방식으로 생각해봐야 한다.    그대신 Letter같은 상호작용 하는 물체는 굴러다니거나 하는 것 처럼움직이면 안됀다. 2. 충돌 처리로 상호작용 하는 방법이 있다.  2-1. 플레이어의 자식오브젝트로 게임오브젝트를 생성한다.  2-2. 자식오브젝트의 Renderer을 체크 해제하여 보이지 않게한다.  2-3. 자식오브젝트가 직접적인 충돌이 아닌 간접적인 충돌을 하게 하기위하여 Is Trigger를 체크
인벤토리 토글 해체 분석기 canLook의 자료형은 bool이며 초기값은 true로 할당LateUpdate() 에서 if(canLook)일 경우에 CameraLook()을 실행Tab키를 눌러서 인벤을 켰을 때, ToggleCursor() 메서드가 실행되는 상황  bool toggletoggle의 판단 기준 = 마우스 커서가 숨김상태인지 toggle = true 일 경우마우스 커서 숨김모드를 None으로 하여 커서를 보이게한다.마우스 커서가 보인다는 뜻은 인벤토리를 켰다는 뜻이다. toggle = false 일 경우마우스 커서 숨김모드를 Locked로 하여 커서를 안보이게한다.마우스 커서가 안보인다는 뜻은 인벤토리를 안켰다는 뜻이다. canLook = !toggle;레이트 업데이트에서 canLook이 true일 때에 CameraLo..
플레이어를 움직이는 오브젝트에 동기화 하는법 beforeDirection 변수를 사용하는 이유는 현재 이동 방향과 비교할 수 있다. 플레이어가 움직이는 오브젝트의 움직임을 동기화하기 위함이 변수를 활용하여 현재 이동 방향이 이전과 동일한지 여부를 확인이를 기반으로 플레이어의 Rigidbody의 속도를 업데이트플레이어가 이동하지 않을 때, 즉 moveDirection이 Vector3.zero일 때도 beforeDirection을 통해 이전에 설정된 속도를 유지 움직임이 없는 경우에도 beforeDirection과 비교하여 필요할 때만 속도를 변경
코루틴 Coroutine [ Coroutin 정의 ]① Coroutine 은 Unity 에서 비동기적인 작업을 수행하기 위한 강력한 도구② 주로 사용 되는 곳 : 특정 시간 간격으로 반복되는 작업, 지연된 작업, 연속적인 애니메이션 및 이동 구현③ 일시 중단되고 다시 시작될 수 있는 기능을 제공 코루틴은 얼핏 눈으로 봤을 때 바동기적으로 보이지만, 함수 돌아가는 꼴을 보면 동기적이다 [ Coroutin 특징 ]① 비동기 작업코루틴은 다른 코드와 독립적으로 실행되며, 주로 지연된 작업을 수행하거나 반복적인 작업을 처리 ② 일시 중단 및 재개코루틴은 실행 중에 일시 중단되고 다시 시작될 수 있기 때문에, 코드가 실행되는 동안 대기하거나 지연을 일으킬 수 있음 ③ 쉬운 구현단순히 메서드 앞에 IEnumerator 형식의 리턴 타입을 ..
TryGetComponent ① TryGetComponent 는 Unity 의 'MonoBehaviour' 클래스에서 제공되는 메서드② Bool 값을 갖음③ 특정 타입의 컴퍼넌트를 안전하게 가져올 수 있음④ 컴퍼넌트가 존재하지 않는 경우에도 null을 반환하지 않고 false를 반환⑤ 그러므로 컴퍼넌트를 가져올 수 없는 상황에도 대응할 수 있음
3D 탬플릿 - 스카이박스, 포스모드, 레이캐스트 [ 스카이박스 ]6개의 텍스처로 구성된 큐브 맵 또는 하나의 구체로 텍스처가 매핑된 구체형 스카이박스로 구성① Unity에서는 씬의 배경으로 사용되며, 게임 환경을 확장시키는데 활용② 주로 하늘, 구름, 산 등의 자연적인 배경을 표현하는 데 사용③ 미리 만들어진 스카이박스를 사용하거나 직접 만들어서 Unity에서 적용할 수 있음④ 게임 중에 스카이박스를 동적으로 변경하여 낮과 밤 등의 시간대나 특정 이벤트에 맞게 배경을 변화시킬 수 있음⑤ 성능에 영향을 미치므로 최적화에 주의해야 함스카이박스 - Unity 매뉴얼 (unity3d.com) 스카이박스 - Unity 매뉴얼스카이박스(Skyboxes) 는 전체 씬을 둘러싸는 래퍼로 지오메트리 너머의 월드가 어떻게 생겼는지를 보여줍니다.docs.unity3d.c..
[Input System] SendMessage vs InvokeEvent [ SendMessage ] [ Invoke Unity Events ] [ Invoke C sharp Events ]
델리게이트형 제너릭 변수에다가 함수를 더할 수 있는 이유 Public event Action OnMoveEvent;스샷에서 보이는 것 처럼 OnMoveEvent는 변수인데 함수를 더하고 있다.moveDirection의 값은 0이었지만 direction이 되었다. OnMoveEvent를 실행시킬때 받는 그 direction값 (InputValue)  =  Move메서드의 매개변수 direction 값컨트롤러에서 실행시키전에 제발 좀 데려가달라는 뜻이다. (이걸 이해하기까지가 너무 오래걸렸다)그리고 이 것은 메서드임에 불구하고 변수처럼 사용해서 OnMoveEvent에 더하고 있다.Action은 델리게이트로 함수를 변수처럼 더할 수 있다. 정확히는 사용하기 쉽게 만든 델리게이트형 제너릭 형식이며, Action과 Func 있다반..