Table of Contents
트리거모듈은 Collision모듈과는 달리 월드객체랑 충돌감지를 할수없다.
저 리스트에 들어간 객체만 가능하다.
대신 보이는것처럼 Inside, Outside, Enter, Exit 4가지 경우의 콜백을 받을 수있다.
위에 링크된 유니티 Docs를 보면 알수있듯이
OnParticleTrigger()에서 트리거에 닿은 각 파티클들의 포지션을 알아낼수있다.
이 포지션에서 Physics.OverlapSphere() 같은 함수로 내가 원하는 오브젝트와도
닿았는지 확인할 수 있다.
위와같은 스킬에 사용했다.
박스 트리거를 두고 그곳에 원하는 파티클이 닿으면 파티클의 위치에서 OverlapSphere()로 근처에 원하는 객체가 있는지 판별했다.
내가 사용한 코드
List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
//List<ParticleSystem.Particle> exit = new List<ParticleSystem.Particle>(); // 당장은 필요없음
List<Vector3> lastParticlePos = new List<Vector3>();
private void OnParticleTrigger()
{
if (skillController == null)
return;
int numEnter = triggerParticle.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
//int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
for (int i = 0; i < numEnter; i++)
{
ParticleSystem.Particle p = enter[i];
Collider[] hits = Physics.OverlapSphere(transform.TransformPoint(p.position) + Vector3.up, skillController.MySkillData.colliderSize);
if (hits.Length > 0)
{
foreach (var hit in hits)
skillController.OnObjectTriggerEnter(hit);
}
lastParticlePos.Add(p.position + Vector3.up);
}
}
'Unity > C#' 카테고리의 다른 글
[C#]선택적 매개변수로 Color사용 / ?? 및 ??=, ?. 연산자 (0) | 2022.01.28 |
---|---|
[Unity] 카메라 장애물 회피 (0) | 2022.01.26 |
[C#] params 가변인자 매개변수 (0) | 2022.01.17 |
Unity 3D 모바일 터치이펙트 만들기 (0) | 2021.12.08 |
async콜백 안에서 Unity API 사용하기 (0) | 2021.11.09 |