๊ฐ์๋ณด๊ณ ๋ฐ๋ฏธ์ง ๋ฐ์ ๋ ๋น๋๊ฒ ํ๋ ์ฉ๋๋ก gui/text shader ๋ฉํ ๋ฆฌ์ผ ๋ง๋ค๊ณ ์ฝ๋๋ก ๋ง์ ๋ ๋ฉํ ๋ฆฌ์ผ ๋ฐ๊พธ๋ ์์ผ๋ก ๊ตฌํํ๋๋ฐ
์์์ฒ๋ผ ํ๋ ์ด์ด๋ ๊ด์ฐฎ์๋ฐ ์ ์ด ํผํด๋ฅผ ์ ์ ๋ค์๋ถํฐ ๋ชจ์ต์ด ์กด๋ ์ด์ํด์ง
vfx์ฝ๋๋ ์ด๋ ๊ฒ ์๊ฒผ๋๋ฐ ๋ญ๊ฐ ๋ฌธ์ ์ธ๊ฑฐ์? ์ ๋๋ ๊ด์ฐฎ์๋ฐ ์ ๋ง ์ ์ง๋์ธ๊ฑฐ์ง
public class EntityVFX : MonoBehaviour
{
ย ย private SpriteRenderer sr;
ย ย [Header("On Damage VFX")]
ย ย [SerializeField] private Material onDamageMaterial;
ย ย [SerializeField] private float onDamageVFXDuration = .2f;
ย ย private Material originMat;
ย ย private Coroutine onDmgVfxCO;
ย ย private void Awake()
ย ย {
ย ย ย ย sr = GetComponentInChildren<SpriteRenderer>();
ย ย ย ย originMat = sr.material;
ย ย }
ย ย public void PlayOnDmgVFX()
ย ย {
ย ย ย ย if(onDmgVfxCO != null)
ย ย ย ย ย ย StopCoroutine(OnDamageVfxCO());
ย ย ย ย onDmgVfxCO = StartCoroutine(OnDamageVfxCO());
ย ย }
ย ย private IEnumerator OnDamageVfxCO()
ย ย {
ย ย ย ย sr.material = onDamageMaterial;
ย ย ย ย yield return new WaitForSeconds(onDamageVFXDuration);
ย ย ย ย sr.material = originMat;
ย ย }
}
์คํํ๊ณ 1์ด๋ง์ ๋ณด๊ธฐ ์ซ์ด์ง๋ ํ์ง์ธ๋ฐ
onDmgVfxCO ๋ผ๋ ์ฝ๋ฃจํด ๋ฌ๋๊ฐ ์คํ์ค์ธ์ง ํ๋จํ๋ ์ฝ๋๊ฐ PlayOnDmgVFX'() ์์ ๋ฃ์ด๋๊ฑฐ ๊ฐ์๋ฐ ๋ง์ StopCoroutine์ OnDamageVFXCO()๋ก ๋ค์ด๊ฐ์์.
๊ทธ๋ฆฌ๊ณ ์์ด๋๊ฐ ์ด๋ค์์ผ๋ก ๋ง๋ค์ด์ ธ์๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, Sprite์ ํ์ผ๋ง์ด ์งํ ๋๊ณ ์๋๊ฑฐ ๊ฐ์
์ง๋ฌธ์ฌ๋ฆด ๋ ์ธ์คํํฐ ์ฌ์ง์ด๋ ์ด๋ฐ๊ฒ๋ ๊ฐ์ด ์ฌ๋ ค์ฃผ์ธ์. ์ด๊ฒ๋ง ๊ฐ์ง๊ณ ๋ชป์ฐพ์ต๋๋ค. shaderedmaterial์ material ๋์ ์จ์ ํด๊ฒฐ๋๋ฉด uv์ ๋ํด์ง๋ ๊ฐ์ด ์๋ณต์ด ์๋๋๊ฑฐ๋๊น ํผ๊ฒฉ์์ ๋ฉํฐ๋ฆฌ์ผ ๋ณ๊ฒฝ์ ๋ค๋ฅธ ์ ฐ์ด๋๋ก ํ์