์บก์ ์ค๋ธ์ ํธ์ ๋ฉ์ธ ์นด๋ฉ๋ผ๊ฐ ๋ฐ๋ผ๊ฐ๊ฒ ํ๋ฉด์ ํ์ ๋ ๊ฐ์ดํ๊ฒ ํด์คฌ๋๋ฐ
๊ฒ์ ์คํ์ํค๋๊น ์นด๋ฉ๋ผ๊ฐ ์์๋๋ก ์กด๋๊ฒ ํ๋ค๋ฆผ;;
์ด๊ฑฐ ์ ์ด๋ฌ๋์ง์ข ์์ ์์๊น์....
์นด๋ฉ๋ผ์ ๋ฌ์์ค ์คํฌ๋ฆฝํธ
์บ ํ์
===========================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CamRotate : MonoBehaviour
{
ย ย public float rotSpeed = 200f;
ย ย float mx = 0;
ย ย float my = 0;
ย ย // Start is called before the first frame update
ย ย void Start()
ย ย {
ย ย }
ย ย // Update is called once per frame
ย ย void Update()
ย ย {
ย ย ย ย Cursor.lockState = CursorLockMode.Confined;
ย ย ย ย float mouse_X = Input.GetAxis("Mouse X");
ย ย ย ย float mouse_Y = Input.GetAxis("Mouse Y");
ย ย ย ย mx += mouse_X * rotSpeed * Time.deltaTime;
ย ย ย ย my += mouse_Y * rotSpeed * Time.deltaTime;
ย
ย ย ย ย my = Mathf.Clamp(my, -90, 90);
ย ย ย ย transform.eulerAngles = new Vector3(-my, mx, 0);
ย ย ย ย my = Mathf.Clamp(my, -90, 90);
ย ย }
}
===================================================
์บ ํ๋ก์ฐ
============================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CamFollow : MonoBehaviour
{
ย ย public Transform target;
ย ย // Start is called before the first frame update
ย ย void Start()
ย ย {
ย ย }
ย ย // Update is called once per frame
ย ย void Update()
ย ย {
ย ย ย ย transform.position = target.position;
ย ย }
}
===============================================
์ค๋ธ์ ํธ์ ๋ถ์ธ ์คํฌ๋ฆฝํธ
์ด๋
==============================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Move : MonoBehaviour
{
ย ย public float moveSpeed = 7f; // ์บ๋ฆญํฐ์ ์ด๋ ์๋
ย ย CharacterController cc; // ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ
ย ย float gravity = -20f; // ์ค๋ ฅ์ ๊ฐ
ย ย float yVelocity = 0; // ์์ง ๋ฐฉํฅ์ ์๋
ย ย public float jumpPower = 7f; // ์ ํ์ ํ
ย ย public bool isJumping = false; // ์ ํ ์ค์ธ์ง ํ๋จํ๋ ๋ณ์
ย ย void Start()
ย ย {
ย ย ย ย cc = GetComponent<CharacterController>(); // ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ด
ย ย }
ย ย void Update()
ย ย {
ย ย ย ย float h = Input.GetAxis("Horizontal"); // ์ํ ์
๋ ฅ์ ๋ฐ์
ย ย ย ย float v = Input.GetAxis("Vertical"); // ์์ง ์
๋ ฅ์ ๋ฐ์
ย ย ย ย Vector3 dir = new Vector3(h, 0, v); // ์ด๋ ๋ฐฉํฅ์ ์ค์
ย ย ย ย dir = dir.normalized; // ๋ฐฉํฅ์ ๊ธธ์ด๋ฅผ 1๋ก ๋ง๋ฆ
ย ย ย ย dir = Camera.main.transform.TransformDirection(dir); // ์นด๋ฉ๋ผ์ ๋ฐฉํฅ์ผ๋ก ๋ณํ
ย ย ย ย if (cc.collisionFlags == CollisionFlags.Below && isJumping) // ์บ๋ฆญํฐ๊ฐ ๋ฐ๋ฅ์ ์๊ณ , ์ ํ ์ค์ด๋ผ๋ฉด
ย ย ย ย {
ย ย ย ย ย ย isJumping = false; // ์ ํ ์ํ๋ฅผ ๋๋
ย ย ย ย ย ย yVelocity = 0; // ์์ง ์๋๋ฅผ 0์ผ๋ก ์ด๊ธฐํ
ย ย ย ย }
ย ย ย ย if (Input.GetButtonDown("Jump") && !isJumping) // ์ ํ ๋ฒํผ์ ๋๋ ๊ณ , ์ ํ ์ค์ด ์๋๋ผ๋ฉด
ย ย ย ย {
ย ย ย ย ย ย yVelocity = jumpPower; // ์ ํ ํ์ ์์ง ์๋์ ์ถ๊ฐ
ย ย ย ย ย ย isJumping = true; // ์ ํ ์ํ๋ก ๋ณ๊ฒฝ
ย ย ย ย }
ย ย ย ย yVelocity += gravity * Time.deltaTime; // ์ค๋ ฅ์ ์ํฅ์ ์์ง ์๋์ ์ถ๊ฐ
ย ย ย ย dir.y = yVelocity; // ์ด๋ ๋ฐฉํฅ์ y ๊ฐ์ ์์ง ์๋๋ฅผ ์ ์ฉ
ย ย ย ย cc.Move(dir * moveSpeed * Time.deltaTime); // ์ด๋ ๋ฐฉํฅ์ผ๋ก ์ด๋
ย ย }
}
===================================================
ํ์
=====================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotate : MonoBehaviour
{
ย ย public float rotSpeed = 200f;
ย ย float mx = 0;
ย ย // Start is called before the first frame update
ย ย void Start()
ย ย {
ย ย }
ย ย // Update is called once per frame
ย ย void Update()
ย ย {
ย ย ย ย float mouse_x = Input.GetAxis("Mouse X");
ย ย ย ย mx += mouse_x * rotSpeed * Time.deltaTime;
ย ย ย ย transform.eulerAngles = new Vector3(0, mx, 0);
ย ย }
}
===================================================
๋๋๊ฑฐ๋ฆผ? ์ผ๋จ ํ๋ ์ด์ด ๋ฆฌ๊ธฐ๋๋ฐ๋interpolation interpolation์ผ๋ก ๋ณ๊ฒฝํด๋ณด๊ณ ๋๋์ง์ข
๋ ์ค๋ ฅํจ์๋ ์ฝ๋ผ์ด๋๊ฐ ๋ฐ์ด๋ด๋ ค๋ ํ์ด๋ ์๋ก ๊ฐ์ญํ๋๊ฑฐ ๊ฐ์
๊ทธ๋ฆฌ๊ณ ์ด๋๊ด๋ จ ๋ฌผ๋ฆฌํจ์๋ fixedupdate๋ก ๋ฐ๊พธ์ธ์ฌ. ์ด์ ๋ ์ฐพ์๋ณด์๊ณ .
๋ฆฌ๊ธฐ๋๋ฐ๋interpolation interpolation์ผ๋ก ๋ณ๊ฒฝ ==> ์คํจ;; ํฝ์๋์ ๋๋ ์คํจ์ ๋๋ค;;
ํฝ์๋์ ๋๋ฐฉ๋ฒ์ ์ ํํ๋ ์บ ๋์ ์ค๋ธ์ ํธ๊ฐ ๋๋ ๊ฑฐ๋ฆฝ๋๋ค;;
์ ์บ๋ฆญํฐ์ปจํธ๋กค๋ฌ ์ฐ์๋๊ตฌ๋; ๋ฆฌ๊ธฐ๋ ๋ฐ๋๋นผ์ธ์. ์ด๊ฑฐ๋บ๋ค๊ณ ํด๊ฒฐ๋๋ค๋๊ฑด์๋๋ฐ ์์ ํ์๊ฐ์์ ใ ใ ใ ใ
๊ตณ์ด ์ด์ ๋ฅผ ๋์ฐพ์๋ฉด ๋ฐ๋ฅํน์ ํฐ๋ ์ธ์?
์ ๋ฏธ์น ๋ฆฌ๊ธฐ๋ ๋ฐ๋ ์์๋๊น ๋ฏธ์น๋ฏ์ด ๋ถ๋๋ฝ๋ค์;; ๋๋์ด ํด๊ฒฐ๋ฐฉ๋ฒ ์ฐพ์์ต๋๋ค! ๊ฐ์ฌํฉ๋๋ค! ์บ๋ฆญํฐ ์ปจํธ๋กค๋ฌ ์์ผ๋ฉด ํ์ ์๋ค๋ ๊ฒ๋ ๋ชจ๋ฅด๊ณ ;;
์ ์ง์ง ๊ทธ๊ฒ ๋ฌธ์ ์๊ตฌ๋. ์๋ฌดํผ ํด๊ฒฐ๋ผ์ ๋คํ์ ๋๋ค.
CamFollow ์์ LateUpdate() ๋ฅผ ์ฌ์ฉํด๋ณด์ธ์
์คํจ;;
' ์นด๋ฉ๋ผ์ ๋ฐฉํฅ์ผ๋ก ๋ณํ ' ์ด ๋ถ๋ถ์ด ์ข ์ด์ํด๋ณด์ด๋ค
๋ฆฌ๊ธฐ๋ ๋ฐ๋ ์์๋๊น ์ฑ๊ณตํ์ต๋๋ค. ๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!