본문 바로가기

728x90
반응형

유니티

(23)
[유니티] 프리팹 (Prefab, Instantiate) 프리팹 (Prefab) 여러 개의 똑같은 오브젝트를 생성하고 싶을 때 프리팹을 사용할 수 있다. 프리팹을 생성하면 완전히 똑같은 성질을 갖고 있는 오브젝트를 생성하는 것과 같은 일을 하는 것이다. 단순히 오브젝트를 하나 생성하는 것이 아닌, 프리팹에 적용된 스크립트, 컴포넌트, 자식 오브젝트 등 프리팹에 적용되어 있는 모든 것을 복제한다. 여러 마리의 몬스터, 농장의 동물, 밭의 식물 등 여러 개의 같은 오브젝트를 생성하고 싶을 때 사용할 수 있다. 프리팹 생성 그래서 프리팹을 어떻게 만드느냐? 우선 생성하고 싶은 프리팹의 이미지를 Project창에서 Hierarchy창으로 가져온다. 그리고 Hierarchy창에 생성된 오브젝트를 다시 Project창으로 가져온다. 그럼 Project창에 파란색 오브젝트..
[유니티] 자연스러운 좌표이동 (Vector2.Lerp) 부자연스러운 좌표이동 오브젝트의 좌표를 이동시킬 때 transform.position = new Vector2(,,) 의 형태를 사용하게 되면 오브젝트가 마치 순간이동한 것처럼 보일 것이다. 이 때 매끄러운 오브젝트의 좌표이동을 위해 선형보간함수를 사용할 수 있다. 선형보간함수 선형보간함수는 Vector2.Lerp(a, b, c) 라는 형태를 취하고 있다. 이 함수는 3개의 매개변수를 요구하는데 a는 현재 좌표, b는 이동할 좌표, c는 상수이다. c값에 따라서 반환하는 좌표가 달라지는데 c 값이 1이면 b를 반환하고 c가 0이면 a를 반환한다. 예를 들어 다음과 같은 코드가 있다고 하자. Vector2.Lerp(new Vector2(0, 0), new Vector2(1, 1), 0.5); 이렇게 되면 ..
[유니티] fillAmount Filled Type 이미지 생성 유니티의 fillAmount 함수를 사용하면 UI를 원하는 만큼 채울 수 있다. 체력바, 혹은 시간제한 등을 나타낼 때 유용하게 사용할 수 있을 것 같다. fillAmount 함수를 사용하기 위해서는 Canvas 위의 Image 하나가 필요하다. Image를 하나 생성해준 후 Inspector 창에서 Source Image를 할당해주면 ImageType 이 나온다. 여기서 Image Type을 Filled 로 선택해준다. Filled 선택을 하면 Fill Method, Fill Origin, Fill Amount 이 나오는데 이름처럼 Fill Method 는 채우는 방식, Fill Origin 은 채워지는 지점, Fill Amount는 채워진 정도를 의미한다. Fill ..
[유니티] 캔버스 위의 UI좌표 (Camera.main.WorldToScreenPoint) 캔버스 유니티에서 Image 오브젝트를 생성할 수 있다. Hierarchy 창에서 우클릭을 하고 'UI - Image'를 선택하여 생성할 수 있다. Image 오브젝트는 Canvas 위에 그려지게 되는데 Canvas는 Image를 생성하면 자동으로 생성된다. 캔버스 상의 위치 캔버스 위에 위치한 UI들은 Camera가 보는 좌표와 다른 좌표를 갖고 있다. 따라서 캔버스 위에 위치한 UI의 좌표를 변경하려면 Camera의 좌표를 Canvas의 좌표로 변환해주어야 한다. 또한 캔버스 상의 UI들은 RectTransform을 갖는다. transform도 사용할 수는 있지만 RectTransform을 사용하는 것이 일반적이라고 하는데 사용법을 아직 익히지 못해서 우선 transform을 사용하겠다. 따라서 캔버..
[유니티/연습 프로젝트] 걷기 모션, 공격 모션, 근접 공격 범위 설정 애니메이션 기본 상태인 Idle 애니메이션, 걷는 상태인 Walk 애니메이션, 공격 모션인 Attack 애니메이션을 추가했다. Bool 형 Walk, Attack 파라미터를 설정해서 Idle 상태에서 Attack 이 True 이면 Attack 애니메이션으로 Walk 가 True 이면 Walk 애니메이션으로 진행되고 반대의 경우 다시 Idle 로 돌아오게 설정하였다. 걷기 모션 스크립트에서 Animator 컴포넌트를 불러온 후 SetBool 함수를 통해서 파라미터를 컨트롤 해준다. 프레임이 Update 될 때 마다 Walk 함수는 항상 false 상태를 유지해서 화살표 키보드 입력을 받기 전에는 항상 Idle 상태를 유지한다. using System.Collections; using System.Colle..
[유니티] 오버랩 박스 (충돌 감지) 오버랩 박스 생성 하나의 오브젝트에 콜라이더를 2개 이상 적용하고 싶을 수도 있다. 이를테면 캐릭터의 공격범위나 감지범위 등을 설정할 때 필요할 것이다. 그러나 콜라이더를 2개 이상 적용할 수는 없다. OnCollisionEnter 함수나 OnTriggerEnter 함수가 제대로 작동하지 않을 수 있기 때문이다. 범위가 의도한 바와 달라진다던가 중복해서 함수가 실행된다던가 등의 문제가 발생한다. 그렇다면 어떻게 이를 해결해야 할까? 이럴 때 사용할 수 있는 것이 오버랩 박스이다. 2D에서 오버랩 박스를 만들기위한 코드는 다음과 같다. Collider2D[] collider2Ds = Physics2D.OverlapBoxAll(Pos.position, BoxSize, 0); OverlapBoxAll 함수는 ..
[유니티] 애니메이션 전환 딜레이 제거 애니메이션 전환 딜레이 유니티에서 애니메이션을 전환할 때 진행하고 있던 애니메이션이 끝나지 않으면 딜레이가 발생할 수 있다. 하지만 애니메이션 설정을 통해서 딜레이를 제거할 수도 있다. 우선 Animator 창에 들어가서 딜레이를 제거하고 싶은 트랜지션을 클릭해준다. 트랜지션을 클릭하면 Inspector 창에서 Has Exit Time 체크박스를 해제해준다. 그리고 아래 타임테이블을 원하는 상태에 맞춰서 조정해준다. 나는 기본상태인 Idle 애니메이션에서 걸어가는 상태인 Walk 애니메이션으로 딜레이없이 바로 전환시키고 싶어서 0.00초에 즉시 Walk 애니메이션으로 전환하게끔 설정했다.
[유니티] 애니메이션 애니메이션 유니티 엔진을 이용하여 오브젝트에 애니메이션을 추가하는 것도 가능하다. 먼저 Project에 Animation을 추가해준다. 그리고 추가해준 Animation을 적용시키고 싶은 오브젝트에 드래그&드롭한다. 그러면 해당 오브젝트에 적용시킬 애니메이션들을 관리할 수 있는 Animation Controller가 생성될 것이다. Animation 만들어준 애니메이션을 더블클릭하면 Animation 창이 뜰 것이다. 이 창을 열고 애니메이션을 추가할 오브젝트를 Hierarchy 창에서 클릭한다. 그리고 원하는 스프라이트 이미지를 넣어 애니메이션을 추가할 수 있다. 추가해준 스프라이트 이미지들은 재생되기를 원하는 시간에 드래그&드롭으로 배치할 수 있다. 다른 애니메이션들도 추가하고 싶다면 애니메이션을 추..

728x90
반응형