드디어 기다리고 기다리던 아이패드가 왔어요~~

저는 아이패드 프로 3세대 11인치 와이파이 64GB 실버 모델로 샀답니다.

 

 

아이패드 프로 3세대 11인치 실버, 애플펜슬 2세대, 스마트 키보드

 

 애플 스토어 가격 ₩999,000원이지만 저는 쿠팡에서 조금 더 저렴하게 896,520원에 구매했어요!

실버보다 스페이스 그레이가 조금 더 비쌌어요 (왜일까요?)

스페이스 그레이보다 실버가 덜 흔한 거 같아서 실버를 샀는데 솔직히 스페이스 그레이가 더 멋진 거 같아요.

 

 

 

 실버도 전혀 후회하지 않습니다!!! 너무 이뻐요 크흐흐흐흡 크허허헝허헝어헝

정말 가볍고 이쁘고 간지 나고 사랑스럽고 비싸고 유용한 노트가 생겼어요.

 

사운드 굉장합니다. 정말 좋아요 그냥 듣고 소름이 돋았어요.

카메라 화소도 괜찮은 편이에요!!

 

단점은 아직 잘 모르겠지만 한 가지!!!!!! 충전이 C타입이라 일반 이어폰으로는 음악을 들을 수가 없어요 ㅜㅜ

꼭 참고하세요!

 

앱스토어에서 한 번도 돈을 쓴 적이 없지만 오늘 처음으로 아이패드 필수 어플 굿 노트를 깔기 위해 돈을 써버렸습니다.

(역시 애플)

 

 

 

 

 굿노트 4랑 5가 있는데 지금 4,5 버전 두 개를 하나 가격으로 살 수 있어서 저는 업그레이드 번들 버전으로 구입했어요.

아직 한 번도 사용해보지 못해서 다음번에는 굿 노트 사용법을 올려보도록 할게요.

 

 

 

 아이펜슬이랑 스마트 키보드를 연결하니 완벽 그 자체....

 애플은 액세서리가 정말 너어어무 비싸지만 너무 찰떡이라 후회가 없어요.

여유가 있으면 사는 걸 추천합니다!!!

 

 아이패드를 구입하면 가장 먼저 하고 싶었던 건 종이질감 필름을 붙이고 그림 그리기였는데..

여러분들 종이질감 필름은 조금 더 고민해볼 필요가 있는 거 같아요

진지하게 손톱이 필름에 갈려요.. 펜슬 심도 빨리 갈릴 거 같아요 지문도 닳는 기분이 들어요

저는 빠른 시일 내로 필름을 바꿀 예정입니다.

 

 

 아이패드는 휴대폰처럼 자주 바꾸지 못해서 저는 바로 애플케어 서비스를 신청했어요.

애플 스토어에서 사실 경우는 추가로 바로 구매할 수 있지만 

쿠팡이나 다른 곳에서 구입했을 경우 아래 번호로 연락해서 신청할 수 있어요.

080-330-8877

149,000원에 아이패드 아이펜슬도 함께 가능하답니다!!

이건 꼭 추천해요!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MVC 


Model - 데이터 관리 

DTO를 통해 상태의 값을 주고 받으며, 저장된 데이터와의 통신을 위해 DAO를 사용한다.


DTO : 데이터를 전달하고 이동이 주 목적

DAO : 데이터를 가지고 변환, 디비와 연결해 값을 획득하는 클래스의 객체


View - 화면 관리(보여지는 부분 UI)

    HTML, CSS, 자바스크립트


Controller - 모델과 뷰를 관리, 페이지 이동


MVC1  모델 - 일반적인 웹 프로그래밍 jsp에서 만들어 사용하거나 자바에서 모아서 처리 

  확장성, 유지 보수가 힘든 단점이 있다


MVC2  모델 -  클래스나 jsp파일이 많이 생겨 구조도 복잡하고 접근하기 힘들지만 확장성, 유지보수에 용이하다.





Survival Shooter 카메라 설정


현재 메인카메라로 게임을 보고있다

아이소메트릭뷰 정사영 카메라 사용 설정




검은색 배경 설정


스크립트 추가

스크립트명은 정확하게 기입하는 것이 매우 중요 합니다.


스크립트 작성

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class NewBehaviourScript : MonoBehaviour {
 
    //카메라가 추적할 플레이어가 필요
    public Transform target;
    //카메라가 플레이어를 추적하되 빈틈없이 감시하기는 원하지 않는다. 플레이어가 원활하게 플레이하기 위해 약간의 지연을 준다.
    public float smoothing = 5f;
 
    //카메라와 플레이어의 오프셋을 보관
    //오프셋은 스크립트의 Start에서 카메라와 플레이어의 거리
 
    Vector3 offset;
 
    void Start()
    {
        //업데이트가 있을 때마다 동일한 오프셋을 유지할 수 있도록
        offset = transform.position - target.position;
    }
 
    //모든 물리 효과 단계를 따라감
 
    void FixedUpdate()
    {
        //카메라를 웁직이는 lerp메소드
        //이동에 필요한 벡터 2개
        Vector3 targetCamPos = target.position + offset;
        transform.position = Vector3.Lerp(transform.position, targetCamPos, smoothing * Time.deltaTime); //이동속도 설정
    }
    
 
 
}
cs





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