Programing/Unity(C#) 52

[Unity] 버튼 클릭해서 씬(Scene) 전환하기

1. File - Build Setting으로 들어가서 생성한 Scene들을 드래그 해주고 창을 닫는다 public void LoadGame() { SceneManager.LoadScene("Game"); } 2. 스크립트 상에서는 위와 같이 함수를 작성해주면 된다 씬의 이름을 명시적으로 작성해줘도 되고, build index 번호를 넣어줘도 된다 3. 버튼의 on click 부분에 스크립트를 담았던 오브젝트를 드래그한 다음, 해당 버튼을 클릭할 경우 실행시킬 함수를 지정한다 (스크립트를 드래그하는 것이 아니라 오브젝트를 드래그! 해당 오브젝트 내에 있는 스크립트를 선택)

[Unity] 화면 밖으로 오브젝트 이동 불가하게 만들기

그냥 단순히 input을 입력받아 이동시켜주다 보면 카메라 밖으로 벗어나게 되는 경우가 생기는데, 이를 방지하기 위한 방법 Vector2 minBounds; Vector2 maxBounds; void InitBounds() { Camera mainCamera = Camera.main; minBounds = mainCamera.ViewportToWorldPoint(new Vector2(0, 0)); maxBounds = mainCamera.ViewportToWorldPoint(new Vector2(1, 1)); } Vector2 형태의 minBounds와 maxBounds를 정의해 준 다음 InitBounds 함수에서 이를 초기화해준다 (Start 함수에서 실행) main 카메라가 비추고 있는 곳의 좌측 ..

[Unity] New Input System 사용하기

1. Window - Pakage Manager에 들어가서 Input System을 install 해준다 2. 오브젝트에 Player Input 컴포넌트를 추가해준다 3. Create Actions 버튼을 눌러 새로운 Action Asset을 생성해 주고, Actions 필드에 해당 에셋을 넣어준다 4. Open Input Settings 버튼을 누르고, Create settings asset 버튼을 눌러준다 여기까지 하면 설정 끝 코드에서 해당 메소드들을 이용해서 작성해주면 된다 추가적인 Input을 생성하려면 아까 만들어두었던 input action asset을 열어서 최상단 + 버튼을 눌러 새로운 액션을 추가해주고 키 바인딩을 해주면 된다 (Listen 버튼을 누르고 해당 키를 누르면 바로 해당 키..

[Unity] 오브젝트가 Destory되지 않게 하기

유니티에서는 Scene을 기준으로 한 씬에서 다른 씬으로 넘어갈 때 이전에 있던 씬의 오브젝트들을 전부 Destory하고 이동하게 되는데, 이 때 오브젝트가 destory되지 않게 하는 방법에 대해 알아보겠다 void Awake() { int numScenePersists = FindObjectsOfType().Length; if (numScenePersists > 1) { Destroy(gameObject); } else { DontDestroyOnLoad(gameObject); } } 싱글톤 패턴을 사용하여 DontDestoryOnLoad함수를 사용한다 해당 스크립트를 적용한 오브젝트 하위에 유지시킬 오브젝트들을 넣어주면 된다 싱글톤을 사용하지 않을 경우, DontDestoryOnLoad에 gameo..

[Unity] TMP(Text Mesh Pro) 폰트 변경하기

1. 원하는 폰트를 다운로드 한다 2. 유니티 Asset 내 폴더를 만들어 해당 폰트의 ttf/otf 파일을 넣어준다 3. Window - TextMeshPro - Font Asset Creator을 클릭한 후 Source Font File 위치에 다운받은 폰트를 넣어주고, 아래에 Generate Font Atlas 버튼을 클릭해준다 완료되면 맨 아래쪽에 있는 Save 버튼을 눌러서 적당한 폴더 위치에 저장해준다 끝! 폰트 설정은 인스펙터 창의 Font Asset에서 아까 만든 asset을 선택해주면 된다

[Coding] if return 문의 코딩 스타일(Early Return)

강의를 듣던 중, 강사 분께서 이런 식으로 if 문을 활용해서 조건이 맞지 않으면 그냥 바로 리턴을 해버리는 방식으로 코드를 작성하셨다 여태 생각해왔던 바로는 if(myFeetCollider가 Ground 마스크에 IsTouchingLayers가 true라면) { if(value.isPressed) { // 속도 바꾸기 } } 이런 식으로 작성하리라 생각했는데 아니었다 이런 코드 작성법이 궁금해서 더 찾아보니, Early Return 이라고 부르는 듯 하다 이러한 방식으로 코드를 작성하게 되면 if 문의 들여쓰기를 줄여 코드가 간결해지고, 조건에 맞지 않는 경우를 미리 처리하므로 가독성이 높아진다는 장점이 있다 그러나 긴 코드 속에서 과하게 사용될 경우, 오히려 가독성이 떨어지고 함수가 복잡한 형태로 남..

[Unity] Scene 화면에 보이는 컴포넌트 아이콘 크기 축소하기

여러 컴포넌트 아이콘들이 플레이어에 붙으면서 플레이어의 모습도 잘 보이지 않아서 불편함 상단에 있는 기즈모(Gizmos) 메뉴를 클릭해서 3D Icons의 사이즈를 변경해주면 된다 체크박스를 해제할 경우, 아이콘이 일정한 크기로 유지되고 항상 표시된 상태로 보인다 참고 https://docs.unity3d.com/kr/2021.3/Manual/GizmosMenu.html

[CS1061] Collision2D 타입 변수에 tag 속성을 붙일 수 없는 문제

'Collision2D'에는 'tag'에 대한 정의가 포함되어 있지 않고, 'Collision2D' 형식의 첫 번째 인수를 허용하는 액세스 가능한 확장 메서드 'tag'이(가) 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. (CS1061) OnCollision메소드에서 other.tag를 사용하려고 하니 에러가 발생했다 OnCollision 메소드와 OnTrigger 메소드 간의 차이가 있다면 각각 Collision2D와 Collider2D 타입의 변수를 받아온다는 건데, https://docs.unity3d.com/ScriptReference/Collider2D.html Unity - Scripting API: Collider2D Success! Thank you for help..