처음에 단 하나의 오브젝트에 붙어있던 스크립트 컴포넌트를 다른 오브젝트에 그대로 복사해서 붙여넣은뒤, 다른 오브젝트에서 이 스크립트를 이용한 로직을 구현하기 위해서 가장 처음에 붙어있던 스크립트 컴포넌트는 체크박스를 해제해놓은 상태로 두었다.
이렇게 구현해놓고 난뒤에 지속적으로 씬을 리로드 했을시에 비정상적인 동작이 발생하고 오로지 저 스크립트 컴포넌트에서만 제어할 수 있는 bool 값이 의도치않게 변경되는 상황, 혹은 다른 경우는 NullReferenceException이 발생하는 경우가 생겨서 1차 적으로는 설정에 있는 Script Execution Order의 문제인가 싶었으나, 혹시 위의 스크립트 컴포넌트가 다른곳에서도 붙어있고 그게 영향을 미치는지 찾아보았을때 결국 체크박스를 해제한것과 해제하지 않은 딱 두 오브젝트에만 붙어있는 것을 발견해서 어쩌면 체크박스를 해제하는것도 결국에는 스크립트를 완전하게 비활성화 하는것이 아닐지도 모른다는 생각에 위와 같은 실험을 해보게 되었다.
그 결과 오브젝트에 스크립트가 부착되어 있는 경우, 체크박스가 해제되어 있다고 하더라도 Awake() 에 작성한 코드의 경우는 정상적으로 동작하는 모습을 발견할 수 있었다( Start() 의 경우는 동작하지 않았다)
결국 체크박스를 해제하더라도 스크립트는 정상적으로 동작하는 부분이 존재하는 것이고, 그 부분때문에 의도하지 않은 비정상적인 로직이 실행되면서 원인을 알 수 없는 형태로 로직이 동작한것으로 보여진다.
그리고 위의 스크립트의 경우는 싱글턴 패턴으로 작성된 스크립트이기도 하였기에 일단 현 상황에서의 완전하게 내부 변수들에 어떤 영향을 미쳤는지 명확하게 확인하기에는 시간을 할애할만한 상황이 아니라 더욱 면밀하게 조사하지는 않겠으나, 이와같이 혹시나 스크립트를 붙이는 오브젝트를 바꿀때 위와같이 체크박스를 해제하는것이 해당 스크립트를 모두 완전하게 비활성화 하는것이 아님을 주의하도록 하자.
그리고 위와 같은 내용에 대해서 ChatGPT 에 대해 검색해본 바를 첨부해보면,
Unity에서 스크립트 컴포넌트에 체크박스가 있는 경우와 없는 경우는 다음과 같습니다:
1. **체크박스가 있는 경우**: 이 경우는 해당 스크립트가 활성화되어 있음을 나타냅니다. 즉, 해당 스크립트가 게임 오브젝트에 부착되어 있고 활성화된 상태입니다. 활성화된 스크립트는 게임이 실행될 때 동작하게 됩니다.
2. **체크박스가 없는 경우**: 이 경우는 해당 스크립트가 비활성화되어 있음을 나타냅니다. 즉, 해당 스크립트가 게임 오브젝트에 부착되어 있지만 비활성화된 상태입니다. 비활성화된 스크립트는 게임이 실행될 때 동작하지 않습니다.
스크립트 컴포넌트에 체크박스를 해제한다면, 해당 스크립트는 비활성화됩니다. 이는 해당 스크립트에 의해 제어되는 기능들이 비활성화되어 동작하지 않음을 의미합니다. 예를 들어, 스크립트가 해당 게임 오브젝트를 움직이거나, 렌더링을 변경하거나, 상호작용하는 기능을 제어한다면, 비활성화된 스크립트는 이러한 동작들을 수행하지 않습니다.
그러나 비활성화된 스크립트에는 여전히 코드가 남아 있고, Unity에서는 해당 스크립트의 메서드들이 호출될 수 있습니다. 예를 들어, 비활성화된 스크립트의 `Start()` 메서드나 `Update()` 메서드는 게임이 실행될 때 호출되지 않지만, 다른 스크립트나 이벤트에 의해 명시적으로 호출될 수 있습니다. 따라서 스크립트가 비활성화된 경우에도 해당 스크립트의 메서드들이 호출될 수 있습니다.
이런 특성은 특정 상황에서 유용하게 사용될 수 있습니다. 예를 들어, 게임의 특정 이벤트나 조건에 따라 동적으로 스크립트를 활성화하거나 비활성화할 수 있습니다.
위와 같은 답변을 얻을 수 있는데, 이때에
< 비활성화된 스크립트에는 여전히 코드가 남아 있고, Unity에서는 해당 스크립트의 메서드들이 호출될 수 있습니다. 예를 들어, 비활성화된 스크립트의 `Start()` 메서드나 `Update()` 메서드는 게임이 실행될 때 호출되지 않지만, 다른 스크립트나 이벤트에 의해 명시적으로 호출될 수 있습니다>
이와 같은 내용을 볼때, 체크박스는 해제되어 있으나 다른곳에서 해당 스크립트의 메서드를 호출 할 수 있다는 부분을 보면 체크박스 해제한 뒤에 그와 같은 용도로 사용해볼 수 있을 수도 있겠다는 생각이 들고, 의도하지 않은 로직이 동작하던것을 납득할 수 있는 내용이었다 ( 지속적으로 해당 스크립트 내부에 있는 메서드를 호출하고 있었다)
이와 같은 내용에 유의하고, 스크립트의 부착 오브젝트를 바꿀때는 꼭 해당 스크립트를 제거하고 다른 오브젝트에 새롭게 붙이도록 하자. 그리고 체크박스를 해제하더라도 메서드를 호출하는 것을 사용해야할 경우가 발생하면 사용해보도록 하자 ( 물론 GPT 답변이 완벽한것은 아니어서, 체크박스가 해제되어있어도 Start() 가 동작한다거나 하는 틀린 사실을 알려주기도 하니까 이것은 해당 기능이 필요할때 확실하게 확인해보도록 하자. 체크박스가 해제되어 있으면 Awake() 는 동작하지만 Start() 는 동작하지 않는다 )