📝 스크립트
public void AddPassiveEffect(PassiveType passiveType, float duration, float multiply)
{
PassiveData newPassive = new PassiveData(passiveType, duration, multiply);
foreach (PassiveData currentPassiveData in mCurrentPassive)
{
//만약 이미 해당 패시브가 있으면서, 강도(multiply)가 같다면?
if(currentPassiveData.Passive == newPassive.Passive && currentPassiveData.PassiveEffectMultiply == multiply)
{
//해당 패시브는 제거
SubPassiveEffect(currentPassiveData);
}
}
switch(newPassive.Passive)
{
case PassiveType.HASTE:
{
mBaseMovementSpeed += PassiveEffect._Movement_Sensitivity * multiply;
break;
}
}
mCurrentPassive.Add(newPassive);
}
❗ 원인
- foreach문을 실행하는 도중 foreach문을 참조하는 객체가 변경됨
- 이 스크립트에서는 특정 조건에 맞으면 객체에 있는 요소를 제거하는 방법으로 인해 오류
✅ 해결 방법
- 반복문 도중에 객체 자체를 변경시켜야하는경우에는 for문을 사용하는것이 적합해보임.
public void AddPassiveEffect(PassiveType passiveType, float duration, float multiply)
{
PassiveData newPassive = new PassiveData(passiveType, duration, multiply);
for(int i = mCurrentPassive.Count -1; i >= 0; --i)
{
//만약 이미 해당 패시브가 있으면서, 강도(multiply)가 같다면?
if(mCurrentPassive[i].Passive == newPassive.Passive && mCurrentPassive[i].PassiveEffectMultiply == multiply)
{
//해당 패시브는 제거
SubPassiveEffect(mCurrentPassive[i]);
}
}
switch(newPassive.Passive)
{
case PassiveType.HASTE:
{
mBaseMovementSpeed += PassiveEffect._Movement_Sensitivity * multiply;
break;
}
}
mCurrentPassive.Add(newPassive);
}
'unity etc. > others' 카테고리의 다른 글
[유니티] 텍스트 맨 앞에 표시하기 (0) | 2023.03.10 |
---|---|
유니티 TMP 폰트 한번에 모두 바꾸기 (0) | 2023.01.11 |
[유니티] 오디오믹서 사운드 관리 (0) | 2022.11.21 |
유니티 애니메이션 합치기(애니메이션 레이어, 마스크) (2) | 2022.11.21 |
유니티 안드로이드 지원 게임 빌드하기 (0) | 2022.11.05 |