TIL의 첫 시작!!
금일 공부 한 것
C# 사전 문법 기초 (Unity 사전캠프) - 연습문제 1~7
[스파르타코딩클럽] 게임개발 종합반 - 1주차
-> 간단한 모바일 게임/르탄으로 빗물 받는 게임(?) 제작
알게 된 점
1. Unity로 c#스크립트로 생성시 기본으로 짜여진 모습
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//using은 XXXX.XXXX();같은 형태로 호출해야 되는 것을 미리 선언해둠으로써 생략가능
public class rtan : MonoBehaviour //C# 스크립트 이름 = rtan
{
// Start is called before the first frame update
void Start() //위에 적힌 주석처럼 처음 시작시 호출됨 -> 처음만 호출하는거 적어주면 됨
{
}
// Update is called once per frame
void Update() //프레임당 한 번 호출 -> 계속 바뀌는 상태를 적어주면 됨
{
}
}
public class rtan : MonoBehaviour
{
float direction = 0.05f; //=> 1프레임당 이동되는 값을 넣은 변수
float toward = 1.0f; //=> 이미지를 반전시키는 값을 넣은 변수
void Start(){}
void Update()
{
if (Input.GetMouseButtonDown(0)) //그말 그대로 마우스의 버튼이 눌리면 = true
{
toward *= -1; //*-1을 곱하여 조건에 맞게 반전
direction *= -1; //*-1을 곱하여 조건에 맞게 반전
}
if (transform.position.x > 2.8f) //오른쪽 벽의 최대치
{
direction = -0.05f; //역방향 이동
toward = -1.0f; //이미지 역뱡향
}
if (transform.position.x < -2.8f) //왼쪽 벽의 최대치
{
direction = 0.05f; //순방향 이동
toward = 1.0f; //이미지 순방향
}
transform.localScale = new Vector3(toward, 1, 1);
//크기를 기본 1과 동일한 값이지만 부호가 반대여서 반전을 구현
transform.position += new Vector3(direction, 0, 0);
//position -> 위치 변경 , localScale -> 크기 변경 Vector3 -> z,y,z축으로 변경
}
}
반전에 관한 참조자료
Daek_You님의 블로그 - [Unity] 2D 게임 오브젝트가 바라보는 방향 전환하기
3. 빗방울(rain)
public class rain : MonoBehaviour
{
int type; //비의 타입을 저장하는 변수
float size; //비의 사이즈
int score; //점수
void Start()
{
float x = UnityEngine.Random.Range(-2.7f, 2.7f); //비를 랜덤한 위치생성(x축)
float y = UnityEngine.Random.Range(3.0f, 5.0f); //비를 랜덤한 위치생성(y축)
transform.position = new Vector3(x, y, 0);
type = UnityEngine.Random.Range(1, 5); //1~4의 값을 랜덤으로 저장
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 / 255f, 100 / 255f, 255 / 255f, 255 / 255f);
}
transform.localScale = new Vector3(size, size, 0);
}
void Update()
{
}
void OnCollisionEnter2D(Collision2D coll) //현재 오브젝트 콜라이더와 다른 오브젝트의 콜라이더와 접촉시 호출
{
if (coll.gameObject.tag == "ground") //충돌한 오브젝트 태그가 "ground"일시 True
{
Destroy(gameObject); //오브젝트 삭제(빗방울)
}
if (coll.gameObject.tag == "rtan")
{
Destroy(gameObject);
GameManager.I.addScore(score); // 게임매니저에 있는 addScore를 호출
}
}
}
OnCollisionEnter2D() 메서드에 관한 참조자료
Han님의 블로그 - 유니티2D #19 유니티 OnCollisionEnter2D , OnCollisionExit2D
4. 패널(panel)
public void retry()
{
GameManager.I.retry(); //패널을 누를시 GameManager의 retry를 호출하여 게임 초기화
}
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public GameObject rain;
public GameObject panel;
public static GameManager I;
public Text scoreText;
public Text timeText;
int totalScore;
float limit = 5; //제한시간 초기값
private void Awake()
{
I = this; //싱글톤화 자기자신을 참조하여 중복생성 방지
}
void Start()
{
initGame(); //텍스트 및 점수, 시간값을 초기화
InvokeRepeating("makeRain", 0, 0.5f); //처음시작 시간 0초 0.5초마다 반복하여 makeRain을 호출
}
void makeRain()
{
Instantiate(rain);//"rain"이라는 게임 오브젝트를 인스턴스화
}
void Update()
{
limit -= Time.deltaTime; //프레임이 완료되기까지 걸린 시간.
if (limit < 0) //제한시간이 0초가 되면
{
Time.timeScale = 0.0f; //시간 정지
panel.SetActive(true); //패널 가시화
limit = 0.0f;
}
timeText.text = limit.ToString("N2"); // limit값을 텍스트에 표현, N2 : 소수점 2자리까지 표현
}
public void addScore(int score)
{
totalScore += score;
scoreText.text = totalScore.ToString();
}
public void retry()
{
SceneManager.LoadScene("MainScene");//스크린 화면을 "MainScene"로 이동
}
void initGame()
{
Time.timeScale = 1.0f;
totalScore = 0;
limit = 30.0f;
}
}
Time.deltaTime에 관한 참고 자료
베르의 프로그래밍 노트 블로그의 - [Unity] Time.deltaTime
싱글톤 패턴에 관한 참조 자료
C#-디자인 패턴-싱글톤 패턴
this에 관한 참조 자료
자유로운영혼의 블로그 - [C# 기초]this키워드, this()생성자 개념
느낀 점
Unity는 툴이 잘 되어있어 드로그앤 드롭으로 손쉽게 제작할 수 있다.
아직 모르는 것이 많아서 정리하는데 오래걸렸다...
그리고 나와 같은 수업(?)을 듣는사람의 선배를 찾았다.
https://velog.io/@notmyfirst/unity-study-1