Survival Shooter 플레이어 캐릭터




케릭터의 기본 설정을 해보도록 하겠습니다.


플레이어 모델을 드래그해서 Hierarchy로 드래그하고 기본값을 (0,0,0)으로 설정합니다.



Player에 Player태그를 줍니다.

그러면 플레이할때 적절한 동작을 취합니다.





이동, 방향 전환등의 애니메이션 효과를 위해

애니메이션 파일을 Assets 하위폴더로 만들어로 만들어줍시다.


PlayerAC로 이름을 변경 후 다음과 같이 설정.




PlayerAC를 더블클릭하여 애니메이터 창을 열어 줍시다.


 



드래그해서 넣어줍니다.



Idle 오른쪽 클릭후Set as Layer Default State선택




오른쪽 상단 Prameters에서 +버튼을 눌러 IsWalking(boolean타입), Die(Trigger 타입) 2개를 만듭니다.

여기서 

boolean - 참 or 거짓

Trigger - 참 or 거짓을 가지지만 boolean과는 달리 참으로 설정한 시점을 거짓으로 재설정 합니다.

             Trigger하고 저절로 리셋되길 원하는 경우에 유용합니다.




Idle 에서 move 로 트렌지션을 설정합니다.



흰색 화살표(트렌지션)을 누르면 오른쪽 상단에 다음과 같은 창이 뜹니다 

Conditions에서 +를 눌러 사진과 같이 설정.





다이는 true , false를 정해줄 필요가 없습니다.




물리효과를 위해 Player의 Rigidbody를 만들어 주고 

시간이 지나도 느려지지 않게 Drag, Angular Drag를 Infinity로 설정해줍니다

(inf ->enter 시 바로 Infinity로 설정됨 꿀팁)

그리고 Constraints를 이용해 캐릭터가 쓰러지거나 굴러 떨어지지 않도록 y를 고정 시킵니다.



장애물충돌 효과 및 충돌시 작은 비명소리를 위한 설정

Play on Awake를 체크할시 게임 시작과 동시에 플레이어의 비명소리가 들리기 때문에

체크 해제를 합니다.



스크립트를 Player에 드래그해서 넣어 줍니다.




이제 스크립트를 열어 코드를 적어보겠습니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using UnityEngine;
 
public class PlayerMovement : MonoBehaviour
{
    //언제든 조절할수 있는 변수 설정
    public float speed = 6f; //플레이어의 속도를 컨트롤 기본값이 6
 
    Vector3 movement; //플레이어에게 적용하려는 동작을 저장
    Animator anim; // 애니메이터 컴포넌트의 참조를 지정
    Rigidbody playerRigidbody; //리지드바디 컴포넌트도 참조
    int floorMask; //커다란 사각형 레이캐스트  레이캐스트가 플로어와만 충돌할 수 있다.
    float camRayLength = 100f; //카메라에서 발생하는 광선의 길이
 
    //Awake함수는 Start함수와 유사하지만 스크립트 활성 여부와 상관없이 호출 따라서 참조 설정등에 유리하다.
    void Awake()
    {
        floorMask = LayerMask.GetMask("Floor");  //floorMask를 설정
        anim = GetComponent<Animator>(); //애미네이터 참조 설정
        playerRigidbody = GetComponent<Rigidbody>();
    }
 
    //FixedUpdate() 스크립트에서 자동으로 호출되는 함수, 물리효과와 함께 실행
    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal"); //유니티에서 지원해주는 Horizontal기본값으로 사용한다
        float v = Input.GetAxisRaw("Vertical");  //유니티에서 지원해주는 Vertical 기본값으로 사용한다
 
