Unity Mixamo에서 받아온 캐릭터의 재질이 안입혀져있을 때
캐릭터 재질이 안입혀져있을 때 Extract Textures를 누르고 Materials를 클릭하고 폴더선택하면 끝!
- Unity/Study
- · 2022. 9. 6.
폭탄이 폭발했을 때 주변 오브젝트들과 상호작용할 때 사용하면 유용하다 Collider[] colliders = Physics.OverlapShere(폭발위치, 반지름); foreach(Collider col in colliders)을 이용하여 조리하면 된다 물론, 주변 오브젝트에 콜라이더가 달려있어야한다
콜라이더 끄는 방법은 쉽다 BoxCollider를 예시로 들묜 GetComponent().enable = true; //켜기 GetComponent().enable = false; //끄기 enable로 끄고 킬 수 있다!
ViewportToWorldPoint & WorldToViewportPoint 활용법 오브젝트가 화면(보여지고 있는 화면)에서 벗어나게 하지 않게 하고 싶을 때 사용하면 된다 이렇게 Cube오브젝트는 화면밖으로 나가지 않는다전 시간에도 말했다시피 ViewPort는 비율이므로 0~1사이 값으로 컨트롤한다Cube의 World Transform Position을 ViewPort 좌표계의 값으로 변환한다 그러면 ViewPort좌표계에 0~1비율 사이에 존재하게 되는데 이때 x좌표가 0 or 1을 벗어나려고 하면 최대치를 0과 1로 하여 화면에 고정시킨다 그다음으로 ViewPort좌표계의 위치를 다시 3차원의 좌표계 World 좌표계로 변환해준다 그거를 transform에 대입한다 ScreenToWorldPoin..
ScreenPointToRay에 대해 알아보자 우리는 모니터를 통해 3차원 게임을 바라본다 모니터는 2차원 (쉽게 설명하면 가로, 세로로만 이루어진)으로 되어 있는데 어떻게 2차원 모니터의 한 지점을 눌렀을 때 게임 환경인 3차원에서의 Point지점으로 갈 수 있을까? 일단 원리는 이러하다 카메라로부터 플레이어가 클릭한 위치로 Ray(광선)을 쏜다 현재 카메라에 보이는 화면을 관통해 뻗어나가는 광선은 지정한 길이에 도달하거나 오브젝트에 부딪히면 멈춘다 오브젝트에 부딪혀 멈추게 되면 오브젝트의 정보를 얻는다 내용이 이해가 가지 않으면 그냥 이렇게 생각하자 Mouse를 클릭한 곳에 뭔가의 Interaction을 취하고 싶으면 ScreenPointToRay이 녀석을 이용하면 된다~! (해석하면 카메라로부터의 ..
뭔가 특수한 상황에서 카메라를 흔들고 싶은 연출이 필요할 때가 있지 않음? 그럴때를 위한 방법을 가져왔음! 먼저 싱글톤 패턴을 이용하여 다른 코드에서 손쉽게 접근할 수 있도록 해줘! 그리고 OnShakeCamera가 호출될 때마다 카메라가 흔들리게 할거야! 첫 번째 방법은 Camera의 Position자체를 움직이는거고! 두 번째 방법은 Camera의 Rotation을 바꿔주는거임! 나 같은 경우에는 칼같은 무기에 상대 Enemy가 닿으면 카메라가 흔들리게끔 설정했음! CameraShake.Instance아래 코드는 무시하셈~
유니티 카메라를 눌러보면 Projection(투영방식) 탭에 2가지 선택지가 있다 1. Perspective 2. Orthographic persepctive멀리 있는 물체는 작게, 가까이 있는 물체는 크게 즉, 원근감과 공간감이 표현된 화면을 렌더링해서 보여줍니다 투영선(Field Of View)가 존재합니다(빨간색선) Orthographic투영선이 평행을 이루고 있다 따라서,멀리 있든 가까이 있든 실제 게임오브젝트의 사이즈로 보인다 즉, 원근감과 공간감이 따로 표현되지 않는다 투영선을 작게하면 화면이 좁아지지만 오브젝트는 커지고, 투영선을 크게하면 화면은 넓어지지만 오브젝트는 작아집니다. 즉 Zoom In / Zoom Out 개념을 생각하면 됩니다 정리Perspective : 원근법이 적용되는 3D ..
캐릭터 재질이 안입혀져있을 때 Extract Textures를 누르고 Materials를 클릭하고 폴더선택하면 끝!
New Input System은 기존 유니티 Input System의 단점을 보완한 시스템이다 다양한 플랫폼에서 빠르게 컨트롤 설정을 변경할 수 있다! 기존 Inpuy System은 하나하나 코드로 수정해야했다.. 패키지 시스템에서 인풋 시스템을 임포트하자.그럼 이런 무시무시한 워닝 문구가 뜨는데 그냥 Yes누르면 된다. 그다음 프로젝트 세팅에 가보면 [Player] 창에 아래로 내려가다보면 Active Input Handling이라는 칸이 있는데 거기에 Input System Package(New)로 체크되어있을 것이다. 나는 Old버전의 인풋 시스템도 사용중이라 Both를 체크했다.그다음 프로젝트 폴더 아래 [+]버튼을 누르고 아래로 내려가다 보면 Input Actions가 생겼을거다. 눌러보자!이런..
World는 이제 세계 본질의 값이다 인스펙터창 보면 x,y,z값이 있는데 그게 World값이다 Local은 내가 오브젝트 클릭했을 때 그 오브젝트가!!!!!!!!!!! 기준이 되고!!!! 세상아 나를 억까하지마셈!! 나는 내가 기준이 되겠어!!! 너따위는 기준이 되지 못해!! 이러는 거임 즉, Local과 World는 기준이 누구냐에 따름 더 쉽게 설명해보면 지금 이 친구는 로테이션이 0,0,0 포지션도 0,0,0 이기 때문에 월드좌표계와 Local좌표계가 일치함 근데 이 친구가 삐져서 등을 휙 돌리면(로테이션을 180도 하면) 이 친구의 Local좌표계는 이렇게 변함 즉, 이 친구가 기준이 되므로 Forward방향이 저 빨간 기둥이 아닌 캐릭터가 바라보는 방향이 Forward방향이 됨!!
카메라 X축 회전카메라 X축을 회전시킬 mouseSpeed와 값을 저장할 변수 mouseX를 선언합니다. mouseX += Input.GetAxis는 Mouse X의 회전축을 받아와 더합니다. (왼쪽으로가면 마이너스, 오른쪽으로가면 플러스입니다. 카메라 Y축 회전움짤을 보면 캐릭터의 rotation Y만 바뀌는걸 볼 수 있다..! 요약1. float mouseX += Input.GetAxis("Mouse X"); float mouseY += Input.GetAxis("Mouse Y"); 2. transform.eulerAngles = new Vector(-mouseY, mouseX, 0); mouseY에 마이너스를 하냐면 값이 작아질수록 위를향하고 커질수록 아래를 향하기 때문입니다.
먼저, 우리 게임의 주 기능은 컨트롤러를 누르면 사슬이 뻗어 나가 사념에 연결되는 것이다. 나는 내 방식대로 이 사슬이 뻗어나가는 것을 구현해보려고 한다.이론1. 사슬이 뻗어나가는 위치와 타켓의 위치를 계산한다(Distance)2. 사슬이 생길 개수를 미리 정한다(이렇게 한 이유는, 사슬의 크기를 고정할 경우 distance의 거리에 따라 사슬의 개수가 부족하거나 초과될 수 있기 때문에 사슬의 개수를 미리 정해서 사슬의 크기를 유동적으로 바꿀 예정이다), 사슬의 크기를 고정시키는 방법도 해볼 예정이다 코드는 이러하다 distance를 구하고, 방향을 구한다음, 오브젝트의 길이를 구하면 된다.이렇게하면 문제점이 하나 발생한다. 이렇게 사슬이 중심정에 서로 겹친다.사이즈를 조정해주자. 위 아래로 겹치기 ..
AddComponent는 GetComponent와 다른 녀석이다 Add, 말 그대로 더한다는 뜻인데 첫 번째줄에서 Test라는 게임오브젝트를 새로 만들고 그 Test오브젝트에 라는 스크립트를 집어 넣어주는 것이다
1. Rotation 먼저, transform.LookAt과 Quaternion.LookRotation의 차이점이 궁금했는데 직접 해보니 같은 결과가 나온다. 먼저 LookRotation같은 경우, 지정된 forward와 upwards 방향에 의해 rotation이 결정된다. LookAt은 target의 현재 위치의 vector point을 향해 회전한다. 음, 두개의 문법을 살펴보니 차이점이 존재한다. 일단 LookAt같은 경우 타켓팅 되어야할 대상이 존재해야 한다는 것이다. 예를 들어, 유도 미사일 같은데에 사용하면 좋을 듯 싶다, LookRotation은 타켓 없이 회전될 때 사용되어야할 것 같다. 예를 들어, 캐릭터의 회전 같은 곳에 사용하면 될 듯 하다. Z축을 기준으로 한다. Z축을 중심으로 ..
오브젝트에는 Renderer라는 컴포넌트가 존재한다 그 아래에는 Mateirlas 요소가 있다 메테리얼은 쉐이더 작성할 때 이용한 것들을 사용해 요리조리 주무를 수 있다 예를 들어 코드에서 Thickness를 수정하고 싶으면 레퍼런스를 불러 SetFloat의 값을 수정해주면 된다 이때 material과 sharedmateiral의 차이가 있는데 mateiral은 오브젝트의 sharedmaterial의 사본을 복제해 material에 할당하는 거다 즉 원본 파일이 아니란 뜻임 모든 오브젝트의 메테리얼을 동시에 바꾸고 싶으면 sharedMateiral을 쓰면 되고 단독으로 바꾸고 싶으면 mateiral을 사용하면 되는 것이다 이때 material을 사용하면 Batch Rendering을 사용할 수 없는 것이..
나는 주로 캐릭터 움직임에 사용하곤 했다 이렇게 대각선으로 이동하면 피타고라파덕의 스킬로 인해 루트2가되어 약 1.41만큼 앞서 나가기 때문에 정규화(Normalized)를 통해 대각선으로 갈때도 1로 맞추어 주었다. 이걸 또다른 방식으로 이용할 수 있는데!!! 바로 Direction을 얻고자 할 때 유용하고 사용된다. 이렇게 A에서 B로 갈 때 방향을 구하려면 다들 벡터는 아시죠? B - A = (화살표오른쪽가리키는거)AB 이렇게 되는거 그러면 방향은 구했는데 이렇게하면 AB선분의 길이까지 가져오게 되죠. 그래서 정규화를 통해 값을 딱 1만 가져오면 되죠! Vector dir = (B-A).normalized()를 통해 방향을 가져와요 다같이~