본문 바로가기
Hello, World!/Unity

유니티 3D 좀비 서바이벌 게임 만들자 (5)

by 27일 낮 2022. 4. 8.
728x90

 

 

Avatar Mask

 

 

 

 

 

 

Upper Body Mask 할당해주기

 

Inspector - Humanoid를 손대보면 바뀐다!

 

 

 

Inverse Kinematics 역운동학

체크 되어 있어야 함!

 

 


PlayerInput.cs

PlayerMovement.cs

생성

 

 

PlayerInput.cs 작성

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 플레이어 캐릭터를 조작하기 위한 사용자 입력을 감지
// 감지된 입력값을 다른 컴포넌트가 사용할 수 있도록 제공
public class PlayerInput : MonoBehaviour
{
    public string MoveAxisName = "Vertical";     // 앞뒤 움직임을 위한 입력축 이름
    public string rotateAxisName = "Horizontal"; // 좌우 회전을 위한 입력축 이름
    public string fireButtonName = "Fire1";      // 발사를 위한 입력 버튼 이름
    public string reloadButtonName = "Reload";   // 재장전을 위한 입력 버튼 이름

    // 값 할당은 내부에서만 가능
    public float move { get; private set; }   // 감지된 움직임 입력값
    public float rotate { get; private set; } // 감지된 회전 입력값
    public bool fire { get; private set; }    // 감지된 발사 입력값
    public bool reload { get; private set; }  // 감지된 재장전 입력값

    // 매프레임 사용자 입력을 감지
    private void Update()
    {
        // 게임오버 상태에서는 사용자 입력을 감지하지 않음
        if (GameManager.instance != null && GameManager.instance.isGameOver)
        {
            move = 0;
            rotate = 0;
            fire = false;
            reload = false;
            return;
        }

        // move에 관한 입력 감지
        move = Input.GetAxis(MoveAxisName);
        // rotate에 관한 입력 감지
        rotate = Input.GetAxis(rotateAxisName);
        // fire에 관한 입력 감지
        fire = Input.GetButton(fireButtonName);
        // reload에 관한 입력 감지
        reload = Input.GetButtonDown(reloadButtonName);
    }
}​

GameManager가 없어서 오류 뜬다!

 

 

GameManager.cs 생성

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager instance;
    public bool isGameOver = false;

    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        else
        {
            Destroy(gameObject);
        }
    }

    void Start()
    {
        
    }

    void Update()
    {
        
    }
}

 

 

 

 

Reload를 만들자

 

 

Size 18 이었던 걸 19로 바꿈 그럼 아래에 하나 생겼다!

 

 

이름이랑 버튼 수정해주고

Type이 Key or Mouse Button인지 확인

 

 

 

다시 스크립트로 돌아오자

프로퍼티 설명!

 

  • Property : 변수값을 읽거나 쓰는 과정에서 유연한 처리를 삽입할 수 있는 클래스 멤버.
    변수처럼 보이지만 변수가 아닌 특수한 형태의 메서드임

 

강사님 설명 : 그냥 기능을 가진 변수라고 생각하세요.

 

 

클래스(스크립트)를 작성하다 보면 필드를 public으로 선언해버리고 싶은 충동이 들 때가 많음. 은닉성을 지키자니 귀찮고, 편하게 작업하자니 은닉성이 신경 쓰임.

 

 

class 클래스 이름
{
    데이터형식 필드이름;
    접근한정자 데이터형식 프로퍼티이름
    {
        get { return 필드이름; }
        set { 필드이름 = value; }
    }
}

 

댓글