[Unity/C#] 버튼 여러 번 클릭시 해당 animation 두 번 실행 버그
·
Unity
상황 및 발생한 버그 설명 우선 이 게임은 하단의 버튼 UI(영상에는 안 넣었다.)를 누르면 발판을 한 칸씩 올라가는 방식이다. 따라서 다음 블럭 색과 같은 색의 버튼을 누르면 (한 칸씩 올라가며) 애니메이션이 발동 되도록 했다. 애니메이션을 발동시킬 때는 animator의 trigger를 사용하여 다음과 같은 코드를 사용했다. animator.SetTrigger("ClimbTrigger"); 애니메이션은 잘 적용 되었으나....문제는 버튼을 빠르게 연달아 누르면 상단의 문제 영상과 같이 애니메이션이 두 번 발동되는 것이다. (천천히 올라가면 문제가 발생하지 않았다.) 정말 몇 번 연속 빠르게 올라가든 항상 두 번씩만 반복 재생되었다. 따라서 이를 해결하기 위해 animator.ResetTrigger(”..
유니티 게임 프로토타입 연습 : 우주 슈팅 게임 (4)
·
프로젝트
해당 글은 를 따라하면서 공부하는 과정을 담았다. ▶ 충돌 구현 / 게임 재시작 -> 이후 _Hero의 레이어와 태그를 Hero로 설정, Enemy 프리팹들의 레이어와 태그도 Enemy로 설정했다. --> 하위 게임 오브젝트들은 레이어만 같게 설정해주었다. -> Shield의 Sphere Collider를 트리거로 설정(튕겨나가는 것X, 충돌 했을 때 알 수 있게) // Hero 클래스 내의 메소드 // 마지막으로 트리거한 게임 오브젝트에 대한 참조를 포함하는 변수 public GameObject lastTriggerGo = null; void OnTriggerEnter(Collider other) { // other.gameObject 또는 상위 게임오브젝트의 태그를 얻음 GameObject go = ..
유니티 게임 프로토타입 연습 : 우주 슈팅 게임 (3)
·
프로젝트
해당 글은 를 따라하면서 공부하는 과정을 담았다.▶ 지난 오류 해결 첫 번째로, 지난번 발생했던 NullReferenceException부터 수정할 것이다.-> 보통 오탈자로도 많이 발생하는 오류라고 한다.-> Utils 클래스 내 SetCameraBounds() 메소드에서 if문 조건을 설정할 때 오탈자가 있음을 확인, 수정했다. ▶ 적 우주선 추가 -> 위와 같이 적 우주선 5개를 각각 구(Sphere)를 이용해 제작후, 프리팹으로 지정했다. -> Enemy 스크립트를 만들어 우선적으로 Enemy_0에 연결시켰다.public class Enemy : MonoBehaviour{ public float speed = 10f; // 속도(초속미터) public float fireRa..
유니티 게임 프로토타입 연습 : 우주 슈팅 게임 (2)
·
프로젝트
해당 글은 를 따라하면서 공부하는 과정을 담았다.▶ 우주선 방어막(Shield) -> 쿼드를 생성(GameObject - 3D Object - Quad), 이름을 Shield로 지정 후 _Hero의 하위 오브젝트로 지정함. --> Quad는 평면 3D 오브젝트. 3D에서는 주로 GUI를 만들 때 사용하기도 함. (배경 등)-> Shield - P[0,0,0] R[0,0,0] S[8,8,8]로 지정-> Sphere Collider 컴포넌트 추가, Mesh Collider 제거 -> 새로운 Material을 만든 후(Mat Shield), 이를 Shield에 적용함-> Mat Shield의 셰이더를 UnlitAlpha로 지정, Main Color는 연두색으로 지정했다.-> 그 후 텍스쳐는 이전 편에서 받아둔..
유니티 게임 프로토타입 연습: 우주 슈팅 게임 (1)
·
프로젝트
해당 글은 를 따라하면서 공부하는 과정을 담았다.▶ 아트 에셋 세팅 이번 게임에서는 직접 아트 에셋을 제작하는 대신, 유니티 에셋 패키지를 불러와 사용할 것이다.-> book.prototools.net/의 "Chapter 30: Prototype 3: Space Shmup" - C30_Space_SHMUP_Starter.unitypackage 파일 다운로드-> 이후 유니티 메뉴 표시줄 - Assets - Import Package - Custom Package 클릭-> unitypackage 파일 선택 - 모든 파일 Import ▶ 씬 설정 _MainCamera-> Transform을 P:[0,0,-10] R:[0,0,0] S:[1,1,1]로 설정-> Camera (컴포넌트) - Clear Flags ..
유니티 게임 프로토타입 연습: 성 부수기 (3) - 완성
·
프로젝트
해당 글은 를 따라하면서 공부하는 과정을 담았다.▶ 성 만들기 축 기즈모의 Persp를 클릭해 Iso로 바꾼 후, 메인 카메라를 클릭해 씬 뷰를 조절했다. 목표지점(Goal)-> Material을 적용해 옅은 초록색으로 표시함-> BoxCollider - isTrigger를 true로 지정함 (인스펙터에서 체크) 성 벽-> Rigidbody 컴포넌트를 추가, 이후 수정이 용이하도록 프리팹으로 만들었다.-> Rigidbody - Freeze position.z를 true로 지정했다. (인스펙터에서 체크함)-> Rigidbody - Mass를 4로 변경했다. -> 첫 번째 성을 프리팹으로 만든 후, 복제(Ctrl + C)하여 다른 성들도 만들었다. ▶ 목표 지점 반응 추가 Goal 오브젝트에 들어갈 C# ..
유니티 게임 프로토타입 연습 : 성 부수기 (2)
·
프로젝트
해당 글은 를 따라하면서 공부하는 과정을 담았다.▶ 스크립트 코딩 Slingshot 클래스(새총)-> OnMouseEnter() : 마우스 포인터가 Collider 안으로 들어가면 실행-> OnMouseExit() : 마우스 포인터가 Collider 밖으로 나가면 실행 -> OnMouseEnter()와 OnMouseExit()은 모든 Collider와 트리거에 사용될 수 있음 -> Halo를 코드에서 직접적으로 조종할 수 없기 때문에 이를 포함하고 있는 LaunchPoint를 조작함. -> GameObject.Find() : 오브젝트를 찾을 때 hierarchy 리스트 전체를 쭉 긁어내면서 찾음. 비활성화된 오브젝트 감지X-> transform.Find() : 대상 오브젝트의 부모나 자식 오브젝트 중에서..
유니티 게임 프로토타입 연습 : 사과 받기
·
프로젝트
해당 글은 를 따라하면서 공부하는 과정을 담았다.▶초기 아트 에셋 제작 Transform에 있는 Position, Rotation, Scale은 각각 컴포넌트의 위치, 회전, 배율값(크기)을 의미한다.책에서는 이 컴포넌트의 설정을 설명할 때 Trunk(Cylinder) P:[0,0,0] R:[0,0,0] S:[1,1,1] 의 형식으로 설명하는 듯. 3D Object - Sylinder (원기둥)3D Object - Sphere (구)--> 이 둘을 이용해 나무(나무 기둥-Trunk+잎-Sphere) 표현 + 사과 표현--> 빈 오브젝트(AppleTree)를 만든 후, 이 둘(나무 기둥+잎)을 함께 묶어줌. 이후 질감 적용 후 프리팹으로 만들기. 3D Object - Cube--> Basket 만들고 프리..