๐พ ์ฝ๋
using UnityEngine;
public class PlayerController : MonoBehaviour
{
void Start //์์ํ ๋
{
Cursor.lockState = CursorLockMode.Locked; //์ปค์๋ฅผ ์ค์์ ๊ณ ์
//์ฌํ: ์ปค์์ ์ปค์๋ฝ ๋ชจ๋์ ๋ฝ์คํ
์ดํธ ์ค์ ์ (=) ์ปค์๋ฝ ๋ชจ๋(enum)์ ๊ฐ์ค ์ปค์๋ฅผ ํ๋ฉด ์ค์์ ๊ณ ์ (Locked)์ ๋ถ๋ฌ์จ๋ค
}
}
๐ ์ฐธ๊ณ
namespace UnityEngine;
[NativeHeader("Runtime/Export/Input/Cursor.bindings.h")]
public class Cursor
{
public static extern CursorLockMode lockState
{
[MethodImpl(MethodImplOptions.InternalCall)]
get;
[MethodImpl(MethodImplOptions.InternalCall)]
set;
}
}
public enum CursorLockMode
{
//์ปค์์ ํ๋์ ํน์ ํ์ง ์๋๋ค
None,
//์ปค์๋ฅผ ํ๋ฉด์ ์ ์ค์์ ๊ณ ์ ํ๋ค
Locked,
//์ปค์๋ฅผ ๊ฒ์ ์ฐฝ์์ ๊ฐ๋๋ค
Confined
}
๐พ ์ฝ๋
using UnityEngine;
public class PlayerController : MonoBehaviour
{
void CameraLook() //์นด๋ฉ๋ผ์ ์์ผ ๋ฉ์๋
{
camCurXRot += mouseDelta.y * lookSensitivity;
//์นด๋ฉ๋ผ์ X Rotate ๊ฐ์ ๋ํด์ค๋ค(+=) ๋ง์ฐ์ค์ Y ์ขํ๊ฐ์ ๋ํด์ค๋ค ์ด๋ ๊ฐ๋ ์ค์ ์ ๊ณฑํด์ฃผ์ด ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ค๋ค
//๋ง์ฐ์ค์ Y๊ฐ์ด ๋ฐ๋๋ฉด X์ถ์ ๊ธฐ์ค์ผ๋ก ๋์์ผํ๊ธฐ ๋๋ฌธ์ X์ถ์ ๊ธฐ์ค์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค
camCurXRot = Mathf.Clamp(camCurXRot,minXLook,maxXLook);
//์นด๋ฉ๋ผ์ X Rotate ๊ฐ์ ์ ํํ๋ค
//Clamp(float value: ๊ด๋ฆฌํ float๊ฐ, ์ต์๊ฐ, ์ต๋๊ฐ)
cameraContainer.localEulerAngles = new Vector3(-camCurXRot, 0, 0);
//์นด๋ฉ๋ผ ์ปจํ
์ด๋(์นด๋ฉ๋ผ๋ฅผ ๋ด๊ณ ์๋ obj)๋ฅผ ์ค์ผ๋ฌ์ต๊ธ(0 ~ 3.14๊ธฐ์ค์ด ์๋ 0 ~ 360๊ธฐ์ค)๊ธฐ์ค ๊ฐ๋๋ฅผ(=) ์๋ก์ด 3์ฐจ์(๊ณ์ฐํ ๋ง์ฐ์ค๊ฐ Y๋ฐฉํฅ์ผ๋ก ์์ง์ธ ๊ฐ์ ๋นผ์ค๋ค, 0, 0)๊ฐ์ผ๋ก ์ค์ ํ๋ค
//์ค๋ธ์ ํธ๊ฐ X์ถ์ ๊ธฐ์ค์ผ๋ก ๋ํด์ง๋ฉด ์๊ณ๋ฐฉํฅ ํ์ ์ ํ๊ธฐ๋๋ฌธ์ ๋นผ์ฃผ์ด Y์ขํ๊ฐ์ ๋นผ์ฃผ์ด ๋ฐ์๊ณ ํ์ ํ๊ฒ ๋ฐ๊ฟ์ค๋ค
//์ค๋ธ์ ํธ์ ์ ์๋ ํ์ ์ด ์๋ ์นด๋ฉ๋ผ์ ํ์ ๊ฐ์ ์กฐ์ ํ์ฌ ์ผ๊ตด์ ์ ์๋ ์์ง์์ ๊ตฌํํ๋ค
//local์ด ๋ถ๋ ์ด์ ๋ ์์ ๊ฐ์ฒด์ ํ์ ์ ์ํฅ์ ๋ฐ๊ธฐ ์ํด์์ด๋ค
transform.eulerAngles += new Vector3(0, mouseDelta.x * lookSensitivity, 0);
//์ค๋ธ์ ํธ์ ์ข์ฐ ํ์ ๊ฐ์ ์กฐ์ ํด์ค๋ค
//์ค๋ธ์ ํธ์ ์ผ๊ตด์ ์์๋๋ก๋ง ์์ง์ด๊ณ ์ข์ฐ๋ ๊ณ ์ ํ์ฌ ์์ ๋ณผ๋ ค๋ฉด ๋ชธํต์ด ํ์ ํ๊ฒ ๋๋ ์๋ฆฌ์ด๋ค
}
}
๐พ ์ฝ๋
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public void OnLookInput(InputAction.CallbackContext context)
//๋งค๊ฐ๋ณ์๋ Input System์ ๋ง์ฐ์ค์ ๋ธํ๊ฐ์ ๋ฐ์์ค๋ Look ๊ฐ์ ๋ฐ์์ฌ๋ ์ฌ์ฉํ๋ค
{
mouseDelta = context.ReadValue<Vector2>();
//๋ง์ฐ์ค๋ธํ ๋ณ์๋(=) ๋ฐ์์จ Input System์ x, y ๊ฐ๋ง ๋ฐ์์จ๋ค.
}
}
๐พ ์ฝ๋
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public void OnMoveInput(InputAction.CallbackContext context)
{
if(context.phase == InputActionPhase.Performed)
//Input System์ ํ์ฌ(phase)์ํ์ ์ด๊ฑฐํ(InputActionPhase)๊ฐ์ด(=) ์๋์ค(Performed)์ด๋ผ๋ฉด
{
curMovementInput = context.ReadValue<Vector2>();
//์ด๋๊ฐ์(=) Input System(context)์ค 2์ฐจ์๊ฐ์ ๋ฐ์์จ๋ค
}
else if(context.phase == InputActionPhase.Canceled)
//์ทจ์๋์๋ค๋ฉด
{
curMovementInput = Vector2.zero;
//์ด๋๊ฐ์(=) 0,0 ์ผ๋ก ๋ฐ๊พผ๋ค
}
}
}
๐ ์ฐธ๊ณ
namespace UnityEngine.InputSystem;
public enum InputActionPhase
{
Disabled,
Waiting,
Started,
Performed,
Canceled
}