6.8
이펙트가 루프되는 경우, 이펙트가 사라질 때 바로 active를 끄면 안된다. 갑자기 사라져 어색하기 때문이다. 난 코루틴을 매우 싫어하지만, 이런 걸 처리하기엔 또 코루틴만한 게 없다.
오늘의 깨달음. 파티클의 라이프타임은 3가지가 있는데 Constant, ConstantMin, ConstantMax가 그것이다. 이 중 Constant는 항상 ConstantMax값과 같은 값을 리턴한다. 따라서 이걸 계산해 Duration으로 맞추고 Looping을 끄면 … 의미없네…? 그냥 Duration을 짧게 맞춰두면 된다. 게다가 길어봐야 5초니까…
…를 생각하다가 챗GPT에게 물어봤는데 훨씬 간단한 방법이 있다.(…)
public void RemoveLoop(GameObject effect)
{
ParticleSystem[] particles = effect.GetComponentsInChildren<ParticleSystem>();
foreach (ParticleSystem particle in particles)
{
particle.Stop();
}
StartCoroutine(CoroutineRemoveLoop(effect));
}
IEnumerator CoroutineRemoveLoop(GameObject effect)
{
ParticleSystem particle = effect.GetComponent<ParticleSystem>();
while (particle.IsAlive(true))
{
yield return null;
}
Remove(effect);
}
particle.Stop()은 생성을 멈추는 거고 IsAlive()는 잔여파티클이 완전히 사라졌는가 조사하는 것이다.

그른데 만들어놓고 보니 이거 찰 땐 불 안붙이는 게 자연스러워 보인다(…) 빼자.

파이어볼의 작은 파편 불꽃들은 이펙트가 명중한 후에도 남아야 한다. 하지만, 파이어볼 본체는 사라져야 어색하지 않다. 그렇기 때문에 2개의 처리는 다르다. 이걸 위해 발사체변수에 tailEffect를 넣었다.
아직 발사할 때와 맞을 때의 이펙트가 덜 됐지만 졸려서 여기까지.
6.9

‘마법을 사용하고 있다’라는 신호를 주기 위해 지팡이 끝에 이펙트를 달이야 한다. 이에 이펙트 탈부착 시스템이 필요했고, 이를 구현. 발사 이펙트 자체는 어려운 작업이 아니지만, 시스템을 잡느라 오래걸렸다. 그리고 알아낸 놀라운 사실. 지금까지 지팡이 본이 익스포트 안되고 있었다! 잘도 돌아갔군.
더불에 머티리얼 관리 문제도 새롭게 부상했다. 마법사라서 그런지, 생각보다 머티리얼이 많이 나온다.
6.10

이제 메테오를 만들자.

메테오- 두두두두

트레일도 달고,
이펙트는 끝나가지만 모션은 아직 더미이다. 일단 잡히는 모션에 이펙트를 추가하고, 애니메이션을 손보기로 하자.
6.11

잡기에 마법적인 요소가 들어있으므로, 이펙트를 추가하자.
이펙트를 만들고 붙이는 데 시간이 너무 오래 걸린다. 뭔가 좋은 방법이 있을 것 같은데…