        //우리가 생성한 함수들을 호출
        Move(h, v);
        Turning();
        Animating(h, v);
    }
 
    void Move(float h, float v)
    {
        //앞서 저장한 vector설정
        movement.Set(h, 0f, v); //수직컴포넌트는 원하지 않으니 0f , x,z는 바닥과 수평을 이루게 된다.
 
        //어떤 키조합을 사용하더라도 플레이어가 같은 속도로 이동할 수 있도록 한다.
        //플레이어가 우리가 원하는 속도로 이동하게 우리가 저장한 속도 변수에 곱한다.
        //deltaTime 각 Update 호출의 시간 간격. 초단위가 되도록 설정
        movement = movement.normalized * speed * Time.deltaTime;
 
        //이 움직임을 플레이어에게 전달
        //캐릭터의 현재위치에 비례해 리지드 바디를 이동
        //플레이어의 현재위치에서 이 입력을 더한 것과 같다. 캐릭터를 조금더 이동시키기 위해 부여한 값.
        playerRigidbody.MovePosition(transform.position + movement);
    }
    //[Turning]캐릭터가 바라보고 있는 방향은 우리가 이미 저장한 입력이 아니라 마우스 입력을 기준으로 한다.
     
    void Turning()
    {
        //카메라에서 씬으로 발사하는 광선을 생성
        //케릭터가 바라보고있는 곳의 포인터를 캐릭터가 턴하여 바라보게 한다. 
        //게임 마우스 포인터에 따라 캐릭터는 돌서면서 해당 위치를 바라보고 돌아서면서 특정 방향으로 쏠수도 있다.
        Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);
 
        RaycastHit floorHit;
 
        //생성한 Ray를 쏘는것
        //가공의 이 보이지 않는 선을 만든다.
        //광선이 가지려는 위치와 방향, 길이
        if(Physics.Raycast(camRay, out floorHit, camRayLength, floorMask))
        {
            //플로워를 맞히는 포인터 - 플레이어의 위치
            Vector3 playerToMouse = floorHit.point - transform.position;
            //플레이어가 방향을 정할수 있도록
            playerToMouse.y = 0f;
 
            //벡터를 기준으로 플레이어를 회전할수 없으므로 벡터에서 Quaternion으로 변경해준다.
            Quaternion newRotation = Quaternion.LookRotation(playerToMouse);
            playerRigidbody.MoveRotation(newRotation);//완전히 새로운 회전
        }
    }
 
    //애니메이션
    void Animating(float h, float v)
    {
        //수직축 , 수평축 둘중 하나를 눌렸느냐? 하나라도 누르면 걷겠다.
        bool walking = h != 0f || v != 0f;
        anim.SetBool("IsWalking", walking);
    }
}
 
cs



게임 실행 











Survival Shooter 환경 설정




Survival Shooter 게임에서는 꿈속에서 인형들이 살아나 총으로 뿅뿅 쏘면서 죽이는 게임을 만들어 보도록 하겠습니다.


다음사이트에서 유니티에서 지원해 주는 UI들을 다운받아 봅시당!


https://assetstore.unity.com/packages/essentials/tutorial-projects/survival-shooter-tutorial-40756





클릭하면 다음과 같이 유니티 창이 생깁니다.







다운로드 해주세용



패키지에 import시켜줍니다.

이 파일들은 이번 게임을 만들때 사용되는 배경, 주인공, 악당 등 다양한 UI를 지원해 줍니다.


import가 완료되었다면 본격적으로 환경 설정을 하러 갑시다!!



https://unity3d.com/kr/learn/tutorials/projects/survival-shooter/environment?playlist=17144

(강의 참고)


[Level 01] Scenes을 만들어 주세요.


프리펩 : 프로젝트에 게임을 제공하거나 저장하는 도구




아래와 같이 드래그를 하면 배경이 적용 됩니다.





이때 transform 포지션도 다음과 같이 만들어 줍니다.

(0,0,0)을 치거나 

Reset Position을 선택하는 2가지 방법이 있습니다.



다음 프리펩 폴더에 있는 Light 프리펩도 위와같이 드래그합니다.



이게임은 카메라가 씬을 내려다 보는 방식으로 진행합니다.

플레이어를 추적하고 공격하기 위해서는 레이 캐스트를 이용해야 합니다.

의자, 레고, 자동차등 다야한 환경 오브젝트가 있으므로 

다양한 높이에서의 레이 캐스트를 더욱 간단히 정리하기 위해 플래이 쿼드에서 추가를 해줄겁니다.



다음과 같이 매우 작은 사각형이 생깁니다.

이것을 transform에서 (0,0,0)으로 리셋해줍니다.



transform환경을 다음과 같이 설정하고 Floor라는 이름으로 지어줍시다.



다음은 이것을 보이지 않게 설정하겠습니다.

콜라이더를 사용해 윤곽을 깨끗하게 만들어 줍니다.


[Mesh Renderer]에서 Remove Component을 사용해 삭제합니다.



콜라이더 윤곽만 보입니다.





레이 캐스트가 이쿼드만 점검하게 만드들기 위해 아래와 같이 레이어를 이용합니다.






배경음악을 추가하고 다음장으로 넘어가도록 하겠습니다.

별도의 게임 오브젝트를 통해 사물을 분리하고 잘 정리되도록 합니다.









Roll a Ball 게임 Pick Up Objects 게임 배포






ADD한후 Build 클릭 후 경로 설정 하면 끝!!




+ Recent posts