Unity - 1st Week
Unity란?
Unity3D는 게임 엔진의 일종.
게임 개발을 도와주는 IDE (Intergrated Development Environment , 개발환경)이다.
멀티플랫폼
빌드를 지원 한다.
게임을 만들면 PC로도, 모바일로도 바로 이식이 가능하다 (Ex. 하스스톤)
Unity3D는 2D게임을 만드는데도 활용될 수 있다.
게임
엔진을 이용한 게임 제작은 네이티브 코딩으로 게임을 만드는 것에 비해서는 High-Level.
따라서 하이 레벨의 장단점을 비슷하게 가진다.
장점 : 쉽고 간단하게 결과물을 낼 수 있다.
단점 : 세부적인 최적화가 힘들다. (속도, 발열문제) 엔진에서 지원하지 않는 쪽으로는 개발이 힘들다.
하지만 엔진사용으로 얻을 수 있는 개발 기간 단축이 매우 크기
때문에
업계에서는 게임 엔진을 거의 무조건 사용한다.
여타
다른 단점을 보완하기위해 자기 회사에 딱 알맞은 자체 개발 엔진을 만들어 쓰기도 한다.
언리얼과의 비교
언리얼
C++이용, 엔진의 소스를 전부 오픈함.
유니티
C# 이용, 엔진의 소스는 공개되어 있지만 수정은 불가.
엔진 자체 버그 발생시 아무것도 할 수 없다는 단점.
하지만 이용자수가 많고, 가이드가 잘 되어있으며 커뮤니티 질문답변도 활발한지라 공부하기에
좋은 엔진.
비슷하게, Asset Store라는 개발 리소스 (그래픽, 사운드, 이펙트 등등) 장터가 잘 구축되어 있어서
무료 Asset으로 연습하기에도 용이하다.
기본적으로
Single
Thread 구조. 스크립트
언어로 C#이나 Js, Boo등을 사용.
함수
Debug.Log
C에서의 printf(), Java의 System.out.Print()와 유사한 함수이다.
Input.Getkey
파라미터로 KeyCode를 받아서 해당키가 눌렸는지 아닌지를 true 또는 false로 리턴해준다.
키가 계속 눌려있을경우 계속 true를 리턴한다.
Input.GetkeyDown
키가 눌린 순간에만 한번 true를 리턴하고 이후에는 false를 리턴한다.
Input.GetkeyUp
키가 눌렸다 떼지는 순간에만 한번 true를 리턴한다.
Transform.Translate
파라미터로 float형 3개를 받아서, 그 값만큼 x,y,z축 방향으로 이동시켜준다.
프레임
게임에서 말하는 프레임은 초당 프레임을 말한다. (Frame Per Second, FPS)
컴퓨터마다 프레임이 다르게 나오고,
심지어 같은 컴퓨터에서도 순간 연산량의 변화에 따라 프레임이 다르게 나올 수 있다.
앞에서 말한 함수들은 매 프레임당 n씩 움직인다.
즉, 초당 프레임에 따라 초당 이동거리가 달라지는 셈이다.
프레임에 귀속되지 않고 시간당 동일한 이동거리를 가지려면 어떻게 해야할까?
Time.deltaTime
이 변수는 이전 프레임과 현재 프레임 사이의 시간 변화량이 저장되어있는 읽기전영 변수이다.
프레임당 이동거리에 Time.deltaTime을 곱해주면 프레임에 구애받지 않고 일정한 속도의 이동을 구현할 수 있다.
ex) transform.Translate(10f*Time.deltaTime, 0f, 0f);
<실습하기>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
Debug.Log ("A!");
}
// Update is called once per frame
void Update () {
Debug.Log ("B!");
if (Input.GetKey (KeyCode.W)) {
transform.Translate (0f, -10f*Time.deltaTime, 0f);
}
if (Input.GetKey (KeyCode.A)) {
transform.Translate (10f*Time.deltaTime, 0f, 0f);
}
if (Input.GetKey (KeyCode.S)) {
transform.Translate (0f, 10f*Time.deltaTime, 0f);
}
if (Input.GetKey (KeyCode.D)) {
transform.Translate (-10f*Time.deltaTime, 0f, 0f);
}
}
}
함수
Debug.Log
C에서의 printf(), Java의 System.out.Print()와 유사한 함수이다.
Input.Getkey
파라미터로 KeyCode를 받아서 해당키가 눌렸는지 아닌지를 true 또는 false로 리턴해준다.
키가 계속 눌려있을경우 계속 true를 리턴한다.
Input.GetkeyDown
키가 눌린 순간에만 한번 true를 리턴하고 이후에는 false를 리턴한다.
Input.GetkeyUp
키가 눌렸다 떼지는 순간에만 한번 true를 리턴한다.
Transform.Translate
파라미터로 float형 3개를 받아서, 그 값만큼 x,y,z축 방향으로 이동시켜준다.
프레임
게임에서 말하는 프레임은 초당 프레임을 말한다. (Frame Per Second, FPS)
컴퓨터마다 프레임이 다르게 나오고,
심지어 같은 컴퓨터에서도 순간 연산량의 변화에 따라 프레임이 다르게 나올 수 있다.
앞에서 말한 함수들은 매 프레임당 n씩 움직인다.
즉, 초당 프레임에 따라 초당 이동거리가 달라지는 셈이다.
프레임에 귀속되지 않고 시간당 동일한 이동거리를 가지려면 어떻게 해야할까?
Time.deltaTime
이 변수는 이전 프레임과 현재 프레임 사이의 시간 변화량이 저장되어있는 읽기전영 변수이다.
프레임당 이동거리에 Time.deltaTime을 곱해주면 프레임에 구애받지 않고 일정한 속도의 이동을 구현할 수 있다.
ex) transform.Translate(10f*Time.deltaTime, 0f, 0f);
<실습하기>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
Debug.Log ("A!");
}
// Update is called once per frame
void Update () {
Debug.Log ("B!");
if (Input.GetKey (KeyCode.W)) {
transform.Translate (0f, -10f*Time.deltaTime, 0f);
}
if (Input.GetKey (KeyCode.A)) {
transform.Translate (10f*Time.deltaTime, 0f, 0f);
}
if (Input.GetKey (KeyCode.S)) {
transform.Translate (0f, 10f*Time.deltaTime, 0f);
}
if (Input.GetKey (KeyCode.D)) {
transform.Translate (-10f*Time.deltaTime, 0f, 0f);
}
}
}
댓글
댓글 쓰기