본문 바로가기
  • 불확실한 내일을 위해
유니티 C#/C#

C#기초 - Rotate와 Translate 메서드 뜻 및 예시

by 그린초코 2023. 7. 6.

1. Rotate 뜻

- Rotate 예시 : 클릭하면 20속도로 회전하다가 점점 속도가 줄어 0으로 되어 멈추게 하기

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

public class Test : MonoBehaviour
{
    float speed = 0; // 클릭 전 회전 속도 0으로 초기화

    void Update()
    {
        if (Input.GetMouseButtonDown(0)) // 클릭하면 회전 속도를 설정한다. 
        {
            this.speed = 20 // 처음 속도는 20이다. 
        }
        transform.Rotate(0, 0, this.speed); // 회전속도만큼 회전한다. 
        this.speed *= 0.96f;// 감속을 위해 0.96을ㄹ 프레임마다 곱한다. 
    }
}

0.96을 곱하는 이유는 자연스럽게 멈추게 하기 위해서다. 이렇게 하면 속도는

1프레임 : 속도 20

2프레임 : 속도 19.2 (20 * 0.96)

3프레임 : 속도 18.432 (20 * 0.96 * 0.96) 

...

최종 속도 : 0 

으로 되어 결국 멈추게 된다. 

방법을 쓰면 선형함수가 아닌 지수함수처럼 감속하여 속도가 자연스럽게 줄어드는 것처럼 보인다. 

 

2. Translate 뜻

- Translate 예시1 : 클릭하면 0.3속도로 이동하다가 점점 속도가 줄어 0으로 되어 멈추게 하기

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

public class Test : MonoBehaviour
{
    float speed = 0; // 클릭 전에는 이동 속도 0으로 초기화
    // Start is called before the first frame update
    void Start()
    {

    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0)) // 클릭하면 이동 속도를 설정한다. 
        {
            this.speed = 0.3f; // 처음 이동 속도는 0.3이다.
        }
        transform.Translate(this.speed, 0, 0); // 속도만큼 X로 이동한다. 
        this.speed *= 0.96f; // 0.96을 곱하면서 감속한다. 
    }
}

감속하는 원리는 Rotate와 같다. 

(회전 속도에 비해 이동 속도는 굉장히 빠르다. 처음 속도를 10으로 해버리면 움직이는게 보이지도 않을 정도)

 

참고로 Translate(1, 0, 0) 는 (1, 0, 0) 좌표로 이동하는 것이 아니라 x방향으로 +1만큼 이동한다는 뜻이다. 

 

- Translate 예시2 : 스와이프 길이(드레그 길이)로 이동하기

스와이프 길이(드레그 길이)는 GetMouseButtonDown 와 GetMouseButtonUp 메서드로 구할 수 있다. 

* GetMouseButton 메서드 설명은 아래 참고

https://greenchoco.tistory.com/155

 

GetMouseButton, GetMouseButtonDown, GetMouseButtonUp 메서드 차이

GetMouseButtonDown 메서드 : 컴퓨터에서는 "왼쪽 버튼을 클릭하는 순간" true를 반환한다. 스마트폰에서는 "화면을 탭했을 때" 으로 인식한다. 따라서 따로 수정하지 않고 그대로 스마트폰용으로 빌드

greenchoco.tistory.com

 

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

public class RouletteController : MonoBehaviour
{
    float speed = 0; // 클릭 전에는 회전 속도 0으로 초기화
    Vector2 sPos; // 시작지점좌표를 sPos 로 
    void Start()
    {
    }
    void Update()
    {
        if (Input.GetMouseButtonDown(0)) // 클릭하면 이동 속도를 설정한다. 
        {
            this.sPos = Input.mousePosition; // 마우스 클릭한 좌표를 sPos애 대입
        }
        else if (Input.GetMouseButtonUp(0))
        {
            Vector2 ePos = Input.mousePosition; // 마우스에서 손가락 뗐을 때 좌표를 sPos에 대입
            float swipe = ePos.x - this.sPos.x; // 두 점의 x축 방향 거리 길이를 swipe에 대입한다.
            this.speed = swipe / 500.0f; // swipe 길이를 500으로 나눠 이동 속도로 바꾼다. 
        }
        transform.Translate(this.speed, 0, 0); // 대입된 속도로 이동한다. 
        this.speed *= 0.96f; // 0.96씩 곱하면서 감속시킨다.
    }
}

 

 

728x90

댓글