ํ
๋ณ ๊ฐ์์ ๊ฑฐ ์ฐ์ง๋ ์์๋๋ฐ
์คํ๋๋ฆฌ๊ณ ์ค๋ฅ999์ฐ๋๋
๊ทธ๋๋ก ์ ๋ํฐ ์๋ํฐ ๊ฐ๋๋ ค์ง
ํด๋๊ฐ์ ๊ฑด ๋ค์ด๊ฐ์ง์ง๋ ์์ ๋๋ธํด๋ฆญํด๋
์ปค์ ํด๋์ ์ฌ๋ ค๋๋ฉด 3์ด ํ์ ๊ฐ์ ํ ํด๋์ ๋ถ์ด ๋ค์ด์ค๋ ์ ๋
๋ญ๊ฐ๋ฌธ์ ค๊น ๊ฐ๊ฐ๋ค ์ง์ง
** ์ฝ๋ **
์คํฌ๋ฆฝํธ ๋ ๊ฐ / ํ์ด์ด๋ผํค์๋ ํ๋ ์ด์ด๋ง๊ณค ๋ฐฐ์นํด๋ ๊ฒ ์์
1.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseMovement : MonoBehaviour
{
ย ย ย ย public float mouseSensitivity = 100f;ย ย //๋ง์ฐ์ค ๊ฐ๋
ย ย ย ย float xRotation = 0f;
ย ย ย ย float YRotation = 0f;ย ย //x์ถ, y์ถ ํ์ ์ ์ด
ย ย ย ย void Start()
ย ย ย ย {
ย ย ย ย ย ย ย ย Cursor.lockState = CursorLockMode.Locked;ย ย //์ปค์๋ฅผ ์ค์์ ์ ๊ทธ๊ณ ๋ณด์ด์ง ์๊ฒ๋ ํ๋ ์ฝ๋
ย ย ย ย }
ย ย ย ย void Update()
ย ย ย ย {
ย ย ย ย ย ย ย ย float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;ย ย ย ย //mouseSensitivity: ๊ฐ๋๊ฐ ๋๋ฆฌ๋ฏ๋ก ์ค์ ๊ณฑํด์ ๋น ๋ฅด๊ธฐ ์กฐ์
ย ย ย ย ย ย ย ย float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;ย ย ย ย //๋ง์ฐ์ค ์ ๋ ฅ ์์ , ์ธํ๋งค๋์ ์์ ๋ณผ ์ ์์
ย ย ย ย ย ย ย ย xRotation -= mouseY;ย ย ย ย //์ ์ด x์ถ์ ์ค์ฌ์ผ๋ก ํ์ //๊ฐ๋๋ ๋ง์ด๋์ค!, ๋ฐฉํฅ์ด ๋ค๋ฅด๋๊น.
ย ย ย ย ย ย ย ย xRotation = Mathf.Clamp(xRotation, -90f, 90f); //๊ณผํ์ ์ด ๋ถ๊ฐ๋ฅํ๊ฒ๋ ์ค์ ์ฒ๋ผ ๊ณ ์
ย ย ย ย ย ย ย ย YRotation += mouseX;ย ย ย ย //์ ์ด y์ถ์ ์ค์ฌ์ผ๋ก ํ์ (์ํ)
ย ย ย ย ย ย ย ย transform.localRotation = Quaternion.Euler(xRotation, YRotation, 0f);ย ย //์์ชฝ ํ์ ์ ์ฉ
ย ย ย ย }
}
2.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
ย ย ย ย public CharacterController controller;
ย ย ย ย public float speed = 12f;
ย ย ย ย public float gravity = -9.81f * 2;
ย ย ย ย public float jumpHeight = 3f;
ย ย ย ย public Transform groundCheck;
ย ย ย ย public float groundDistance = 0.4f;
ย ย ย ย public LayerMask groundMask;
ย ย ย ย Vector3 velocity;
ย ย ย ย bool isGrounded;
ย ย ย ย void Update()
ย ย ย ย {ย ย ย ย ย ย ย ย
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
ย ย ย ย ย ย ย ย if (isGrounded && velocity.y < 0)
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย ย ย velocity.y = -2f;
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย float x = Input.GetAxis("Horizontal");
ย ย ย ย ย ย ย ย float z = Input.GetAxis("Vertical");
ย ย ย ย ย ย ย ย Vector3 move = transform.right * x + transform.forward * z;
ย ย ย ย ย ย ย ย controller.Move(move * speed * Time.deltaTime);
ย ย ย ย ย ย ย ย if (Input.GetButtonDown("Jump") && isGrounded)
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย ย ย velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย velocity.y += gravity * Time.deltaTime;
ย ย ย ย ย ย ย ย controller.Move(velocity * Time.deltaTime);
ย ย ย ย }
}
๋ณ ๊ฐ์์ ๊ฑฐ ์ฐ์ง๋ ์์๋๋ฐ
์คํ๋๋ฆฌ๊ณ ์ค๋ฅ999์ฐ๋๋
๊ทธ๋๋ก ์ ๋ํฐ ์๋ํฐ ๊ฐ๋๋ ค์ง
ํด๋๊ฐ์ ๊ฑด ๋ค์ด๊ฐ์ง์ง๋ ์์ ๋๋ธํด๋ฆญํด๋
์ปค์ ํด๋์ ์ฌ๋ ค๋๋ฉด 3์ด ํ์ ๊ฐ์ ํ ํด๋์ ๋ถ์ด ๋ค์ด์ค๋ ์ ๋
๋ญ๊ฐ๋ฌธ์ ค๊น ๊ฐ๊ฐ๋ค ์ง์ง
** ์ฝ๋ **
์คํฌ๋ฆฝํธ ๋ ๊ฐ / ํ์ด์ด๋ผํค์๋ ํ๋ ์ด์ด๋ง๊ณค ๋ฐฐ์นํด๋ ๊ฒ ์์
1.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseMovement : MonoBehaviour
{
ย ย ย ย public float mouseSensitivity = 100f;ย ย //๋ง์ฐ์ค ๊ฐ๋
ย ย ย ย float xRotation = 0f;
ย ย ย ย float YRotation = 0f;ย ย //x์ถ, y์ถ ํ์ ์ ์ด
ย ย ย ย void Start()
ย ย ย ย {
ย ย ย ย ย ย ย ย Cursor.lockState = CursorLockMode.Locked;ย ย //์ปค์๋ฅผ ์ค์์ ์ ๊ทธ๊ณ ๋ณด์ด์ง ์๊ฒ๋ ํ๋ ์ฝ๋
ย ย ย ย }
ย ย ย ย void Update()
ย ย ย ย {
ย ย ย ย ย ย ย ย float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;ย ย ย ย //mouseSensitivity: ๊ฐ๋๊ฐ ๋๋ฆฌ๋ฏ๋ก ์ค์ ๊ณฑํด์ ๋น ๋ฅด๊ธฐ ์กฐ์
ย ย ย ย ย ย ย ย float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;ย ย ย ย //๋ง์ฐ์ค ์ ๋ ฅ ์์ , ์ธํ๋งค๋์ ์์ ๋ณผ ์ ์์
ย ย ย ย ย ย ย ย xRotation -= mouseY;ย ย ย ย //์ ์ด x์ถ์ ์ค์ฌ์ผ๋ก ํ์ //๊ฐ๋๋ ๋ง์ด๋์ค!, ๋ฐฉํฅ์ด ๋ค๋ฅด๋๊น.
ย ย ย ย ย ย ย ย xRotation = Mathf.Clamp(xRotation, -90f, 90f); //๊ณผํ์ ์ด ๋ถ๊ฐ๋ฅํ๊ฒ๋ ์ค์ ์ฒ๋ผ ๊ณ ์
ย ย ย ย ย ย ย ย YRotation += mouseX;ย ย ย ย //์ ์ด y์ถ์ ์ค์ฌ์ผ๋ก ํ์ (์ํ)
ย ย ย ย ย ย ย ย transform.localRotation = Quaternion.Euler(xRotation, YRotation, 0f);ย ย //์์ชฝ ํ์ ์ ์ฉ
ย ย ย ย }
}
2.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
ย ย ย ย public CharacterController controller;
ย ย ย ย public float speed = 12f;
ย ย ย ย public float gravity = -9.81f * 2;
ย ย ย ย public float jumpHeight = 3f;
ย ย ย ย public Transform groundCheck;
ย ย ย ย public float groundDistance = 0.4f;
ย ย ย ย public LayerMask groundMask;
ย ย ย ย Vector3 velocity;
ย ย ย ย bool isGrounded;
ย ย ย ย void Update()
ย ย ย ย {ย ย ย ย ย ย ย ย
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
ย ย ย ย ย ย ย ย if (isGrounded && velocity.y < 0)
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย ย ย velocity.y = -2f;
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย float x = Input.GetAxis("Horizontal");
ย ย ย ย ย ย ย ย float z = Input.GetAxis("Vertical");
ย ย ย ย ย ย ย ย Vector3 move = transform.right * x + transform.forward * z;
ย ย ย ย ย ย ย ย controller.Move(move * speed * Time.deltaTime);
ย ย ย ย ย ย ย ย if (Input.GetButtonDown("Jump") && isGrounded)
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย ย ย velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย velocity.y += gravity * Time.deltaTime;
ย ย ย ย ย ย ย ย controller.Move(velocity * Time.deltaTime);
ย ย ย ย }
}
์ค๋ฅ 999 ๋ด์ฉ์ด ๋ญ์? ๋ณดํต ์งง์์๊ฐ์ 999๊ฐ ์ด๋ ๊ฒ ๋จ๋๊ฑฐ๋ฉด ์ ๋ฐ์ดํธ๋ฌธ์์ ๋ญ ์๋ชป๋๊ณ ์์ํ ๋ฐ ๋จ์ํ ์ฐธ์กฐ์ค๋ฅ ์ด๋ฐ๊ฑฐ๊ฐ๊ณ ๋๋ ค์ง ์ผ์ ์์
์ํ ์ด์ ๋ ๋ณผ ์๋ ์๋ค ๊ฐ์ ์ข ๋ฃ ํด๋ฒ๋ ค์ ์ง๊ธ ๊ฐ์ ์ข ๋ฃ ์ธ๋ฒ์งผ๋ฐ ๊ณ์ ๋ณธ๋ฌธ์ฒ๋ผ ๋๋ ค์ง ใ ์ฐ์ผ๋...
ํน์ ์ด ํ๋ก์ ํธ์์๋ง ์ด๋ฌ๋๊ฑด๊ฐ ์ถ์ด์ ์ ํ๋ก์ ํธ ํ ๋ดค๋๋ฐ ๋๊ฐ์ด ๊ฐ๋๋ฆผ. ์ด์ผ์ด๊ฑฐ? ๋ ์ค๋ ๊ณผ์ ๋ง๋ ์ธ๋ฐ?
๋์ด ๋ญ ์๋ชปํ๊ณ ๊ณ์๋๋ฏ ์ปดํ์ผ ์ค๋ฅ๊ฐ ์์ผ๋ฉด ์์ ๋ชจ๋ ์ผ์ก์๊ฑฐ๊ณ ์๋๋ฉด ๊ทธ๋ฅ cs ํ์ผ ์์ฒด๋ฅผ ์๋ํฐ๋ก ์ด์ด๋ ๋จ. ์คํ๋์ง ์๋ ์คํฌ๋ฆฝํธ๋ ๊ทธ๋ฅ ํ ์คํธ ๋ฉ์ด๋ฆฌ์ผ ๋ฟ์ด๋๊น ๋ ์ ์ ๋ฐํ ๊ฐ๋ฅ์ฑ๋ ์์
์ปดํ์ผ์ ๋๋๋ฐ ์คํํ๋๊น ๋ ๊ฑธ๋ ค์ ๊ฐ์ ์ข ๋ฃ ํด์ผ ํ๋ค ์ด๋ฌ๋ฉด ๋ฌดํ๋ฃจํ ๋๊ณ ์์ ๊ฐ๋ฅ์ฑ ์์
ํ๋ ์ด ์ ํ๊ณ ์ฌ๋ถํ ํ๊ณ ๋ค์ ๋ค์ด์๋ ๋ค์ด์ค์๋ง์ ๋๊ฐ์ด ๋ ๊ฑธ๋ฆฌ๋๋ฐ... csํ์ผ?... ์ ์ฅ ๋์ด์๋ ๊ฑด ์ฌํ์ผ๋ฐ์ ์๋๋ฐ ์ด๊ฑธ ๋ฐ๋ก ๋ผ์ด๋ด๋ ๋ฐฉ๋ฒ์ด ์๋?
์คํฌ๋ฆฝํธ๊ฐ ์๋๋ฐ ๋ ์ด๊ฑธ๋ฆฐ๋ค๊ตฌ์ฌ? Assetํ๊ณ ProjectSettingsํด๋ ๋ ๋๊ณ ๋ค ์ง์ด ๋ค์ ์ ๋ํฐ ์๋ํฐ๋ก ํด๋น ํ๋ก์ ํธ ๋ค์ ๋ค์ด๊ฐ์ ํผ์งํด๋ณด์
์... ์์ ์ด๋ ํ๋ก์ ํธ์ธํ ๋นผ๊ณ ์น ์ง์ฐ๊ณ ๋ค์ ๋๋ ธ๋๋ฐ ์๊น๋ ๋๊ฐ์ด ํ๋ ์ด ์ ๋๋ฌ๋ ๊ฐ๋๋ฆผ...ใ ใ ์์จ;.. ๊ทผ๋ฐ ํ๋ธ์ ๋ค์ด๊ฐ์ ์ด๊ธด ํ๋๋ฐ ์ด๊ฑด ์๊ด์๊ฒ ์ ธ? ํน์๋ชฐ๋ผ ํ๋ธ ์ฌ๋ค์ด๋ก๋ ํ๊ณ ํ๊ธด ํ์ด์
๊ทธ๋ฆฌ๊ณ ์ฐฝ๋ซ๊ธฐ ๋ฒํผ๋ ์ ๋จนํ๋ ๊ฑธ ๋ด์ ๊ทธ๋ฅ ํ๋ฉด๋ง ์ด๋ ค์๋ ๋๋? ์ฐฝ๋ซ๊ธฐ์ ๋ถ๊น์ง ๋ค์ด์ค๋๋ฐ ๋๋ฌ๋ ์ ๋จนํ์
์คํฌ๋ฆฐ์ท์ด๋ผ๋ ๋ณด์ฌ์ฃผ๊ณ ๋งํด๋ผ,,
์คํฌ๋ฆฐ์ท ํ๊ณ ๋ง๊ณ ํ ๊ฒ๋ ์์... ํใ ใ ๋ต๋ตํด ์คํฌ๋ฆฝํธ๋ผ๋ ๋ค์ด๊ฐ์ง๋ฉด ๋ญ๋ผ๋ ์ฐ์ด์ ์ฒจ๋ถํ ํ ๋ฐ ํด๋๋ ์คํฌ๋ฆฝํธ๋ ์ด๋ฆฌ์ง๋ ์์... ๊ทธ๋๋ ๋ญ ์ฐ์ด ์ฌ๋ฆด๋งํ ๊ฒ ์์๊น? ๋งํด์ฃผ๋ฉด ํ๋ค๋ฅ ์ฌ๋ ค๋ณผ๊ฒ
๊ทธ์ ๋ ์์ค + ์ค๋ฅํญ๋ชฉ 999๋ while๋ฌธ ์ฃผ์์ฒ๋ฆฌํ๋ฉด ๋ฌด์กฐ๊ฑด ํด๊ฒฐ๋จ
๋ ๊ทผ๋ฐ while๋ฌธ ์ด ์ ์ด ์์ด ํฌ๋ฌธ๋... ๊ทผ๋ฐ ํฌ๋ฌธ ์์ผ๋ฌธ๋๋ฌธ์ ๊ทธ๋ฐ ๊ฑฐ๋ฉด ์๋ํฐ ๊ป๋ค ํค๋ฉด ์๋๊ฐ ์์๋ณต๊ตฌ ๋ผ์ผ ํ๋ ๊ฑฐ ์๋? ์ด๋ ต๋ค ์ ๋ํฐ ํด๋ํด๋ ๋ชจ๋ฅด๊ฒ ๋ค...
์๋ํฐ ๊ป๋คํค๊ณ ํ๋ ์ด ์๋๋ ๋๋ฐ ๋๊ฐ์ผ๋ฉด ์ปดํจํฐ๊ฐ ๊ฐ๋น๋ชปํ๋๊ฑฐ์ง๋ญ ์ฌ๋ถํ ใฑใฑ
์ฌ๋ถํ ์ธ๋ฒ์งธ์...ใ ๋ญ๊ฐ๋ฌธ์ ์ง ์ง์ง ์ธ๊ณ ์ถ๋ค ์๋ฐ ๋น์ฅ ๋ด์ผ ์ ์ถ์ธ๋ฐ... ๊ทธ๋ฆฌ๊ณ ์ฌ์์ด ๋ธ๋ฆฌ๋ ๊ฑด ์๋๊ฑฐ๊ฐ์ cpu ๋จ gpu ์ ๋ถ ์ฌ์ฉํ๋ ๊ฑฐ 30ํผ๋ ์๋ผใ ใ
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๋๊ธ์ ๋ช๋ฐ์ดํธ ์๋๋ค... ๋ณธ๋ฌธ์ ์ฒจ๋ถํด๋๊ฒ์
์์ ์ 2021 lts ๋ฒ์ ์์ getaxis ๋ก x์ถ y์ถ ์ ๋ ฅ์ ๋ฐ๊ณ ๊ทธ ๊ฐ์ ์ฆํญ ์ํค๋ ์ฝ๋๋ฅผ ์ง๋ฉด ํ๋ก๊ทธ๋จ์ด ๋๋ ค์ง๋ ๋ฌธ์ ๊ฐ ์์๋๋ฐ ๊ทธ ๋ฌธ์ ๊ฐ ์๋๊น ์ถ๋ค์
๋์ถฉ ์ถ๋ก ํ์๋ฉด ์ง๊ธ ์์ฃผ ์กฐ๊ธ๋ง ์์ง์ฌ๋ ๊ณ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์์ ์๋ก์ด ๊ฐ์ ์ ์ฉํ๊ณ ๋ค์ ๋์์ค๊ณ ์๋๊ฑฐ๋ผ์ ์๊ฐ ๋ณ๋ชฉ ๋น์ทํ๊ฒ ์๊ธด๊ฒ ์๋๊น ํด์ fixed update ์์ ์ฒ๋ฆฌํ๋ฉด ์ ๋ฌธ์ ๊ฐ ํ์คํ ์ค์ด๋ค๋๊ตฐ์