본문 바로가기

728x90
반응형

유니티/유니티 엔진

(19)
[유니티] 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을 사용하겠다. 따라서 캔버..
[유니티] 오버랩 박스 (충돌 감지) 오버랩 박스 생성 하나의 오브젝트에 콜라이더를 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 창에서 클릭한다. 그리고 원하는 스프라이트 이미지를 넣어 애니메이션을 추가할 수 있다. 추가해준 스프라이트 이미지들은 재생되기를 원하는 시간에 드래그&드롭으로 배치할 수 있다. 다른 애니메이션들도 추가하고 싶다면 애니메이션을 추..
[유니티] 이미지 반전 (transform.localScale) transform.localScale transform.localScale 을 이용하면 오브젝트의 이미지를 확대, 축소 시키는 것이 가능하다. transform.localScale 의 값은 벡터로 설정되어 있어서 이 값을 원하는대로 바꿔주면 된다. 만약 이미지를 4배 크게 하고 싶다면 transform.localScale = new Vector2(2, 2); 라고 작성하면 된다. 따라서 아래 코드처럼 작성한다면 w 키를 입력받았을 때 오브젝트의 크기가 4배로 커진다. 그러나 localScale 은 벡터값일 뿐이므로 w 키를 여러 번 누른다고 해서 계속 커지지는 않는다. 벡터값은 변함없이 (2, 2) 이기 때문이다. void Update() { if (Input.GetKey(KeyCode.W)) trans..
[유니티] GetComponent, AddForce AddForce Rigidbody 컴포넌트에는 AddForce 라는 이벤트함수가 내장되어 있다. AddFroce 메서드의 기능은 좌표를 입력받으면 해당하는 좌표의 값과 방으로 오브젝트에 힘을 가한다. 이 오브젝트를 스크립트에서 사용하기 위해서는 GetComponent 함수를 사용하여 컴포넌트를 불러와야 한다. void Update() { if (Input.GetKeyDown(KeyCode.LeftAlt)) GetComponent().AddForce(new Vector2(0, 500)); } 이 때 Rigidbody2D 를 여러 번 호출할 것을 예상하여 컴포넌트를 미리 불러오는 것도 가능하다. public class PlayerMove : MonoBehaviour { // Start is called be..
[유니티] 물리엔진, 충돌 (Rigidbody, Collider, OnCollisionEnter) 물리엔진 유니티는 물리엔진이 내장되어있어서 컴포넌트의 형태로 이를 제공하고 있다. 이를 이용해 우리는 물리현상을 직접 구현하지 않고 컴포넌트를 통해 사용할 수 있다. 계산비용 유니티에 내장되어있는 물리엔진은 계산 비용이 높다. 0.02초에 한번씩 호출하여서 물리 연산이 중요하지 않으면 이를 조정하여 최적화 하는 것도 가능하다. Edit - Project Settings - Time - Fixed Timesetp 에서 이를 조정할 수 있다. Rigidbody rigidbody 컴포넌트를 사용하면 해당 오브젝트는 유니티 물리 엔진의 영향을 받게 된다. 오브젝트에 컴포넌트를 추가하고 싶으면 Hierarchy 창에서 오브젝트를 선택한 후 Inspector 창에서 Add Component 를 눌러서 원하는 컴포넌..

728x90
반응형