본문 바로가기

카테고리 없음

[유니티]Material의 Emission 색상값을 루프하여 변화시키기

[Emission 스크립트로 변경하기]

[본문]

material의 emission에 접근하여 색상을 변화하는 방법은 다음과 같다 .

_skinMaterial = GetComponent<Renderer>().material;
_skinMaterial.EnableKeyword("_EMISSION");	//아래 메서드를 사용하기 위해서는 초기화단계에서 필요함
 _skinMaterial.SetColor("_EmissionColor", Color.black);

[Emission 스크립트로 루프하여 변경하기]

[본문]

깜빡이는 듯한 효과를 주고자 한다 .

   [Header("목표색상")]
    [SerializeField]Color TargetColor;
    
 	[Header("깜빡이는 시간")]
    [SerializeField] float _blinkTime = 1f;
    [Header("색 변화시 딜레이 시간")]
    [SerializeField] float _delayTimeSec = 0.1f;
    WaitForSeconds _delayTime;

IEnumerator IESkinBlink()
    {
        float leftTime = _blinkTime;
        float delaySec= _delayTimeSec;
        _delayTime = new WaitForSeconds(_delayTimeSec);
        yield return null;

        while (true)
        {
            _skinMaterial.SetColor("_EmissionColor", GetColor(leftTime));
            leftTime -= delaySec;
			
            //루프를 위한 처리
            if (leftTime <= 0 || leftTime > _blinkTime)
                delaySec = -delaySec;

            yield return _delayTime;
        }
    }
    
    public Color GetColor(float leftTime)
    {
    	//Lerp를 통해 값을 전달 . 0에 가깝다면 앞쪽컬러, 1에 가깝다면 뒤쪽 컬러를 반환한다
        return Color.Lerp(Color.black, TargetColor, (_blinkTime - leftTime) / _blinkTime);
    }

 

[출처]
Terresqual blog -Getting your emission maps to work in Unity