C# 기본 문법을 마치고, Unity로 게임 제작에 들어간다.
앞으로 계속 어떤 게임을 만들고 싶은지 구체화에 들어가야겠다!
빗방울을 모아 점수를 얻는 게임을 제작했다.
Debug.Log(변수.position.입력값); //x,y,z중 입력값에 대한 위치 출력
e.g.,
void Update()
{
Debug.Log(transform.position.x); //실시간 위치 확인
transform.position += new Vector3(direction, 0, 0);
}
void Update()
{
if (transform.position.x > 2.8f)//x가 2.8f를 넘어가면, 왼쪽 이동
direction = -0.05f;
else if (transform.position.x < -2.8f)
direction = 0.05f;
transform.position += new Vector3(direction, 0, 0);
}
void Update()
{
if (transform.position.x > 2.8f)
{
direction = -0.05f;
transform.localScale = new Vector3(-1f, 1f, 1f);
}
else if (transform.position.x < -2.8f)
{
direction = 0.05f;
transform.localScale = new Vector3(1f, 1f, 1f);
}
transform.position += new Vector3(direction, 0, 0);
}
Unity에서 물리적 충돌을 처리해주는 컴포넌트다.
Collider 컴포넌트를 오브젝트에 추가해주면, 따로 부딪히는 코딩 로직을 구현할 필요 없이
자체적으로 물리적 충돌 현상을 구현해준다. 굉장히 편하다!
2D에는 주로 BOX Collider, Curcle Collider를 사용한다.
GameManager에 모든 기능 구현 후, 호출하는 방식으로 사용.
GameManager는 단 하나만 존재!
앞으로 많이 사용 될 기능일 것 같다.
Upate 부분에 추가해주자.
loat limit = 30.0f;
...
void Update()
{
limit -= Time.deltaTime;
if (limit < 0)
{
Time.timeScale = 0.0f; //시간을 빠르게, 느리게, 멈추게할지 지정
panel.SetActive(true);
limit = 0.0f;
}
timeText.text = limit.ToString("N2"); //소숫점 둘째자리까지 잘라서 문자열에 삽입.
}
굉장히 중요한 함수다!
태그명에 해당하는 오브젝트가 Collision할 경우, 파괴된다!
if(coll.gameObject.tag =="태그명")
{
Destroy(gameObject);
}
e.g.,
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "ground")
{
Destroy(gameObject);
}
if (coll.gameObject.tag == "rtan")
{
GameManager.I.addScore(score);
Destroy(gameObject);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class rain : MonoBehaviour
{
int type;
float size;
int score;
// Start is called before the first frame update
void Start()
{
float x = Random.Range(-2.7f, 2.7f);
float y = Random.Range(3.0f, 5.0f);
transform.position = new Vector3(x, y, 0);
type = Random.Range(1, 5);
if (type == 1)
{
size = 1.2f;
score = 3;
GetComponent<SpriteRenderer>().color = new Color(100 / 255f, 100 / 255f, 255 / 255f, 255 / 255f);
}
else if (type == 2)
{
size = 1.0f;
score = 2;
GetComponent<SpriteRenderer>().color = new Color(130 / 255f, 130 / 255f, 255 / 255f, 255 / 255f);
}
else if (type == 3)
{
size = 0.8f;
score = 1;
GetComponent<SpriteRenderer>().color = new Color(150 / 255f, 150 / 255f, 255 / 255f, 255 / 255f);
}
else //빨강색 빗방울
{
size = 0.8f;
score = -5;
GetComponent<SpriteRenderer>().color = new Color(255 / 255.0f, 100.0f / 255.0f, 100.0f / 255.0f, 255.0f / 255.0f);
}
transform.localScale = new Vector3(size, size, 0);
}
// Update is called once per frame
void Update()
{
}
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "ground")
{
Destroy(gameObject);
}
if (coll.gameObject.tag == "rtan")
{
GameManager.I.addScore(score);
Destroy(gameObject);
}
}
}
간단하게 게임을 만들어 볼 수 있어서 좋았다.
스스로 아쉬운 점은, 코드를 작성할 때 오타를 많이 내서 중간 중간 시간을 좀 잡아 먹었다.
또, 내 게임이 아니니까 재밌긴 했지만 열정적이지 못했다.
물론 1~2분이지만 쌓이면 10분이니 한 영상 볼 수 있는 시간 정도이다.
천천히 작성해보자!
시간이 지날 수록 집중이 떨어지는데,
잠을 푹 자자.
코드 리뷰 필 수