์ค๋ธ์ ํธ๋ฅผ ๋ง์ฐ์ค ์ปค์๋ฅผ ๋ฐ๋ผ ํ์ ์ํค๋,
๋ง์ฐ์ค๊ฐ ์ผ์ชฝ์ ๋ฐ๋ผ๋ณด๊ณ ์์๋ ์ํ๋ฐ์ ๋๋๋ก ์ฝ๋๋ฅผ ์ง๋ ค๊ณ ํ๋๋ฐ
๋งํ๋ฒ๋ ธ์ต๋๋ค.
์ด๋ป๊ฒ ํด๋ ํด๋น ์ด๋ฏธ์ง์ฒ๋ผ ๋๋๊ตฐ์...
์ด๋ ๊ฒ ๋์ง ์๊ณ ์ด์ ์ ์์ ์ผ๋ก ๋ค๋๋ก ํ ์ ์์๊น์?
์๋๋ ์ฝ๋ ์ ๋ฌธ์ ๋๋ค.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
ย ย public Vector2 inputVec;
ย ย public float speed;
ย ย public float playerScaleX;
ย ย public float playerScaleY;
ย ย Rigidbody2D rigid;
ย ย public GameObject weapon;
ย ย void Awake()
ย ย {
ย ย ย ย playerScaleX = transform.localScale.x;
ย ย ย ย playerScaleY = transform.localScale.y;
ย ย ย ย rigid = GetComponent<Rigidbody2D>();
ย ย }
ย ย void Update()
ย ย {
ย ย ย ย inputVec.x = Input.GetAxisRaw("Horizontal");
ย ย ย ย inputVec.y = Input.GetAxisRaw("Vertical");
ย ย }
ย ย void FixedUpdate()
ย ย {
ย ย ย ย Vector2 nextVec = inputVec.normalized * speed * Time.fixedDeltaTime;
ย ย ย ย rigid.MovePosition(rigid.position + nextVec);
ย ย }
ย ย void LateUpdate()
ย ย {
ย ย ย ย if (inputVec.x > 0)
ย ย ย ย {
ย ย ย ย ย ย transform.localScale = new Vector3(playerScaleX, playerScaleY, 1f);
ย ย ย ย }
ย ย ย ย else if (inputVec.x < 0)
ย ย ย ย {
ย ย ย ย ย ย transform.localScale = new Vector3(-playerScaleX, playerScaleY, 1f);
ย ย ย ย }
ย ย ย ย RotateWeaponTowardsMouse();
ย ย }
ย ย void RotateWeaponTowardsMouse()
ย ย {
ย ย ย ย Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
ย ย ย ย Vector3 directionToMouse = mousePosition - weapon.transform.position;
ย ย ย ย float angle = Mathf.Atan2(directionToMouse.y, directionToMouse.x) * Mathf.Rad2Deg;
ย ย ย ย weapon.transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
ย ย }
}
์ ๊ตฌ์ ๋ฐฉ๋ฒ ์จ? ๊ฑ NEW INPUT SYSTEM ์ฐ์ง ๊ทธ๋
์จ๋ณด๊ธฐ๋ ํ๋๋ฐ ์ผ๋จ์ ์ต์ํ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํด๋ณด๋ ค๊ณ ํฉ๋๋ค!
float aimAngle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; transform.rotation = Quaternion.AngleAxis(aimAngle, Vector3.forward); ์ด๊ฑฐ ํ๋ฒ ์จ๋ณด์ง ๊ทธ๋? direction์ ๋ง์ฐ์ค ํฌ์ธํฐ-Vectr2ํธ๋์คํผ์ ์ ๊ทํ์ํค๊ณ
๋๋ผ๋ฉด ๋์ถฉ ์ด๋ ๊ฒ ์งค๋ฏ private void RotateWeapon() { //base.๋ ์์๋ฐ๋ ํด๋์ค์ ๋ณ์๋ฅผ ์์๋ฐ์์ ์ด๋ค๋ ๊ฒ //transform.rotation = Quaternion.LookRotation(Vector3.forward, -direction); float aimAngle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; transform.rotation = Quaternion.AngleAxis(aimAngle, Vector3.forward); //Debug.Log("์์ ๊ฐ๋"+aimAngle); //Debug
transform.localScale = scale; if (transform.eulerAngles.z >= 180f) { weaponRenderer.sortingOrder = characterRenderer.sortingOrder + 1; } else { weaponRenderer.sortingOrder = characterRenderer.sortingOrder - 1; }
์ฃ์กํ์ง๋ง ์ด๋์ ์ด๋ป๊ฒ ํด์ผํ๋์ง๋ ์๋ ค์ฃผ์ค ์ ์์๊น์?
๋ฌด๊ธฐ ํ์ ํํธ๊ฐ RotateWeaponTowardsMouse ์ด๊ณ weapon.transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle)); ์ด ํํธ์์ ๊ทธ๋ฅ ๊ฑฐ๊ธฐ์ ํํ๋๋ ค์ ๋ฌธ์ ์ธ๊ฑฐ ์๋์ผ?
๊ทธ๋ผ ์ ๋ถ๋ถ์ aimAngle ๋ฐ๋๊ฑธ ๋ฐ๊ฟ๋ณด์ง ๊ทธ๋
์ฃ์กํ๋ฐ ์ ์ฉํด๋ ์ค๋ฅ๊ฐ ๋จ๋ค์ ใ - dc App