Cube를 펼쳐 Floor를 만들기
Capsule로 Player 생성하고 Main Camera를 부착
이동 구현
PlayerMove 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 사용자의 입력에 따라 앞뒤좌우로 이동하고싶다.
public class PlayerMove : MonoBehaviour
{
// 크기
public float speed = 5;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// 사용자의 입력에 따라
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
// 앞뒤좌우로 방향을 만들고
Vector3 dir = Vector3.right * h + Vector3.forward * v;
// dir의 크기를 1로 만들고싶다.
dir.Normalize();
// 그 방향으로 이동하고싶다.
// P = P0 + vt
transform.position += dir * speed * Time.deltaTime;
}
}
회전 구현
마우스로 회전 동작을 하기 위한
CameraRotate 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 마우스의 입력값을 이용해서 회전하고싶다.
public class CameraRotate : MonoBehaviour
{
float rx;
float ry;
public float rotSpeed = 200;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// 마우스의 입력값을 이용해서
float mx = Input.GetAxis("Mouse X");
float my = Input.GetAxis("Mouse Y");
rx += my * rotSpeed * Time.deltaTime;
ry += mx * rotSpeed * Time.deltaTime;
// rx의 회전 각을 제한하고싶다. +80도 -80도
rx = Mathf.Clamp(rx, -80, 80);
// 회전하고싶다.
transform.eulerAngles = new Vector3(-rx, ry, 0);
}
}
Clamp : 성분을 최대치와 최소치 안에서 유지되게끔 조정
카메라의 회전에 따른 이동방향 변경
// 카메라가 바라보는 방향을 앞방향으로 하고싶다.
dir = Camera.main.transform.TransformDirection(dir);
점프 구현
중력과 가속도 변수를 만들고
Start에 ChracterController 가져오기
public float gravity = -9.81f;
public float jumpPower = 10;
float yVelocity;
CharacterController cc;
// Start is called before the first frame update
void Start()
{
cc = GetComponent<CharacterController>();
}
Update에서 가속도 계산
void Update()
{
// y속도에 중력을 계속 더하고싶다.
yVelocity += gravity * Time.deltaTime;
// 만약 사용자가 점프버튼을 누르면 y속도에 뛰는힘을 대입하고싶다.
if (Input.GetButtonDown("Jump"))
{
yVelocity = jumpPower;
}
// 사용자의 입력에 따라
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
// 앞뒤좌우로 방향을 만들고
Vector3 dir = Vector3.right * h + Vector3.forward * v;
// 카메라가 바라보는 방향을 앞방향으로 하고싶다.
dir = Camera.main.transform.TransformDirection(dir);
// dir의 크기를 1로 만들고싶다.
dir.Normalize();
// y 속도를 최종 dir의 y에 대입하고싶다.
dir.y = yVelocity;
// 그 방향으로 이동하고싶다.
// P = P0 + vt
cc.Move(dir * speed * Time.deltaTime);
}
Move : ChracterController에 포함된 기능으로 이동과 동시에 충돌검사
PlayerMove 전문
더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 사용자의 입력에 따라 앞뒤좌우로 이동하고싶다.
// 점프를 뛰고싶다. 중력, 뛰는힘, y속도
public class PlayerMove : MonoBehaviour
{
// 크기
public float speed = 5;
public float gravity = -9.81f;
public float jumpPower = 10;
float yVelocity;
CharacterController cc;
// Start is called before the first frame update
void Start()
{
cc = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
// y속도에 중력을 계속 더하고싶다.
yVelocity += gravity * Time.deltaTime;
// 만약 사용자가 점프버튼을 누르면 y속도에 뛰는힘을 대입하고싶다.
if (Input.GetButtonDown("Jump"))
{
yVelocity = jumpPower;
}
// 사용자의 입력에 따라
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
// 앞뒤좌우로 방향을 만들고
Vector3 dir = Vector3.right * h + Vector3.forward * v;
// 카메라가 바라보는 방향을 앞방향으로 하고싶다.
dir = Camera.main.transform.TransformDirection(dir);
// dir의 크기를 1로 만들고싶다.
dir.Normalize();
// y 속도를 최종 dir의 y에 대입하고싶다.
dir.y = yVelocity;
// 그 방향으로 이동하고싶다.
// P = P0 + vt
cc.Move(dir * speed * Time.deltaTime);
}
}
'공부 > Unity 기초' 카테고리의 다른 글
3D FPS - 3 / 무기 제작 (0) | 2022.05.18 |
---|---|
3D FPS - 2 / 시점 변화 (0) | 2022.05.17 |
2D 슈팅 - 9 / 누적점수에 따른 속도변경 (0) | 2022.05.17 |
2D 슈팅 - 8 / 함정 추가 (0) | 2022.05.16 |
2D 슈팅 - 7 / 총알 추가 (0) | 2022.05.16 |