개발/유니티(UNITY)

3.4 룰렛 스크립트 작성하기

새벽감성개발자 2023. 9. 10. 13:00
반응형

3.4.1 스크립트의 역할

  • 클릭하면 룰렛을 회전시키되 시간이 흐르면 룰렛의 회전 속도를 점점 줄여서 멈추도록 하는 구조로 작성
  • 룰렛을 회전시키는 <<컨트롤러 스크립트>> 를 작성
  • 클릭하면 일정한 속도로 회전한다는 스크립트

 

3.4.2 룰렛 스크립트 작성하기

project - Asset에 C# 스크립트를 하나 추가해준다

※ 클릭하면 일정 속도로 회전하는 스크립트

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

public class RouletteController : MonoBehaviour
{

    float rotSpeed = 0;

    void Start()
    {
        // 프레임레이트를 60으로 고정한다.
        Application.targetFrameRate = 60;
    }

    // Update is called once per frame
    void Update()
    {
        // 클릭하면 회전 속도를 설정한다.
        if (Input.GetMouseButtonDown(0))
        {
            this.rotSpeed = 10;
        }

        // 회전 속도만큼 룰렛을 회전시킨다.
        transform.Rotate(0,0, this.rotSpeed);
    }
}
  • rotSpeed는 회전각을 설정한 것이다.
  • GetMouseButtonDown은 클릭해서 클릭이 눌린 상태에서 True를 한번 반환한다.
  • GetMouseButtonUp은 클릭해서 클릭에 떼진 상태에서 True를 한번 반환한다.
  • GetMouseButton은 클릭해서 누르는 동안 계속 True를 반환한다.

 

3.5.1 룰렛에 스크립트 적용하기

드래그&드롭으로 작성한 스크립트를 룰렛에 추가한다.

  • rotSpeed 가 양수면 반시계 방향으로 회전한다
  • rotSpeed 가 음수면 시계 방향으로 회전한다.

 

3.6.1 회전 속도를 줄이는 방법

  • 회전 속도를 줄이기 위해서 속도 변수인 rotSpeed 값을 조금씩 줄이면 된다.
  • rotSpeed에 감쇠 계수 (ex. 0.96)을 곱해서 총 60프레임 뒤에 멈추게끔 그래프 형태로 속도가 줄게 하면 된다.
  • 지수함수처럼 감속하게끔 해야 한다. 계수 값을 더 적게 변경할 수록 감속 크기를 크게 할 수 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RouletteController : MonoBehaviour
{
    float rotSpeed = 0;

    void Start()
    {
        // 프레임레이트를 60으로 고정한다.
        Application.targetFrameRate = 60;
    }

    // Update is called once per frame
    void Update()
    {
        // 클릭하면 회전 속도를 설정한다.
        if (Input.GetMouseButtonDown(0))
        {
            this.rotSpeed = -10;
        }

        // 회전 속도만큼 룰렛을 회전시킨다.
        transform.Rotate(0,0, this.rotSpeed);

        this.rotSpeed *= 0.996f;
        
        // 어느정도 멈췄다 싶으면 0으로 초기화 하기 위해서 값을 확인 용도로 console에 찍음
        Debug.Log(this.rotSpeed);
    }
}
  • this.rotSpeed *= 0.996f; 의 값을 추가해줌으로써 룰렛이 서서히 멈추게 된다.
  • 새로 클릭한 경우에 다시 10의 속도로 시작하기 때문에 돌아가기 시작한다.
  • 책에서 나온 예시대로 0.96f를 곱하니 너무 빨리 멈춰서 룰렛의 효과가 아닌것 같아서 계수의 값을 더 했다.

한국인이 싫어하는 속도로 멈춘다..

  • rotSpeed 가 일정 구간이 되면 0으로 통보하고 결과를 출력하게끔 하는 스크립트가 필요
  • 책에서 예제는 여기까지다 

 

반쪽짜리 예제를 통해 어느정도 기능 구현이 필요하기 때문에 이 부분에 대해서 개인적으로 추가적으로 다룰 예정이다.

반응형