본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티unity로 게임 만들기

유니티31_게임 제작 과정 09_아이템 기능 추가

Interface(인터페이스)를 이용한 아이템 기능 추가

 

앞 글에서 아이템은 4초 후에 사라지도록 코드를 작성했다.

이번에는 아이템이 사라지기 전에 투명도(Transparency)를 낮춰서 흐릿하게 하는 효과를 추가한다.

 

이 효과는 아이템 2개에 모두 적용해야 하므로 각 아이템 스크립트에서 '다중 상속'으로 구현할 수 있도록 Interface를 사용한다.

 

Item스크립트에 ITransparency라는 인터페이스를 만들고 그 안에 추상 메서드 GetOpaque( )도 정의한다.

 

*opaque : 불투명한

*get opaque : 불투명해지다

 

 

인터페이스의 멤버는 추상화(Abstraction)만 가능하므로 각 아이템 스크립트에서 정의한 메서드를 구현해야 한다.

 

 

클래스 Coin , SpeedUp에 인터페이스의 메서드를 구현하고 상속 받기 위해 인터페이스명을 추가한다.

인터페이스는 '다중상속'이 가능하므로 이미 Item클래스를 상속받고 있어도 추가할 수 있다.

 

아이템의 투명도 조절

이제 각 아이템의 GetOpaque메서드를 완성해야 한다.

이 메서드가 호출되면 아이템의 투명도가 낮아져서 흐릿하게 보이게 된다.

 

 

투명도는 Sprite Renderer의 Color에 있는 A 부분의 수치로 조절할 수 있다.

A는 Alpha(알파)를 나타내며 '알파값'이라고 부른다.

 

컴퓨터로 나타내는 이미지는 위 그림에서 보듯이 각각 255단계를 가지고 있는 R(빨강) G(녹색) B(파란색)을 섞어서 표현한다. 그래서 총 65000 가지 정도의 색을 표현할 수 있으며 이것을 'RGB 컬러' 체계라고 한다.

여기에다가 +알파로 투명을 조절하기 위해 'Alpha알파값' 255단계가 추가되었다.

 

그러므로 GetOpaque메서드에서 투명도를 조절하려면 Sprite Renderer 컴퍼넌트의 Color 프라퍼티(속성)에 접근하면 된다.

 

Color32는 32비트 포맷의 RGBA 색상을 나타낸다.

Color32는 UnityEngine에 있는 struct(구조체) 중의 하나이다.

 

먼저 Color32타입으로 itemColor라는 변수를 만들어서 GetComponent 메서드로 컴퍼넌트 SpriteRenderer의 color속성에 접근하여 현재 RGBA값을 저장한다.

다음 줄에서 SpriteRenderer의 color 속성에 Color32 생성자를 이용하여 인스턴스(객체)를 만들고 새 값을 전달한다.

기존 RGB값은 그대로 전달하고 A값만 새 값으로 저장한다.

 

GetOpaque메서드를 Coin, SpeedUp 스크립트 모두 수정한다.

이 메서드를 2초 후에 호출하도록 한다면 DestroyAfterTime메서드에 Invoke메서드를 이용하면 된다.

 

스크립트를 모두 저장하고 테스트 해보자.

 

 

2초 후에 아이템들이 흐릿해지는 것을 확인할 수 있다.

 

아이템 추가하기

여기서는 구현하지 않지만 만약 아이템 종류가 많아지면 enum(열거형)을 이용하면 편리하다.

 

Item.cs 스크립트에 PowerUp을 추가하여 아이템을 3종류로 늘이고 enum타입으로 정의하는 예를 살펴본다.

 

enum타입을 이용해서 각 아이템에 접근할 수 있다.

만약 enum 아이템 타입변환을 간단하게 하려면 아래와 같이 GetItem메서드를 만들면 된다.

 

35번 줄에 GameObject타입의 GetItem메서드를 만들고 enum타입의 아이템을 매개변수로 전달한다.

37번 줄에서 매개변수로 타입변환한 ItemPrefabs를 반환한다.

 

 

 

 

끝.

Wraven...