✅ 요점 정리
EquipInfo가 struct이기 때문에
equipData[i].level = 1; 처럼 직접 수정해도 실제 배열 내부 값은 변경되지 않습니다.
struct는 값 타입이라, 배열에서 꺼내오면 복사본이 되기 때문입니다.
따라서, 수정하고 다시 배열에 넣어주는 방식이 반드시 필요합니다.
✅ 예시 비교
❌ 이런 방식은 작동안 함:
csharp
복사
편집
equipData[i].level = 1; // 복사본의 필드만 바꾸는 것이기 때문에 반영되지 않음
✅ 이렇게 해야 함:
csharp
복사
편집
EquipInfo tmp = equipData[i];
tmp.level = 1;
equipData[i] = tmp; // 다시 배열에 대입해야 변경사항이 저장됨
✅ 왜 struct는 이렇게 동작할까?
C#에서 struct는 값 타입이고, 배열이나 리스트에서 꺼내면 복사본이 만들어집니다.
따라서 equipData[i]는 복사본이며, 필드를 바꿔도 원본 배열 내부의 값은 변경되지 않습니다.
✅ 해결 방법은 2가지
① 지금처럼 계속 struct로 쓰되, 수정 후 다시 대입하는 방식 유지
csharp
복사
편집
EquipInfo tmp = equipData[i];
tmp.level = 1;
equipData[i] = tmp;
② EquipInfo를 class로 바꿔서 참조 타입으로 사용
csharp
복사
편집
public class EquipInfo
{
public int id;
public int level;
// ...
}
→ 이렇게 하면 equipData[i].level = 1; 만으로도 원본이 바뀜
→ 다만, class는 GC 부하가 있고, 값 복사와 무관한 로직에서는 주의 필요
✅ 추천 방식은?
장비 수가 많지 않고 메모리 효율이 중요하지 않다면 class로 바꾸는 것이 편합니다.
그러나 명확한 복사나 데이터 스냅샷이 필요한 경우라면 struct 유지가 유리합니다.
(예: 스탯 연산 중 임시 계산, Undo 기능 등)
✍️ 결론
struct일 경우는 필드 값 수정 후, 다시 배열에 대입해야 원본이 바뀝니다.
class라면 참조 타입이므로 직접 수정 가능합니다.
캐릭터 테두리
이미 보유시 골드 +10
컷씬 삽입 = 유니티 비디오 플레이어 -> 렌더텍스쳐. 이벤트 함수로 기능 연결 가능
그냥 이미지를 하위로 박아넣는다
맵 에셋 제작 시, 구름을 추가해서 조금 더 사실적으로 만듦