왜 transform.position.x를 직접적으로 수정 할 수 없을까??

2023. 9. 4. 11:18·Unity
반응형

가장 인기 있는 게임 개발 플랫폼 중 하나인 Unity는 유연하고 최적화된 다양한 기능을 제공합니다. 그러나 이러한 유연성을 통해 특정 복잡성을 이해할 필요가 있습니다. 많은 신규 사용자들을 곤혹스럽게 하는 특징 중 하나는 Transform.position 속성의 x 구성 요소(y 또는 z)를 직접 수정할 수 없다는 것입니다.


불변 벡터

Unity에서 transform.position 속성은 월드스페이스에서 GameObject의 위치를 나타내는 Vector3 객체를 반환합니다. 그러나 Vector3 구조는 불변입니다. 불변의 객체나 구조는 만들어진 후에 상태나 값을 수정할 수 없습니다.

즉, transform.position에서 Vector3을 가져오면 실제 위치 데이터에 대한 참조가 아닌 위치의 복사본을 얻게 됩니다. 따라서 이 Vector3의 구성 요소 하나만 변경하면 원래 데이터에 영향을 미치지 않습니다. 대신 C#에서 허용하지 않는 복사본을 수정하려고 합니다.

 

단일 구성 요소를 변경하는 방법

구성 요소를 직접 변경할 수는 없지만 Unity는 이 문제를 해결하는 쉬운 방법을 제공합니다. 다음은 변환 위치의 단일 구성 요소를 효과적으로 수정하는 방법입니다:

Vector3 newPosition = transform.position;  // Get a copy of the position
newPosition.x = 5;  // Modify the copy
transform.position = newPosition;  // Assign the modified copy back

이 접근 방식에서는 변환 위치의 복사본을 유지하기 위해 임시 Vector3 변수를 만듭니다. 이 복사본을 수정한 다음 수정된 벡터를 transform.position에 다시 할당합니다.

 

디자인 결정

Unity가 번거로워 보이는 이 설정을 선택한 이유는 무엇인지 궁금할 것입니다. 답은 Vector3의 본질과 Unity가 안전과 성능을 위해 한 기본적인 선택에 있습니다:

Vector3은 구조체입니다. C#에서 Vector3 유형은 값 유형인 구조체로 정의됩니다. 이것은 당신이 Vector3을 사용할 때 그것의 값에 대한 참조가 아닌 실제 값을 사용한다는 것을 의미합니다. 따라서 transform.position을 검색할 때 당신은 위치에 대한 참조가 아니라 위치의 복사본을 얻는 것입니다.

안전성: Vector3를 불변으로 만들면 의도하지 않은 수정을 방지할 수 있습니다. Vector3 개체가 변형 가능하면 받은 모든 함수가 실수로 수정할 수 있으므로 추적하기 어려운 버그가 발생할 수 있습니다.

성능: 값 유형(구조체와 같은)을 사용하면 특히 게임 엔진과 같은 데이터 집약적인 환경에서 참조 유형보다 성능 이점을 얻을 수 있습니다. 데이터를 로컬로 유지함으로써 캐시 친화적이므로 종종 더 효율적인 실행이 가능합니다.

 

결론

Vector3를 불변으로 만들기로 한 Unity의 결정은 처음에는 직관에 반하는 것처럼 보일 수 있지만, 코드 안전을 유지하고 성능 최적화를 보장하는 이중적인 목적에 부합합니다. 일단 이 패턴에 익숙해지면, 그것은 제2의 천성이 되고, 안정적이고 최적화된 게임 엔진의 이점은 사소한 불편함을 훨씬 능가합니다.

저작자표시 비영리 변경금지 (새창열림)

'Unity' 카테고리의 다른 글

스크립트를 통해 게임 오브젝트에 컴포넌트 추가하기  (1) 2023.09.21
Setting : Resolution and Presentation  (0) 2023.09.20
Destroy 와 DestroyImmediate  (0) 2023.08.25
Animation : Blend Tree  (0) 2023.08.24
SerializeField 이해하기  (0) 2023.08.10
'Unity' 카테고리의 다른 글
  • 스크립트를 통해 게임 오브젝트에 컴포넌트 추가하기
  • Setting : Resolution and Presentation
  • Destroy 와 DestroyImmediate
  • Animation : Blend Tree
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    긴유통기한우유
    codingtips
    믈레코비타멸균우유
    상품 리뷰 크롤링
    unity
    파이썬
    codingcommunity
    리뷰이관
    카페24리뷰
    C#
    cv2
    programmerlife
    셀레니움
    Python
    라떼우유
    appdevelopment
    리뷰관리
    쇼핑몰리뷰
    스크립트 실행
    list
    유니티
    programming101
    ipcamera
    스마트스토어리뷰
    스크립트 실행 순서
    리스트
    rtsp
    카페24리뷰이관
    devlife
    learntocode
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
왜 transform.position.x를 직접적으로 수정 할 수 없을까??
상단으로

티스토리툴바