전체 글(270)
-
[Unity] 최적화를 위한 게임 오브젝트 태그(Tag) 비교 방법
태그(Tag)란? 유니티를 사용하다 보면, 스크립트에서 태그(Tag)를 이용해서 원하는 게임 오브젝트인지를 판별할 때가 자주 있다. 하지만 태그를 사용해서 비교를 하더라도 자칫 잘못하면 가비지 메모리를 잔뜩 생성할 수도 있다는 글을 본 적이 있다. 1. CompareTag() 메서드를 이용한 비교 (권장) pirvate void OnTriggerEnter2D(collider2D collision) { if(collision.CompareTag("Player")) //CompareTag() 메서드를 활용한 비교 { ... } } 2. string 문자열을 이용한 비교 (권장하지 않음) private void OntriggerEnter2D(collider2D collision) { if(collision.t..
2022.01.17 -
[압량(Amnyang)] #1. 2D Bone Animation으로 흔들리는 배경 오브젝트 구현하기
현재 나는 겨울방학동안 실력 증진을 위한 유니티 게임 개발 프로젝트를 진행 중이다. 나까지 총 기획 1명, 프로그래밍 2명, 아트 1명으로 구성된 대학생들이다. 다들 경험이 없는 초보 개발자들이지만, 게임을 만들고 싶어하는 열정이 가득한 사람들이며 각자 자기 분야에 대해 공부를 하면서 실력을 쌓아가고 있는 중이다. 그러던 중, 디자이너 분께 다음과 같은 요구사항을 받았다. 혹시 나무에 걸려 있는 천이 바람에 흔들리는 효과를 줄 수 있나요? 그래도 유니티 애니메이션(Animation)과 애니메이터(Animator)에 대해서는 어느정도 조금 공부를 해 놓은 상황이었다. 하지만, 어떤 애니메이션 기법으로 구현을 할 지 고민이었다. 그래서 유니티 에셋 스토어(Unity Asset Store)에 들어가서 2D 무..
2022.01.16 -
[Unity, C#] 구조체(struct)는 왜 new 문법을 지원할까?
C#에서 구조체는 값 형식(value type)이기에, 스택(stack)에 데이터를 담고 있는 변수 체계다. 레퍼런스 형식(reference type)은 실제 데이터는 힙(Heap) 영역에 존재하고, 스택(Stack)에는 해당 데이터로 가는 주소를 담고 있는 변수 체계다. 결론적으로 Vector3, Vector2는 구조체이기에 지역 변수로 생성한 경우, 로직이 끝나는 블록(block)을 만나게 되면 자동 메모리 반납 처리가 된다. void Update() { Vector3 vec3 = new Vector3(); Vector2 vec2 = new Vector2(); } // 끝나는 블록을 만났으므로, vec3, vec2 메모리 반납 C#은 힙 할당을 하는 클래스 객체 생성과 헷갈리게 왜 이런 new 문법을..
2022.01.13 -
[Unity] Visual Studio에서 Unity 디버깅 연결이 되지 않는 경우
Visual Studio가 2022 버전이 나와서 몇 번 써봤는데, 자동 완성 기능부터 해서 UI 측면까지 더 강력하고 이쁘게 변했더라구요. 설레는 마음으로 유니티에서 써보려고 했는데, 연동이 되지 않았습니다. 정확하게 말하자면, 연동은 됐는데 유니티 디버깅을 사용할 수가 없었습니다. 이게 무슨 어처구니 없는 상황인지?... 그래서, 구글링하여 얻은 정보들을 일단 있는대로 다 해봤습니다. 1. 구글링을 통한 시도의 흔적들 External Script Editor에서 Visual Studio가 선택 항목에 있는 경우 Unity Editor 상단 Edit → Preferences → External Tools → External Script Editor를 Visual Studio로 설정 External Sc..
2022.01.13 -
[Unity] 2D 게임 오브젝트가 바라보는 방향 전환하기
1. Sprite Renderer의 Flip 속성 이용 Flip 속성을 통해 X축, Y축, 혹은 둘 다 반전에 대한 축으로 설정할 수 있지만, 렌더링만 영향을 받는 단점이 있다. 다음은 2D Capsule 게임 오브젝트를 하나 생성하고, 하위 자식으로 2D Circle 게임 오브젝트를 생성해서 넣어놨다. 캡슐은 상하좌우 모두 반전에 대해 대칭이므로 구분을 할 수 있게, 다른 모양으로 Sprite를 바꿔놨다. 유니티를 통해 위와 같이 실험을 진행했다. 보면 알겠지만, 2D Capsule 게임 오브젝트의 렌더링 부분만 영향을 미친다. 하위 자식으로 생성했던 2D Circle 게임 오브젝트는 아무런 영향이 없는 걸 볼 수 있다. 따라서, Sprite Renderer의 Flip 기능을 이용할 땐 위와 같은..
2022.01.13 -
[Unity] Vector의 Set()으로 수정이 안 됐던 이유
유니티 개발을 진행하다 보면, 게임 오브젝트를 움직이거나 회전하는 등 벡터(Vector)를 조작할 일이 많습니다. 그런데, 쓰다보니 Set() 함수가 적용이 안 되는 것을 여러 번 확인한 적이 있었습니다. float x = ... float y = ... float z = ... ... transform.position.Set(x, y, z); // 동작하지 않음 왜 바뀌지 않을까요? 정답은 Vector는 구조체(struct)이므로 value type이기 때문입니다. 값 형식은 스택(stack)에 저장되며, 블록(block)이 끝나는 순간 메모리를 자동 반납하여 사라집니다. 제일 결정적으로 원본이 전달되는 것이 아니라 복사본이 전달된다는 게 큰 특징이구요. transform.position의 구현 부분을..
2022.01.13