• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

public 변수 Script에서 변경후 Inspector 적용 안됨 참고하세요

21.02.26 11:41 작성 조회수 4.04k

2

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에서 설정해준 값으로 변경된다는 것도 주의해야겠네요!

코리니님의 프로필

코리니

2022.09.15

확실히 좋은 방법이긴 합니다만 직접 해보니 그 코드를 지우고 컴파일할 때 그 변수를 사용한 코드를 주석처리하거나 따로 처리하지 않으면 null오류로 인해 컴파일이 진행되지 않아 일일히 처리를 해야 하는 번거로움이 있었습니다.

두 방법 모두 알아두고 상황에 맞게 쓰면 좋을 것 같네요 b

2

hjoo님의 프로필

hjoo

2021.02.26

좋은 정보 감사드려요!!!

0

Jeura 1님의 프로필

Jeura 1

2021.12.26

와 시발 사랑해요