A 게임 오브젝트에는 Monster_small_human.cs 와 Piece.cs 가 있습니다
Piece.cs 안에있는 pieceState 를 Monster_small_human.cs 에서 자주 호출할것 같아서
똑같이 PieceState 변수를 선언하고
Start 함수에서 GetComponent<Piece>로 집어 넣었습니다.
근데 했갈리는게 있습니다
저런식으로 선언하게 되면 Piece.cs 에있는 pieceState 변수를 그때 그때 사용하는것이 아니라
Monster_small_human.cs 에 변수 값만 복사해온 별개의 pieceState를 사용하는 것이 아닌가요?
GetComponent를 매 프레임 난사 하듯이 호출하게 되면 성능적으로 안좋다고 들어서 검색해봤는데 저런식으로 하라고 나와있더라구요..
제가 설명을 잘 못했으면 다시한번 적도록 하겠습니다..
1. 컴포넌트는 클래스 = reference type이라서 복사가 이루어지지 않음. 정확히는 대입식으로 참조가 복사되는거임. 포인터 개념 이해해야 되서 이건 그냥 모르겠다 싶으면 참조 쪽 공부를 다시하면 될듯. 2. GetComponent는 코스트가 생각보다는 안 큼. 코스트가 정말 큰건 GetComponentsinChildren같은 그때그때 다시 계산해야되는거. GameObject.Find 이런거. 이런건 진짜 절대로 Update에서 하면 안되고, GetComponent는 그렇~게까지 코스트가 크진 않음. 하지만 캐싱하면 좋다는 점은 물론 맞음. 이 경우에는 캐싱해서 쓰는게 맞음.
요약 - 복사해온 별개의 pieceState 쓰는게 아님. 같은거 쓰는거임. 같은 pieceState를 가르키는 거임. 이럴 경우, pieceState가 Monster_small_human 생성시부터(Start)계속 있다면 문제 없음 하지만 중간에 pieceState가 새로운걸로 바뀐다? 그럼 문제 생김.
ㄴ 와... 알고싶은거 정확히 알게 됬습니다 답변 감사합니다 굳
굳굳
연결선? 같은거 촉수 꽂고 조종하는 느낌임 - dc App
다시 보니까 piece가 클래스(컴포넌트)고 pieceState는 enum이네... enum은 value type이니까 복사해오는게 맞아. 코드를 다 안봐서 모르겠는데 원하는거 해결하려면 위 코드처럼 pieceState를 캐싱하지말고 piece를 캐싱하셈