비슷한 질문을 묻는 질문을 받았지만 지금하고 싶은 것에 대한 적절한 답변을 찾을 수 없었습니다.C# 돌아 가기 참조
변수를 전달할 때 변수를 설정 해제하는 함수가 있습니다.
void DestroyEquippedItem (GameObject itemSlot)
{
if (itemSlot == itemSlot1) {
Destroy (itemSlot1);
itemSlot1 = null;
itemScript1 = null;
return;
}
if (itemSlot == itemSlot2) {
Destroy (itemSlot1);
itemSlot2 = null;
itemScript2 = null;
return;
}
}
여기에는 8 개의 항목 슬롯과이 슬롯에서 작업을 수행하는 몇 가지 다른 기능이 있습니다. 이 기능들 각각은 거의 동일하게 보입니다. 8 개의 "if"명령문 목록은 수정하려는 항목 슬롯을 파악하기 위해 내려갑니다. 나는 그런 다음 그래서
void DestroyEquippedItem (GameObject itemSlot)
{
Destroy (GetSlotFromSlot (itemSlot));
GetSlotFromSlot (itemSlot) = null;
GetScriptFromSlot (itemSlot) = null;
}
같은 것을 내 DestroyEquippedItem 기능을 바꿀 것
GameObject GetSlotFromSlot (GameObject itemSlot)
{
if (itemSlot == itemSlot1)
return itemSlot1;
if (itemSlot == itemSlot2)
return itemSlot2;
}
로, 내가 다른 기능을 가진 아이템 슬롯에 대한 참조를 반환하여이 작업을 수행 할 수있는 더 좋은 방법을 발견했다고 생각 내 질문은 기본적으로 "내가 뭘 잘못하고 있니?"
나는 왼손잡이 과제를 할 수 없다는 것을 알고 있지만 수정할 항목에 대한 참조를 반환하면이 점을 쉽게 알아볼 수 있고 코드를 많이 줄일 수 있습니다. 내가 한 일을 할 수있는 방법이 있습니까?
부록 : itemSlot1, itemSlot2, itemScript1, itemScript2 등은 모두 인벤토리의 클래스 수준 변수입니다. 위에 표시된 이러한 기능은 또한 인벤토리에 있습니다. Destroy
가하고 있지만, 당신은 당신의 get 메소드의 결과를 저장하고 그들에게 널을 할당하는 지역 변수를 사용할 수 있습니다 확실하지
Public Class Inventory : MonoBehaviour
{
GameObject itemSlot1;
GameObject itemSlot2;
EquipItem itemScript1;
EquipItem itemScript2;
//etc...
void DestroyEquippedItem(...)
{
...
}
}
파괴는 유니티 방법이다
그러나, 당신이하고 싶은 것 것은 파괴하고 itemSlot 목록에있는 개체 중 하나를 무효화 단순히 . 게임 객체를 다음 프레임에서 제거 할 플래그로 지정하여 간단하게 처리합니다. 편집 : 제출하겠다는 뜻이 아니 었습니다. 지역 변수를 사용하지 않으면 지역 변수가 null로 설정됩니까? 클래스 수준 변수를 null로 설정해야합니다. – Jordan
로컬 변수에는 클래스 수준 변수와 동일한 객체를 가리키는 참조가 지정됩니다. 그래서 GetSlotFromSlot과 GetScriptFromSlot에서 반환하는 것과 동일한 것입니다. –