쉽게 배우는 모바일 게임 1주차 - 빗물 받는 르탄이 시작
캐릭터이동
transform.position x //단 x는 변수가 아니므로 해당 값을 수정할 수 없다. (불러올 수는 있다.)
//position은 Vector3 형식이므로
transform.position += new Vector3(1f, 0, 0);
//C#에서 지원하는 더욱 간단한 방법
transform.position += Vector3.right * 0.05f; //(0.05배의 속도로 이동)
단, 컴퓨터 사양에 따라 지원하는 프레임이 다를 수 있으므로 속도를 맞추기 위해서 Start() 메소드에
Application.targetFrameRate = 60;
캐릭터 이동영역 제한 및 마우스 클릭 시 반대방향 이동
캐릭터 이동영역 제한은 Update() 메소드에서 if문을 활용해 transform.position.x의 값이 제한 영역에 도달할 경우 캐릭터를 Flip 시키고 방향전환을 하면 된다.
//캐릭터 이동영역 제한
if(transform.position.x > 2.6f)
{
renderer.flipX = true;
direction = -0.05f;
}
if(transform.position.x < -2.6f)
{
renderer.flipX = false;
direction = 0.05f;
}
캐릭터 좌우(상하)반전은 SpriteRenderer를 이용
클래스 안에 SpriteRenderer을 선언 (renderer)
Start() 메소드 안에 renderer를 GetComponent<SpriteRenderer>();로 초기화하면 해당 스크립트가 적용된 오브젝트의 컴포넌트를 가져올 수 있다.
//class
SpriteRenderer renderer; //선언
//Start()
renderer = GetComponent<SpriteRenderer>(); //초기화
//활용예시
renderer.flipX = !renderer.flipX;
마우스 클릭 시 방향 전환은 스스로 먼저 찾아보라고 하셔서 해봤는데 아래와 같은 결과가 나왔다.
//나의 솔루션
if (Input.GetMouseButton(0))
{
renderer.flipX = !renderer.flipX;
direction *= -1;
}
//강사님 솔루션
if (Input.GetMouseButtonDown(0))
{
direction *= -1;
renderer.flipX = !renderer.flipX;
}
찾아보니 마우스 입력을 받으려면
GetMouseButtonDown | 마우스 버튼을 클릭했을때 true 값을 반환 |
GetMouseButton | 마우스 버튼을 클릭하고 있는 동안에 true 값을 반환 |
GetMouseButtonUp | 마우스 버튼을 클릭하고 있다 벗어났을때 true값을 반환 |
과 같은 함수를 쓸 수 있는데, 클릭하고 있는 프레임마다 방향을 변경하니 르탄이가 열정적으로 턴을 하는 거였다.
빗방울 구현하기
Rain Component에
Rigid 2D 추가: 물리값 설정
Circle Collider 2D 추가: 충돌값 설정
//Rain Script
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.name == "Ground") //Ground Object와 충돌시
{
Destroy(this.gameObject); //this(rain) Object 파괴
}
}
/*
혹은 Tag 옵션을 활용해서
collision.gameObject.CompareTag("Ground")
로 구현할 수 있음.
*/
Tag 옵션은 추후 다양한 종류의 Rain을 생성할테니 그때 이용하려나? 싶음
빗방울 랜덤 위치 설정
//Rain Start()
float x = Random.Range(-2.4f, 2.4f);
float y = Random.Range(3.0f, 5.0f);
transform.position = new Vector3(x, y, 0);
빗방울 타입 랜덤 설정
//Rain Start()
int type = Random.Range(1, 4); //Random에서 최댓값은 포함되지 않고 생성됨. (1, 2, 3 만 생성)
if (type == 1)
{
size = 0.8f;
score = 1;
renderer.color = new Color(100 / 255f, 100 / 255f, 1f, 1f); //0-1의 float값을 입력받으므로 255f로 나눠줌. //RGBT 값
}
else if (type == 2)
{
size = 1f;
score = 2;
renderer.color = new Color(130 / 255f, 130 / 255f, 1f, 1f);
}
else if (type == 3)
{
size = 1.2f;
score = 3;
renderer.color = new Color(150 / 255f, 150 / 255f, 1f, 1f);
}
transform.localScale = new Vector3(size, size, 0);
빗방울 여러개 생성하기
GameManager 빈 오브젝트 생성.
//GameManager class
public GameObject rain; //Inspector에서 Script 하위에 새로 Rain 항목 생성됨. Prefeb 넣어주기.
//Rain Object 생성
Instantiate(rain);
//반복 실행 MakeRain() 이라는 Rain Object 생성하는 함수 작성해두기
InvokeRepeating("MakeRain", 0f, 1f); //함수이름, 최초 생성 시간(몇초후), 반복 시간
Prefeb이란?
일종의 틀과 같으며, 생성한 오브젝트를 Project Assets 폴더 안에 끌어놓으면 자동 생성됨
느낀점
역시 개발은 재밌다!
하면서 역기획서를 틈틈히 작성해야지, 가 내 계획이었는데 재밌어서 역기획서 쪽으로는 눈도 돌리지 않았다.
어젯밤에 1-2 중간까지 학습해서 학습 목표를 1-7까지로 늘렸는데 딱 알맞게 목표를 달성했다.
역기획서를 작성하지 못하긴 했지만 TIL 작성 중인 지금 40분 정도 여유가 있으니 남은 시간 + 저녁 먹고 난 후의 시간을 약간 투자해서 작성하면 괜찮을 것 같다.
내일 학습 할 것은 무엇인지
1주차 마무리하는 것이 목표.
더해서 숙제 하는 김에 시간이 남는다면 빗방울 사라지는 애니메이션을 넣고, 빌드 내보내보고 싶다.
'부트캠프 > 사전캠프' 카테고리의 다른 글
[내일배움 사전캠프_2025JUN16] 콘솔 행맨 게임 (1) | 2025.06.16 |
---|---|
[내일배움 사전캠프_2025JUN13] 쉽게 배우는 모바일 게임 1주차 - 빗물 받는 르탄이 2 (마무리) (2) | 2025.06.13 |
[내일배움 사전캠프_2025JUN11] 유니티 퀘스트 개인과제 (4) | 2025.06.11 |
[내일배움 사전캠프_2025JUN10]온보딩, 유니티 조사 (0) | 2025.06.10 |
[내일배움 사전캠프] 유니티 조사 (0) | 2025.06.10 |