코딩 공부/Unity C#

게임 오브젝트 점프

recordmastd 2024. 6. 14. 01:54

문제 1 - 씬에 게임 오브젝트 추가하기

Exercise1이라는 이름의 새 2D Unity 프로젝트를 생성합니다. SampleScene의 이름을 Scene0으로 변경합니다. 프로젝트 창에 새 Sprites 폴더를 추가하고 OS를 사용하여 선택한 스프라이트를 해당 폴더에 복사합니다. 스프라이트를 계층구조 창으로 드래그하여 씬에 게임 오브젝트를 생성합니다. 게임을 실행하고 아무 일도 일어나지 않는지 확인합니다.

문제 2 - 스크립트 작성

계층 구조 창에서 게임 오브젝트를 선택하고 변형 X 값을 게임 뷰의 오른쪽 가장자리 근처로 게임 오브젝트를 이동하는 값으로 변경합니다. 이 숫자를 기억해 두십시오. 게임 개체를 게임 뷰의 위쪽 가장자리 근처로 이동하려면 Transform Y 값에 동일한 작업을 수행하고 이 숫자도 기억해 둡니다.

X: 11, Y: 4.8

(최대한 맞아떨어지는 숫자를 사용하고 싶었으나 위 숫자가 육안으로 보기에 가장 적절하였음)

 

참고: 실제로 스크립트 내의 Screen 클래스를 사용하여 화면 가장자리의 값을 가져올 수 있지만 이 연습에서는 선택에 중점을 두겠습니다.

프로젝트 창에 새 스크립트 폴더를 만들고 해당 폴더에 Jumper라는 새 C# 스크립트를 만듭니다. Visual Studio에서 새 스크립트를 열고 클래스에 대한 문서 주석을 추가합니다.

// jump location support 주석을 추가하고 스크립트의 Start 메서드 바로 위에 float minX , maxX, minY, maxY 상수를 선언합니다. 이 상수를 사용하여 게임 오브젝트를 새 위치로 이동할 때 게임 뷰에 유지되도록 할 것이므로 이 문제의 시작 부분에서 Transform X 및 Y에 대한 변경 사항에 따라 해당 상수에 적절한 값을 지정하십시오.

        // jump location support
        float minX = 0;
        float maxX = 11;
        float minY = 0;
        float maxY = 4.8f;

Start 메서드를 삭제하고 코드가 오류 없이 컴파일되는지 확인합니다.

// timer support 주석을 추가하고 float TotalJumpDelaySeconds 상수를 선언하고 다른 상수 바로 아래에 1로 설정합니다(주석 위에 빈 줄을 남겨두는 것을 잊지 마세요). float elapsedJumpDelaySeconds 변수를 선언하고 새 상수 바로 아래에 0으로 설정합니다.

        // timer support 
        float TotalJumpDelaySeconds = 1;
        float elapsedJumpDelaySeconds = 0;

Update 메서드의 시작 부분에 // update timer and check if it's done 코멘트를 추가하고, 그 아래에 코드를 추가하여 게임의 이전 프레임이 실행되는 데 걸린 시간을 기준으로 elapsedJumpDelaySeconds 를 업데이트합니다. 다행히도 Time.deltaTime 를 사용하여 정확한 정보를 얻을 수 있습니다. 경과 시간은 게임이 실행됨에 따라 증가하므로 이 값을 현재 값인 elapsedJumpDelaySeconds 에 더하는 것이 올바른 접근 방식입니다.

        // update timer and check if it's done
        elapsedJumpDelaySeconds += Time.deltaTime;

 

위의 코드 줄 바로 아래에 타이머가 완료되었는지 확인하는 if 문을 추가합니다. If 문에 대한 부울 표현식은 elapsedJumpDelaySecondsTotalJumpDelaySeconds 보다 크거나 같은지 확인해야 합니다. 타이머가 완료되면 이 부울 표현식이 참이 되는 이유를 이해해야 합니다.

 

 

이전 단계에서 작성한 코드의 if 본문에 타이머를 재설정하는 코드를 추가하고( elapsedJumpDelaySeconds 를 0으로 설정하면 타이머가 재설정됨) 스크립트가 첨부된 게임 오브젝트의 위치를 새로운 임의의 X 및 Y 위치로 변경합니다(여기서 minX, maxX, minY, maxY 상수를 사용함). 가장 좋은 방법은 지역 변수(저는 position)를 transform.position 로 설정하고, positionxy 속성을 임의의 X 및 Y 값으로 변경한 다음 tranform.positionposition 으로 설정하는 것입니다.

게임을 실행하고 아무 일도 일어나지 않으니 욕을 해보세요.

        if (elapsedJumpDelaySeconds >= TotalJumpDelaySeconds)
        { 
            elapsedJumpDelaySeconds = 0;
            Vector2 position = transform.position;
            position.x = Random.Range(minX, maxX);
            position.y = Random.Range(minY, maxY);
            transform.position = position;      // 마지막 position값 할당 잊지말기

            Debug.Log("haha nerd");
        }

문제 3 - 해결책을 완성하고 플레이해 보기

계층 구조 창에서 게임 오브젝트에 점퍼 스크립트를 첨부합니다. 게임을 실행하고 게임 오브젝트가 매초마다 새로운 위치로 점프하는 것을 지켜보세요.

TotalJumpDelaySeconds 상수를 아주 작은 값으로 변경하면 간질을 유발하는 기이한 동작을 볼 수 있습니다!