091
[C#] Unity 속 C# script(5) : 사용자입력스크립트 본문
* 언급이 없을 경우 기즈모방향이 왼쪽좌표계인 경우를 기준으로 말하고 있습니다. *
01. 움직이는 방향을 화살표로 선택하기
-> Y,Z축에서 앞뒤로 회전하는 Cube(넓게 판으로 만듦) == X축을 회전축으로 두고 있음
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ground_ggi : MonoBehaviour
{
void Update()
{
float xRotation = transform.localEulerAngles.x;
xRotation += Input.GetAxis("Horizontal");
transform.localEulerAngles = new Vector3(xRotation,0,0);
}
}
- transform.localEulerAngles은 x,y,z축으로 얼마만큼 회전되었는가를 부모 오브젝트를 기준으로 한 회전을 나타냄, Euler 각도는 3D 회전을 3개의 축을 기준으로 분해한 값으로 그 축을 기준으로 a도 만큼 회전되었다는 의미 -> 앞으로 움직인다는 것은 X축을 기준으로 (+)로 볼 때 돌아가는 방향이 오른쪽이면(=뒤로 가면) (+)각도만큼 변해야한 다는 의미임
- Input.GetAxis("Horizontal")은 기본 Input Manager에서 정의된 입력 축으로, 왼쪽-오른쪽 방향 입력에 대응하여 <-(A),->(D)를 누를씩 각각 -1, 1이 입력됨, 0은 입력없음을 나타내며 조이스틱과 같은 입력의 경우 중간값인 0.5의 부동소수점 값을 가질수도 있음(-1에서 1 사이의 부동소수점 값을 가짐)
-> GetAxis()의 경우 입력값을 부드럽게 변화시켜주는 특성이 있는데 이를 원치않으면 GetAxisRaw()를 사용하면 됨(즉각적인 변화 가능)
-> X,Z축에서 앞뒤로 회전하는 Cube(넓게 판으로 만듦) == Y축을 회전축으로 두고 있음
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ground_ggi : MonoBehaviour
{
void Update()
{
float yRotation = transform.localEulerAngles.y;
yRotation -= Input.GetAxis("Horizontal"); //마이너스로 수정
transform.localEulerAngles = new Vector3(0,yRotation,0); //회전축을 Y축으로 수정
}
}
- (<-)를 눌렀을 때 왼쪽으로 회전한다는 것은 Y의 (+)축에서 오른쪽으로 회전한다는 것과 같은 말이고 그렇다는 것은 -1(<-)을 yRotation에 추가할 때마다 yRotation의 값이 커져야한다는 의미임으로 연산자를 마이너스로 바꿔줌
-> X,Y축에서 앞뒤로 회전하는 Cube(넓게 판으로 만듦) == Z축을 회전축으로 두고 있음
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ground_ggi : MonoBehaviour
{
void Update()
{
float zRotation = transform.localEulerAngles.z;
zRotation -= Input.GetAxis("Horizontal"); //마이너스로 바꿈
transform.localEulerAngles = new Vector3(0,0,zRotation); //회전축을 Z축으로 바꿈
}
}
- (<-)를 눌렀을 때 왼쪽으로 회전한다는 것은 Z의 (+)축에서 오른쪽으로 회전한다는 것과 같은 말이고 그렇다는 것은 -1(<-)을 zRotation에 추가할 때마다 zRotation의 값이 커져야한다는 의미임으로 연산자를 마이너스로 바꿔줌
+) Input.GetAxis()의 경우 "Vertical", "Mouse X", "Mouse Y", "Fire1", "Jump" 등을 가져올 수 있음
02. 키 입력받기
-> GetKeyDown()
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball_ggi : MonoBehaviour
{
void Update()
{
if(Input.GetKeyDown(KeyCode.R))
{
GetComponent<Rigidbody>().AddForce(Vector3.right * 100);
}
}
}
- Input.GetKeyDown(KeyCode.R)은 키가 눌린 순간 1프레임에만 true를 반환함 -> 키를 눌려있는 동안 계속 true를 반환하고 싶거나 떼었을 때 감지하고 싶을 경우에는 각각 GetKey(), GetKeyUp()를 사용해주면 됨
-> KeyCode의 프로퍼티
• 알파벳 키 : KeyCode.A ~ KeyCode.Z
• 숫자키 : (위쪽 키보드) KeyCode.Alpha0 ~ KeyCode.Alpha9
• 특수키 : KeyCode.Space(스페이스바), KeyCode.Return(엔터키)..
- GetComponent<Rigidbody>()은 GetComponent는 컴포넌트 자료형을 가지고 오는 속성으로 앞에 gameObject.이 써있지 않아도 해당 스크립트가 붙은 오브젝트의 Rigidbody를 가지고 옴 -> AddForce()는 객체에 물리적인 힘을 적하는 메서드로 force를 필수적으로 작성해줘야함 -> Vector3.(사진속위치값) * 힘의크기를 곱해서 나타낼 수 있음
-> GetMouseButton()
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Input_ggi : MonoBehaviour
{
int value = 5;
void Update()
{
if(Input.GetMouseButton(1))
transform.localEulerAngles = new Vector3(value--,0,0);
if(Input.GetMouseButton(0))
transform.localEulerAngles = new Vector3(value++,0,0);
}
}
- 마우스의 오른쪽 버튼을 1, 왼쪽 버튼을 0누를 때 조건에 충족해 true를 1프레임만 반환함
03. 응용
-> 방향키를 지속적으로 누르고 있으면 계속 그 영향하에 있게 함
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Input_ggi : MonoBehaviour
{
void Update()
{
if(Input.GetKey(KeyCode.RightArrow))
GetComponent<Rigidbody>().AddForce(Vector3.back * 100);
if(Input.GetKey(KeyCode.LeftArrow))
GetComponent<Rigidbody>().AddForce(Vector3.forward * 100);
}
}
-> 스페이스바를 누르고 있으면 공이 위로 움직이고 누르지 않을 경우 아래로 움직이게 함
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Input_ggi : MonoBehaviour
{
void Update()
{
if(Input.GetKey(KeyCode.Space)){
GetComponent<Rigidbody>().AddForce(Vector3.up * 100);
}else GetComponent<Rigidbody>().AddForce(Vector3.down * 100);
}
}
* 일부 출처 - 고수정, ”게임프로그래밍 ”, 인덕대학교
'Programming Language > C#' 카테고리의 다른 글
[C#] Unity 속 C# script(7) : 충돌스크립트 (6) | 2024.12.10 |
---|---|
[C#] Unity 속 C# script(6) : 메서드 (5) | 2024.12.08 |
[C#] Unity 속 C# script(4) (8) | 2024.10.21 |
[C#] Unity 속 C# script(3) (3) | 2024.10.20 |
[C#] Unity 속 C# script(2) (3) | 2024.10.19 |