2023. 12. 4. 19:19ㆍ카테고리 없음
1. 오늘 팀과제의 목표는 개인마다 주어진 역할 수행을 한 뒤 각자의 수행물을 하나의 MainScene에 합치는 것이다.
내가 맡게 된 역할은 게임 로직 부분으로 게임시작, 점수, 시간, 종료패널이 나오도록 하는 것이다.
캔버스를 만들어 UI 이미지와 텍스트를 추가해주고, 점수, 시간에 해당하는 텍스트를 적어준 뒤 gameManager 스크립트 작성을 했다.
float spendtime;
int totalScore = 0;
public Text scoreText;
public Text timeText;
public GameObject panel;
void Update() 시간이 흐르도록 만들어주고, 60초가 지났을 때 종료 패널이 나옴과 동시에 게임이 종료되도록 하였다.
{
spendtime += Time.deltaTime;
if (spendtime > 60)
{
Time.timeScale = 0.0f;
panel.SetActive(true);
spendtime = 0.0f;
}
timeText.text = spendtime.ToString("N1"); 소수점 첫째자리까지만 시간이 나오도록 만들었다.
}
public void addScore(int score) 점수는 총 점수에 점수를 추가하며, 총점수에 Tostring을 주어 숫자를 문자열로 표시했다.
{
totalScore += score;
scoreText.text = totalScore.ToString();
}
public void retry() 게임종료 버튼을 클릭 시 메인씬이 다시 동작하도록 함수를 추가했다.
{
SceneManager.LoadScene("MainScene");
}
void initGame() 시간과 점수를 초기화 하고, Time.timeScale 값을 1로주어 게임내 시간도 초기화했다.
{
Time.timeScale = 1.0f;
totalScore = 0;
spendtime = 0.0f;
}
점수를 구현하기 위해선 게임오브젝트 떨어지는 물체에 직접 점수를 추가해줘야 하는데,
int type;
float size;
int score;
자료형과 변수를 선언 후
type = Random.Range(1, 3); //type을 만들어서 다양한 과일들 추가
if (type == 1)
{
size = 0.5f;
score = 1;
}
if (type == 2)
{
size = 1f;
score = 2;
}
transform.localScale = new Vector3(size, size, 0); //사이즈 변경 시 사용
type 을 활용해 다양한 오브젝트도 추가가 가능하다.
//Collision을 가진 오브젝트가 다른 Collision 값을 가진 함수와 부딪혔을 때 무조건 실행
private void OnCollisionEnter2D(Collision2D coll)
{
//Ground에 부딪히면 사라진다.
if (coll.gameObject.tag == "Ground")
{
gameManager.I.addScore(score); 게임매니저 호출, Ground 태그에 오브젝트가 충돌이 일어났을 때 점수를 추가
Destroy(gameObject);
}
//Player와 부딪히면 게임 종료.
if (coll.gameObject.tag == "Player")
{
gameManager.I.gameOver();
}
}
유니티에서 충돌을 해결하기 위해 세운 방안으로
팀원 각각의 Scene을 만들어 그 씬에서 만든 기능들을 MainScene으로 하나씩 옮기는 것이다.
콘솔에서는 코드 병합을 통해 수정이 가능했지만 유니티의 경우 한명의 브랜치로 합쳐버리거나, 유니티 상에서 직접 충돌 부분을 해결해야 되서 더욱 복잡했다.
어렵게만 느껴졌던 깃 사용법이 특강도 듣고, 직접 충돌도 해결해보니 굉장히 사용하기 편리한 툴이라고 느껴졌다. 남은 기간동안 팀과제의 완성도를 높이기 위해 더욱 공부를 해야겠다.
집중 코딩시간에 사운드 추가 및 Slide 바를 사용하여 볼륨조절을 하고자 했지만, 전혀 기능이 동작되지 않았다. Audio Mixer 부분에 대한 공부가 필요할 것 같다.