호우동의 개발일지

Today :

article thumbnail

이번에 할 구현은 저번 #6에 이은 동작에 관한 구현이다.


#6 포스팅은 간단하게
빨간 볼을 크게 키운 뒤 위로 쏘는 액션을 구현한 것이다.

 


자세한 것은 밑의 링크를 참고하길 바란다.

https://howudong.tistory.com/109

 

[Unity 3D] #6 애니메이션 상태 체크를 활용한 보스 스킬 구현 - Avoid Chess

스크립트 상에서 현재 애니메이션 상태를 받아오는 방법으로 가장 대표적인 것은 Animator 컴포넌트의 GetCurrentAnimatorStateInfo를 이용하는 방법이다. 여기서 가장 많이 보편적으로 사용하는 함수를

howudong.tistory.com

 

 

 

구현 목표


구현 목표
구현 목표 기획

#6 포스팅에서 만들어뒀던 빨간 볼이 하늘로 올라간다.


그리고 하늘 전체가 먹구름으로 가득 차듯이
날씨가 어두워지는 것을 표현한다.


화면 전체가 붉은 끼가 돌도록
조명을 붉은색으로 바꾼다.

 

 

 

구현 과정


1. 적절한 Material 생성

기존 조명색에서 변화된 조명색을 정해야 한다. 
그러기 위해서 적절한 색을 미리 정해보자.

 

 


미리 만들어져 있는 색을 쓰는 것보다는
내가 직접 만들어 쓰는 게 나을 것 같다.

 

 

Material 생성
색을 입히기 위한 Material 생성

 

오른쪽 마우스를 눌러서
Create -> Material을 만들어주자.


이름은 대충 번개 칠 때의 필드이름이기 때문이
Thunder_Field라고 했다.


 

 

Light 색 변경
Light Direct 색 변경해보기

 

그리고 Directional Light를 클릭해서
Light 컴포넌트의 Color를 조정해 보자.


그러면 그 색에 따라 게임씬의 색이 바뀔 것이다.

적절한 색

 

 

 

적절한 색 찾기

 

딱 이 정도 RGB가 눈도 안 아프고 표현도 잘 될 정도인 것 같다.

 


해당 RGB를 그대로 아까 만들어뒀던

Thunder_Field Material에 옮긴다.


 

 

 

2. 스크립트 구현

public class MagicCloud : MonoBehaviour
{
    [SerializeField] Light fieldLight;
    [SerializeField] Material fieldColor;
    private void StartThunderField()
    {
        // 메모리 낭비를 막기 위해 보이지않는 레드볼 이펙트 비활성화
        redBall.SetActive(false);
        StartCoroutine(DarknessAction());

    }
    private IEnumerator DarknessAction()
    {
        while (fieldLight.color != fieldColor.color)
        {
            fieldLight.color = Color.Lerp(fieldLight.color, fieldColor.color, 0.1f);
            yield return null;
        }
    }
 }

직접참조로 Light 컴포넌트와
아까 만들어뒀던 Thunder_Field Material을 받는다.


조명을 바꾸는 작업을 담당하는
DarknessAction 코루틴을 만든다.

 

현재 조명의 색이
Thunder_Field Material의 색과 같을 때까지 조금씩 색을 바꾼다.


Color.Lerp를 사용하여 점차 색을 바꾼다.

찾은 색을 스크립트에 넣는다.
찾은 색을 매터리얼에 넣고 스크립트에 넣는다.

그 후 에디터상에서 스크립트에 해당 오브젝트들을 넣어준다.

 

 

 

구현 결과


구현 결과는 다음과 같다.
구현 결과는 다음과 같다.

공이 쏘아진 뒤 정상적으로
조명이 붉게 변하는 것을 확인할 수 있다.


더불어 한 번에 변하는 것이 아닌 부드럽게 점차적으로 변한다.