ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Vector2 클래스, transform, GetMouseButtonDown
    유니티/유니티 메인 2024. 2. 3. 16:15

    <Vector2>

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class NewBehaviourScript : MonoBehaviour
    {
        void Start()
        {
            Vector2 start = new Vector2(3.0f, 5.0f);
            Vector2 end = new Vector2(11.0f, 15.0f);
            Vector2 dir = end - start;
            Debug.Log(dir);
            Debug.Log(dir.magnitude);   
        }
    }

     

    Vector2는 엄연한 클래스이기 때문에 변수를 만들어준뒤 값을 넣어줘야 한다

     

    Vector 클래스에 들어가는 값들은 float형이다

     

    Ventor2 dir = start - end    => dir은 둘 사이의 거리를 구하지만

    dir.magnitude                    => magnitude는 둘 사이의 길이를 구해준다

     

     

    <transform, GetMouseButtonDown>

     

     

    이 룰렛이 마우스를 클릭할때마다 돌아갈수 있게 스크립트를 작성할거다

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class NewBehaviourScript : MonoBehaviour
    {
        float rotatespeed;
        void Update()
        {
            if(Input.GetMouseButtonDown(0))
            {
               rotatespeed = 30;
            }
           transform.Rotate(0, 0, rotatespeed);
        }
    }

     

    Input.GetMouseButton 메서드

    키보드건 마우스건 뭔가 누르는것에 관련되있는건 무조건 Input을 앞에 붙인다

    GetMouseButton( 0 : 왼쪽클릭, 1: 오른쪽클릭, 2 : 휠 클릭)

     

    transform.Rotate(0,0, rotatespeed)

    오브젝트의 위치, 움직임에 관련된것은 transform을 앞에 붙인다

     

     

    Rotate( x축, y축, z축) => 룰렛이 회전하는데 어느축이 쓰이는지 알고 싶다면 3D로 전환한뒤 직접 확인이 가능하다

     

    하지만 위와 같이  스크립트를 짠다면 우리가 아는것처럼 부드럽게 룰렛이 굴러가는게 아닌 뚝뚝 끊기며 돌아가게 된다

     

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class NewBehaviourScript : MonoBehaviour
    {
        float rotatespeed = 50.0f;
        void Update()
        {
            if(Input.GetMouseButtonDown(0))
            {
                rotatespeed = 30;
            }
            transform.Rotate(0, 0, rotatespeed);
    
            rotatespeed *= 0.99f;
            //rotatespeed -= 0.1f;
        }
    }

     

    rotatespeed *= 0.99f;

    부드럽게 굴러가다가 서서히 멈추게 하기 위해서는 rotatespeed를 조금씩 깎아 0에 가까워지게 만들어야하며

    매 프레임마다 0.99를 곱하게 해주었더니 우리가 아는 룰렛처럼 부드럽게 움직인다

     

    //rotatespeed -= 0.1f

    그러다 혹시 매 프레임마다 0.1씩 빼주면 어떻게 될까 해보았더니 처음엔 정상적으로 멈추는듯 하다

    잠깐의 정지뒤 곧바로 역방향으로 가속도가 붙어 돌아가는것을 확인할수 있었다

     

    rotatespeed는 얼마든지 0밑의 마이너스로 떨어질수 있다는것을 간과하였다

    '유니티 > 유니티 메인' 카테고리의 다른 글

    프리팹, 충돌판정  (2) 2024.02.04
    Vector와 transform 응용, UI 표시, 효과음 삽입  (0) 2024.02.03
    총정리 (용어정리)  (0) 2024.02.03
    물리엔진, 애니메이션, 씬 변환  (1) 2024.02.01
    물리엔진  (0) 2024.01.31
Designed by Tistory.