https://www.youtube.com/watch?v=WkMM7Uu2AoA

 

 

일단 기초 맵 부터 생성

3d 오브젝트 바닥과 벽을 생성하기

 

 

 

카메라 비추는데 방해되는 벽 오브젝트는

 

mesh renderer 옆 체크 박스 off 해서 비활성화 하기

 

 

 

마테리알, 베이스 맵에 텍스쳐 넣을 시

너무 늘어난 거 같으면 tiling 의 x y 값을 올리면 됨

 

 

 

 

플레이어 될 오브젝트엔

ㅁ Rigidbody

ㅁ Capsule Collider

ㅁ Script 빈거

이 세 개 콤포넌츠 부터 만들기

 

 

 

플레이어 스크립트 짜는데..

 

using UnityEngine;

public class PlayerSC : MonoBehaviour
{

    float hAxis;
    float vAxis;

    Vector3 moveVec;

    void Start()
    {
        
    }

    void Update()
    {
        hAxis = Input.GetAxisRaw("Horizontal");
        vAxis = Input.GetAxisRaw("Vertical");

    }
}

 

 

참고로 인풋 중 Horizontal, Vertical 은

프로젝트 세팅 , 인풋 매니저에서 가져옴

 

 

 

대각선 이동도 스크립트에 구현할건데..

 

대각선 이동이 빨라지면 형평성에 어긋나니까

대각선 이동도 그냥 가로 이동과 똑같이 하기 위한게 필요함

 

 

 

normalized 를 쓸거임

 

 

테스트할 때, 캐릭터가 넘어지면?

 


Rigidbody 콤포넨트 항목에서
Constraints 의 Freeze Rotation  x z 를 설정 on 하면 됨

 

 

 

Fixed Update 인 벽과 Update 인 플레이어 .

두 업데이트 방식이 다르면

물리 충돌이 제대로 발동 안되는 오류가 생길 수 있음

 

해결법 : 

플레이어의 Rigidbody 콤포넨트 
Collision Detection Discrete에서 Continuous 로 변경하면 됨

 

 

 

 

플레이어의 애니메이션을 만들어보자

Animation Controller 생성

 

 

 

플레이어 자식 탭에 Mesh Object 로 애니메이션 컨트롤러를 드래그 해서 적용

 

 

Animator 컴포넌트 Controller 옆 더블 클릭하면 애니메이터 윈도우 창이 나옴

 

 

 

에셋 창에서 , 플레이어 fbx 모델을 펼쳐보면

세모 아이콘 모양, 애니메이션도 같이 있음

 

 

 

 

.fbx 파일은

메쉬, 텍스쳐, 애니, 뼈 등 각종 정보가 저장된 3d 확장자임

 

 

애니메이션 중 idle 을 애니메이터 윈도우 쪽으로 드래그

 

 

 

idle 어셋 우측 상단 edit 누른 후 loop 설정

 

 

 

애니메이터 윈도우에서

idle walk run 세 개를 우클 ㅡ  make transition 해서 연결

 

 

저 연결 화살표를 누르면 트랜지션 설정 가능

 

보통 transition duration 을 0.1~0.3 정도로 왔다 갔다 해서 조절하는 편

 

 

이동속도와 애니메이션 속도가 서로 안 맞으면

Speed 조절 가능함

 

 

반대방향으로도 우클, 트랜지션 연결 해둔다

 

 

조건에 해당되면 애니 바뀌려면

왼위 Parameters 를 눌러주고...

 

저 플러스 버튼 , bool 값을 클릭

 

isWalk

isRun

두 개를 생성

 

 

 

idle - > Run 화살표 누른 후 오른아래 컨디션 isRun true 로 설정

 

Has Exit Time 은 off

 

 

 

세팅 눌러보면 트랜지션 겹치는 구간의 길이를 설정가능

지금은 0.1 로 설정

 

 

 

Run 에서 Idle 로 향하는 건 컨디션 isRun 이 False 가 되어야 함

 

 

우리는 지금

달리는 Run 을 기본으로 하고,

Shift 를 눌렀을 때 Walk 걷기로 하자

 

 

Walk <- Run 일 땐
Conditions isWalk 를 true

 

Walk -> Run 일 땐
Conditions isWalk 를 false

 

 

 

헷갈릴 수 있으니 주의

Walk -> idle 될 땐

Conditions  isRun 이 false 로 저장되어야 함

 

'보통은 뛰고 shift 누르면 걷는다' 시스템 때문임

 

 

 

idle -> Walk 일 땐

Conditions 두 개 여야 함

  isRun isWalk 둘 다 true

 

 

 

shift 키 쓸 수 있도록 

프로젝트 세팅-  인풋 메니저 - cancel 아래 아무 값 - 이름 Walk , 포지티브 버튼에 left shift

 

ali 버튼은 조이스틱 되어있을건데 지우기

 

 

+

 

 

걸을 때 속도 감소는 이런식으로 표현 가능

 

근데 if 절을 이런식으로 한 줄로 표현 가능

 

 가 조건에 해당될 때

  가 조건이 아닐때의 else 를 뜻함

 

용어로는 삼항연상자

 

 

 

 

 

참고로 플레이어 오브젝트의 z 로테이션은 0 이 되어야 제대로 회전이 이루어짐

loot 라던가 그런 오브젝트 z 로테이션도 0 으로 되어야 

 

 

용어 정리

 

 

LookAt

이 물체가 어느쪽을 향해 바라볼거다

transform.position

지금 우리 위치

moveVec 

나아가야 할 위치

 

 

플레이어 컨트롤러 스크립트를 정리하면 아래와 같음

using UnityEngine;

public class PlayerSC : MonoBehaviour
{
    public float speed;
    float hAxis;
    float vAxis;
    bool wDown;   // Walk 를 위핸 shift 꾹  

    Vector3 moveVec;
    Animator anim;

    void Awake()
    {
      anim = GetComponentInChildren<Animator>();
    }

    void Update()
    {
      hAxis = Input.GetAxisRaw("Horizontal");
      vAxis = Input.GetAxisRaw("Vertical");
      wDown = Input.GetButton("Walk"); //GetButton은 꾹 누를 때만 적용

      moveVec = new Vector3(hAxis, 0, vAxis).normalized;

if (wDown)  // Walk 걸을 때 속도 감소
transform.position += moveVec * speed * 0.3f * Time.deltaTime;
else 
transform.position += moveVec * speed * 1.0f * Time.deltaTime;

       anim.SetBool("isRun", moveVec != Vector3.zero);
       anim.SetBool("isWalk", wDown);

transform.LookAt(transform.position + moveVec); //회전구현
    }
}

 

 

 

+

 

플레이어 바라보는 카메라 만들기

using UnityEngine;

public class FollowCam : MonoBehaviour
{
    public Transform target;
    public Vector3 offset;


    void Update()
    {
        Transform.position = target.position + offset;
    }
}

 

카메라 컨트롤러 컴포넌트 스크립트 구성은 위와 같음

 

 

 

Target 엔 플레이어를 드래그.

 

오프셋엔 미리 맞춰놓은 카메라 각도를 적용하는 거임

오프셋엔 위에서 설정한 x y z 포지션을 그대로 적용

 

 

 

+

 

 

지금껏 만들었는데

뭔가 밋밋하다

 

그래서 45 ˚ 기울여보자

 

 

create empty 를 부모로 적용후 

바닥, 벽을 자식으로 넣은 후

엠티 오브젝트를 y 45로 돌려버리기

반응형
Posted by 이름이 익명
: