유니티
[3D MINI Project] 플레이어 이동 코드 작성, 넘어짐 수정
수다밀다_sudamilda
2022. 11. 5. 16:58
728x90
[3D MINI Project] 3D 미니 프로젝트 기획
하려고 했는데
아 개답답해!!!!!!!!!!!!!!!
그냥 놔둬봤더니 또 되더라...ㅎㅎ...
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player_Controller : MonoBehaviour
{
Rigidbody playerRigidbody;
public float speed = 8f;
// Start is called before the first frame update
void Start()
{
playerRigidbody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
//if(Input.GetKey(KeyCode.UpArrow)==true)
//{
// playerRigidbody.AddForce(0f, 0f, speed);
//}
//if (Input.GetKey(KeyCode.DownArrow) == true)
//{
// playerRigidbody.AddForce(0f, 0f, -speed);
//}
//if (Input.GetKey(KeyCode.RightArrow) == true)
//{
// playerRigidbody.AddForce(speed, 0f,0f);
//}
//if (Input.GetKey(KeyCode.LeftArrow) == true)
//{
// playerRigidbody.AddForce(-speed, 0f, 0f);
//}
// 수평과 수직축 입력값을 감지 및 저장
float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");
// 실제 이동 속도를 입력값과 이동 속력을 통해 결정
float xSpeed = xInput * speed;
float zSpeed = zInput * speed;
// Vec3 속도로 생성
Vector3 newVelocity = new Vector3(xSpeed, 0, zSpeed);
// RigidBody에 할당
playerRigidbody.velocity = newVelocity;
}
public void Die()
{
gameObject.SetActive(false); // 죽으면 비활성화
GameMAnager gameManager = FindObjectOfType<GameMAnager>();
gameManager.EndGame();
}
}
어쨌든 이건 기존 게임 코드인데
뜯어서 살펴보면
먼저 주석 처리된 것은 유니티에 있는 거를
사용하지 않고 플레이어를 움직이는 코드
Input.GetAxis("") 안에
Horizontal, Vertical을 넣으면
유니티에서 알아서 인지하고 움직일 수 있다.
void Update()
{
// 수평과 수직축 입력값을 감지 및 저장
float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");
}
일단 Update() 문 안에 이 친구를 넣어줬다.
아 안움직이지
바본가
Rigidbody 안 함ㅋㅋㅋㅋㅋㅋㅋㅋ
아 이제 넣어줌 ㅎㅎ
코드에도 Rigidbody를 넣어주고
설정을 해줘야겠다.
예...
움직이네......
이렇게 제멋대로 눕고 난리 칠 때는
Freeze를 건드려볼 필요가 있다.
엉엉...
뇌 없이 클릭해봤더니
드러누웠다.
필자는 수학 전공자
sin cos tan를 활용하여
이 친구의 움직임을 판단해보자.
물론 개소리다.
아
Rotation이 그 축 기준 회전이구나
ㅅㅂ;;;
그걸 이제 알다니...
뭐 어쨌든
원하는 대로 돌아가고 움직이기 성공
스피드를 바꿨는데도
Inspector창은 그대로라서
당황했다.
Inspector에서 speed를 수정해서
답답함을 날려줌.
일단 풀코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player_Controller_3D : MonoBehaviour
{
Rigidbody playerRigidbody;
public float speed = 30f;
// Start is called before the first frame update
void Start()
{
playerRigidbody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
// 수평과 수직축 입력값을 감지 및 저장
float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");
// 실제 이동 속도를 입력값과 이동 속력을 통해 결정
float xSpeed = xInput * speed;
float zSpeed = zInput * speed;
// Vec3 속도로 생성
Vector3 newVelocity = new Vector3(xSpeed, 0, zSpeed);
// RigidBody에 할당
playerRigidbody.velocity = newVelocity;
}
}
728x90