코딩 공부/Unity C#

테디(게임 오브젝트)크기 조절

recordmastd 2024. 6. 10. 01:59

Unity에서 프로젝트를 엽니다.

참고: 제공된 Unity 프로젝트를 열면 제목 없음 씬에서 시작될 수 있습니다. 프로젝트 창의 Scenes 폴더에서 Scene0을 더블클릭하여 올바른 씬을 엽니다.

문제 1 - 노란색 테디베어를 4배 크게 만들기

먼저 노란색 테디베어가 4배 크게 그려지도록 게임을 변경합니다. 편집기가 아닌 코드에서 다음과 같이 변경합니다

1. 프로젝트 창을 마우스 오른쪽 버튼으로 클릭하고 스크립트라는 이름의 새 폴더를 만듭니다.

2. 프로젝트 창에서 스크립트 폴더를 마우스 오른쪽 버튼으로 클릭하고 생성 > C# 스크립트를 선택합니다. 새 스크립트의 이름을 YellowTeddyBear로 바꿉니다

3. 프로젝트 창에서 스크립트를 두 번 클릭하여 Visual Studio에서 열고 클래스에 대한 문서 주석을 추가합니다

주의: 새 스크립트를 생성할 때 새 스크립트의 이름을 YellowTeddyBear로 지정했기 때문에 생성된 클래스의 이름(스크립트에서 public class 바로 뒤의 이름)도 YellowTeddyBear 이며, 이는 정확히 맞습니다. Unity에서는 .cs 파일의 이름과 해당 .cs 파일에 있는 클래스 이름이 정확히 일치해야 합니다. 이는 좋은 프로그래밍 관행이며 지극히 합리적입니다.

하지만 안타깝게도 스크립트를 생성할 때 스크립트 이름을 기본 스크립트 이름인 NewBehaviourScript로 두고 나중에 Unity 에디터에서 스크립트 이름을 원하는 이름으로 변경하면 Unity는 .cs 파일의 이름은 변경하지만 해당 파일에 있는 클래스 이름은 새 이름으로 변경하지 않고 NewBehaviourScript 그대로 유지합니다. 스크립트는 Visual Studio에서 정상적으로 컴파일되지만, 씬의 게임 오브젝트에 스크립트를 첨부하려고 할 때 Unity에서 오류가 발생합니다.

이 문제를 해결하려면 스크립트에서 NewBehaviourScript 클래스 이름을 마우스 오른쪽 버튼으로 클릭하고 팝업 메뉴에서 이름 바꾸기...(상단에서 두 번째 선택 사항)를 선택합니다. 스크립트 이름을 클래스 이름으로 입력하고 이름 바꾸기 대화 상자에서 <Enter> 또는 적용 버튼을 누릅니다. 이제 클래스 이름과 .cs 파일 이름이 일치하므로 Unity에서 씬의 게임 오브젝트에 스크립트를 첨부할 수 있습니다(아래 8단계에서 이 작업을 수행합니다).

4. 그 위에 있는 주석과 중괄호를 모두 포함하여 Update 메서드를 삭제합니다. 우리 솔루션에는 해당 메서드가 필요하지 않습니다

5. 스크립트가 첨부된 게임 오브젝트의 위치와 스케일을 변경하려면 게임 오브젝트의 트랜스폼 컴포넌트를 수정해야 합니다. Unity 스크립팅 레퍼런스에서 Transform 클래스에 대한 설명서를 보면 localScale 프로퍼티에 액세스할 수 있는 것을 확인할 수 있습니다. 다음 코드를 사용하여 복사본을 저장합니다(주석과 코드 사이에 빈 줄을 넣지 마세요):

// quadruple width and height

Vector3 newScale = transform.localScale;

6. 이제 복사본이 있으므로 다음을 사용하여 너비와 높이를 4배 더 크게 만들 수 있습니다(두 줄의 코드 사이에 빈 줄을 넣지 마세요):

newScale.x *= 4;   

newScale.y *= 4;

참고: newScale.x *= 4; 을 사용하는 것은 newScale.x = newScale.x * 4; 을 사용하는 것과 동일합니다. *= (및 +=, -=, /=) 약어를 사용하는 프로그래머를 많이 볼 수 있습니다.

7. 마지막으로 다음을 사용하여 게임 오브젝트의 실제 로컬 스케일을 변경해야 합니다:

transform.localScale = newScale;

transform.localScale 프로퍼티를 newScale 으로 복사하고 newScale 를 변경한 다음 newScale 을 다시 transform.localScale 으로 복사하는 대신 프로퍼티의 x 및 y 프로퍼티를 직접 변경할 수 있다고 생각했을 수도 있지만, C# 프로퍼티 작동 방식에 대한 규칙 때문에 그렇게 할 수 없습니다. 특히 Transform 클래스로 작업할 때 이 복사-변경-복사를 반복하는 방식을 Unity 스크립트에서 자주 사용하게 될 것입니다.

8. 프로젝트 창에서 스크립트를 계층 구조 창의 YellowTeddyBear 게임 오브젝트로 드래그하여 해당 게임 오브젝트에 스크립트를 컴포넌트로 첨부합니다. 계층 구조 창에서 YellowTeddyBear 게임 오브젝트를 마우스 왼쪽 버튼으로 클릭하고 인스펙터를 확인하여 스크립트가 추가되었는지 확인합니다

9. 게임을 실행하여 코드가 제대로 작동하는지 확인합니다

문제 2 - 녹색 테디베어의 키를 3배로 만들기

다음으로 녹색 테디베어가 일반 너비로 그려지지만 높이가 3배가 되도록 게임을 변경합니다

위의 2~9단계를 참고하여 필요한 변경 사항을 구현합니다

문제 3 - 보라색 테디 베어를 3배 넓게 만들기

마지막으로, 보라색 곰인형이 보통 높이의 세 배 너비로 그려지도록 게임을 변경합니다

위의 2~9단계를 참고하여 필요한 변경 사항을 구현합니다

 

문제 1 스크립트 - 곰돌이를 4배로 크게 만들자

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class YellowTeadyBear : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        // quadruple width and height

        Vector3 newScale = transform.localScale;	// 게임 오브젝트의 크기를 나타내는 속성
		
        // 크기 변경
        newScale.x *= 4;

        newScale.y *= 4;

        transform.localScale = newScale;	// 변경사항을 적용하기 위해 다시 복사
    }
}

- newScale을 마지막에 다시 복사하는 것이 C#의 법칙

실행하기 전
실행 후 더 커진 곰돌이

문제2 - 곰돌이의 키를 3배로 크게 만들자

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GreenTeadyBear : MonoBehaviour
{
    // 곰돌이의 키를 3배 더 크게 만듦
    void Start()
    {
        Vector3 newScale = transform.localScale;

        newScale.y *= 3;

        transform.localScale = newScale;
    }
}

 

실행 전 곰돌

 

실행 후 길쭉해진 곰돌이

문제3  - 곰돌이를 3배 넓게 만들자

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PurpleTeadyBear : MonoBehaviour
{
    // 곰돌이의 너비를 3배로 만듦
    void Start()
    {
        Vector3 newScale = transform.localScale;

        newScale.x *= 3;

        transform.localScale = newScale;
    }
}

실행 곰돌이의 모습

 

 

Transform 클래스로 작업할 때 이 복사-변경-복사를 반복하는 방식을 하지 않는다면

오브젝트에 변경사항이 적용되지 않음