-
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