public 변수 Script에서 변경후 Inspector 적용 안됨 참고하세요
public 로 선언되어 초기값이 있는 전역변수 를 스크립트에서 새로 생성하고
Inspector 에서 확인해보면 초기값이 0으로 표기되는 현상이 있었습니다.
이건 유니티의 '인스펙터에 값이 있으면 그 값이 스크립트창에서 초기화한 값보다 우선적용 됨'
인한 형상 입니다.
이걸 몰랐던 저는 코인 추가 관련 장에서 나와 저는 엄청 고생했습니다.
AsteroidScript 에서
기존 Speed 등 Inspector 에서 값을 수정등을 하고(스크립트에서 다시 변경 해도 Inspector에서 변경된 값은 변하지 않음..ㅠㅠ)
새로 스크립트에서 public float fCoin = 2f; 와같이 생성을 했지만
Inspector 에서는 변수의 값이 0으로 보여집니다.
EnemyScript 에서는 coin 값을 Start 함수에서 다시 값을 변경하여 대입하기에 문제가 없었습니다.
(테스트로 start함수에서 대입 안하고 전역변수에서 초기화 시 위와 같은 증상 발생)
이 문제는 Inspector 해당 컴포넌트 오른쪽 상단 Reset 버튼으로 해결 가능 합니다.
(대신 오브젝트 등 은 다시 끌어다 옴겨놔야 하는 번거로움이 있습니다..)
아니면 Start 함수에서 다시 초기화를 시켜주거나,
다른곳에서 참조하지 않는 변수라면, 게임 화면에서 값을 수정후 그값을 public 없이 스크립트에서 적용시켜주시면 됩니다.
답변 3
2
이런 방법은 어떨까요?
public으로 선언한 변수를 삭제 시키고 저장한 다음에 유니티를 한 번 컴파일시키고
다시 스크립트로 돌아와 삭제 시킨 변수를 선언하면 인스펙터를 리셋하지 않아도 됩니다
말씀해주신 거처럼 start 함수에서 값을 넣어주는 것도 좋고요
반대로 start에서 값을 넣어준 상태라면 인스펙터에서 설정한 값이 다음 실행 때 start에서 설정해준 값으로 변경된다는 것도 주의해야겠네요!
0
확실히 좋은 방법이긴 합니다만 직접 해보니 그 코드를 지우고 컴파일할 때 그 변수를 사용한 코드를 주석처리하거나 따로 처리하지 않으면 null오류로 인해 컴파일이 진행되지 않아 일일히 처리를 해야 하는 번거로움이 있었습니다.
두 방법 모두 알아두고 상황에 맞게 쓰면 좋을 것 같네요 b
캐릭터 변경에 관해
0
220
1
Asteroid 생성에 관련해서
0
182
1
Part4 유니티로 세가지의 게임만들기 강의
0
206
1
Clamp 사용 시 앞서 설정한 ViewportToWorldPoint의 min, max를 사용하지 않고 새로 설정하는 이유가 있을까요
0
268
1
섹션8 슈팅게임 프로토타입 만들기3(적과 발사체)
0
261
1
캐릭터 고정데이터 로딩 강의
0
319
1
Destroy 함수 질문
0
407
1
GetComponent 강의 질문
0
339
1
transform.position과 transform.Translate 의 차이가 뭔가요??
0
1906
1
강의도중 질문이 있습니다
0
485
1
강의자료
0
279
0
117강 구조체를 정의하여 ShipData 구성
0
218
0
굳이 InitTime을 만들어서 호출 하는 이유가 있나요?
0
287
0
GameManager 의 Start()가 스페이스 누를때마다 반복실행됩니다.
0
409
1
Collider인 other.gameObject;
0
423
0
Generic에 대한 질문이 있습니다.
0
257
0
gameObject.setActive(false);
0
575
1
애플 앱스토어
0
240
0
비주얼스튜디오 오류
0
2140
1
part4강의
0
307
1
발사체 스피드
0
288
1
4분 44초 제가 이해한게 맞는지 궁금합니다
0
259
1
2분 44초 왜 void 함수를 써야하나욤..?
0
349
1
해당 부분 업데이트
0
254
1





