반응형
캐터펄트로 실험을 했는데,
첫 1회만 돌이 날아가고 그다음부터는 Particle Effect만 보이고 돌은 안날아감.
날아가는 물체는 Effect Obj, Attack Object 컴포넌트를 가져야 함.
Effect Obj Pool 구성 요소는 맵에서 효과 및 공격 오브젝트에 대한 Pool 역할을합니다. RTS Engine 메뉴 편집기를 사용하여 새지도를 만들 때이 구성 요소는 "AttackManager"라는 개체에 연결됩니다.
- Code: Make sure that every effect object has a unique code so that the effect object pool can distinguish between different effect objects.
- Enable Life Time: When enabled, the effect object will have a life time during which it will be shown when activated. When disabled, the effect object will have to be manually hidden.
- Default Life Time: When life time is enabled, this is the default life time (in seconds) of the effect object.
- Disable Time: Time (in seconds) to keep displaying the effect object after it’s marked as disabled. During this time, the effect object won’t be able to be fetched to be re-used again by the effect object pool. This can be useful to allow time for a particle system that’s attached to the effect object to stop and not just disappear instantly.
- Spawn Position Offset: Offset the spawn position by this vector.
- On Enable Event: Methods from other components to call when the effect object is enabled.
- On Disable Event: Methods from other components to call when the effect object is disabled.
비활성화 시간 : 비활성화 된 것으로 표시된 후 효과 객체를 계속 표시하는 시간 (초)입니다. 이 시간 동안 효과 개체 풀에서 다시 사용하기 위해 효과 개체를 가져올 수 없습니다. 이는 효과 오브젝트에 연결된 입자 시스템이 즉시 사라지는 것이 아니라 중지되는 시간을 허용하는 데 유용 할 수 있습니다.
① Disable Time을 0으로 한다.
② On Disable Event() : 적에게 명중해서 이 이벤트가 없어질 때
GameObject.SetActive밑에 Check
EffectObj.cs
(전체코드 아님)
[SerializeField]
private UnityEvent onDisableEvent = null; //invoked when the effect object is disabled.
void Update ()
{
if (CurrentState != State.inactive) //if the effect object is not inactive then run timer
{
if (timer > 0.0f)
timer -= Time.deltaTime;
else //life timer is through
{
switch (CurrentState)
{
case State.running: //if the effect object is running (active)
if (enableLifeTime == true) //make sure the life time is enabled
Disable(); //disable the effect object
break;
case State.disabling: //if the effect object is getting disabled
DisableInternal(); //disable the effect object completely
break;
}
}
}
}
//hide the effect object
public void Disable()
{
if (CurrentState == State.disabling) //if the effect object is already being disabled
return;
onDisableEvent.Invoke(); //invoke the event.
timer = disableTime; //start the disable timer
CurrentState = State.disabling; //we're now disabling the effect object
}
반응형
'Unity > Asset 분석' 카테고리의 다른 글
[RTS Engine] 더블탭으로 SelectionBox 그리기 (0) | 2021.06.08 |
---|---|
[RTS Engine] 공격 사거리 (0) | 2021.06.04 |
[RTS Engine] 유닛 공격(Attack) (0) | 2021.05.31 |
[RTS Engine] 편(Faction) 설정하기 (0) | 2021.05.31 |
[RTS Engine] Sample Scene에서 유닛 이동이 안될 때 (0) | 2021.05.30 |