분류 전체보기 77

유니티 - 2D Sprite를 이용한 체력바(게이지바) 구현하기

2D Sprite를 활용하여 체력바(게이지바)를 간단하게 구현하는 방법이 있다.만일 3D 프로젝트라 2D Sprite가 없는 경우엔 패키지에서 설치하도록 하자 먼저 패키지 매니저에서 2D Sprite를 설치한다. 프로젝트 뷰에서 2D - Sprites - Square 생성 UI - Image 로 체력바가 들어갈 이미지를 만듬  만든 Square Sprites를 이미지의 Source Image에 넣어준다. 체력바를 만들것이니 색상을 빨간 색으로 해두면  체력바를 만들 수 있다.  이는 이미지 컴포넌트의 Fill Amount가 1일 때의 모습이다.  만일 Fill Amount가 0이 되면  빈 게이지가 만들어진다. 이 Fill Amount 값을 조절하여 게이지를 구현할 수가 있게 된다. Fill Amount..

유니티 2024.05.30

Unassigned/Null Reference Exception 해결법

오늘 공부를 하면서 정말 Unassigned와 Null 관련 오류로 많은 곤혹을 치룬 하루였다. Unassigned Reference Exception 먼저 Unassigned의 사례를 보자 UIInventory 스크립트의 inventoryWindow 변수에 값이 할당되지 않았다고 한다. 고로 인스팩터 창에서 할당해주라는 메세지이다.그러면 할당을 해주면 그만인데... 문제는 인스팩터 창에서 분명히 게임 오브젝트를 넣어줬다는 사실이다. 그러면 대체 왜 이런 에러가 발생한걸까? 그 이유는 황당하게도...  전혀 UI와 상관없는 나무 게임오브젝트에 UI Inventory가 부착되어있던 것이다...실수로 스크립트를 추가한 것으로 보인다..  만일 이와 같은 실수를 한 거로 의심될 때 많은 게임오브젝트가 있을 때..

유니티 2024.05.29

유니티 - 대체 인터페이스를 왜 쓰는걸까?

인터페이스라 하면 공통적인 동작을 정의해 두는 것이고 추상화가 가능하고 다중 상속이 가능하고 상속 시 반드시 구현해야한다는 강제성을 가지고 있다. 사실 이렇게만 들으면 대체 왜 쓰는 지 감이 잡히질 않는다. 객체지향적인 코드를 짜려면 우리는 클래스 간의 의존도를 낮춰 결합도를 낮춰야한다. 클래스 간의 의존도가 높게 되면 다른 사람이 어떤 클래스를 수정시에 내가 만든 클래스를 수정하게 될 수도 있다. 즉 다른 하나를 수정하면 남이 만든 다른 클래스도 건들일 수 있다는 것이다. 그렇기에 결합도는 낮추고 코드 내의 응집도를 높여야 한다는 것이다. 응집도를 높이려면 코드 내의 기능들이 그 코드안에서 수행되고 끝날 수 있도록 해줘야한다. 그렇기에 구체적인 클래스를 상속받는 것이 아닌 기능 별로 쪼갠 인터페이스를 ..

유니티 2024.05.28

유니티 -절차적 Skybox 만들기

Assets폴더에 Materials 폴더를 만들고 Skybox 이름의 Material을 생성 쉐이더를 Skybox/Procedural로 변경, Procedural은 절차적이라는 의미이다. 이제 머테리얼을 적용시켜보자  Window - Rendering - Lighting   Environment의 Skybox Material에 아까 만든 Skybox를 넣어 머테리얼을 적용시킴  머테리얼 값을 조절하면서 원하는 Skybox를 만들어보자 해의 크기, 하늘과 땅의 색을 변경해줄 수 있으며Exposure(노출) 값이 커질 수록 쨍한 느낌을 준다.  스카이박스를 설정해준 모습 절차적 스카이박스의 속성에 대한 자세한 정보는 https://docs.unity3d.com/kr/2019.4/Manual/shader-sk..

유니티 2024.05.27

C# - Clamp 함수와 사용 예제

Clamp 함수가 무엇이며 어떨 때 쓰이는 지 알아보도록 하자 Mathf.Clamp 함수는 한마디로 value값을 제한해주는 함수이다. value 값이 min 값보다 작으면 min 값으로, max 값보다 크면 max값으로 만든다. 사용되는 예를 보면 이해가 쉽게 된다. 게임에서 플레이어의 현재 체력은 0보다 낮아선 안되고 최대체력을 넘어서는 안될 것이다. 이것을 Clamp 함수를 통해 제한해줄 수 있다.0은 최솟값, 최대체력이 최댓값이 된다. 코드로 작성해보면CurrentHealth = Mathf.Clamp(CurrentHealth, 0, MaxHealth); 이런 식으로 간단하게 현재 체력을 제한해줄 수가 있는 것이다. 적에게 공격당해도 체력은 0 밑으로 떨어지지 않을 것이고 체력을 회복하더라도 최대 ..

C# 2024.05.27

C# - 프로퍼티와 쓰는 이유

굳이 private가 있는데 프로퍼티를 쓸 필요성이 있냐 이거다.심지어 유니티에선 [SerializeField]를 통해 인스팩터 창에서 private 변수에 값을 넣어줄 수 있도록 할 수 있다. 그런데도 왜 써야하는가...? 어찌보면 당연한 것인데 private로 선언한 변수는 다른 클래스에선 참조를 할 수가 없다. 그렇기 때문에 c++에선 get과 set을 통해 참조하고 값을 변경할 수 있도록 한것인데 C#에선 이것이 프로퍼티를 통해 쉽게 가능해진다.//c++private int num;int GetNum(){ return num;}void SetNum(int num){ this.num = num;}//c# 프로퍼티public int Num { get; set; } 코드가 깔끔해지는 것을 볼 수가 있다..

카테고리 없음 2024.05.26

유니티 - 애니메이션

Animation2D Sprite Animation은 이미지를 빠르게 전환시켜 움직이는 거처럼 보이게함, 프레임수가 낮으면 끊겨보일 수 있어 어느정도 프레임을 만들어줘야함2D Bone Animation이나 3D 애니메이션은 스프라이트 방식은 바로바로 바뀐다면 얘는 중간에 보간처리를 하게된다. 그렇기에 스프라이트 방식보단 부드러워보인다. Animation Component간단한 애니메이션에 쓰긴하지만 Animator 컴포넌트를 주로 쓰게 된다. 간단한 상황이 없다시피함... Animator아무것도 안하는 Idle 상태, 뛰는 Run상태 공격하는 Attack 상태 등 애니메이션엔 상태들이 있다. 애니메이터에선 그러한 상태를 정의할 수 있고 상태 간에 왔다갔다 하는 전이(transition)을 정의를 할 수가..

유니티 2024.05.24