지금 제가 디자인을 해놓은 상태가 아니라 대충 그림판으로 그렸습니다....
오늘 할 일 끝
기능
플레이어 점프 기능, 바닥 스크롤, 배경 스크롤
코드
- BackGroundScroller (배경)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BackGroundScroller : MonoBehaviour
{
public SpriteRenderer[] backtiles;
float speed = 1f;
void Update()
{
for (int i = 0; i < backtiles.Length; i++)
{
// 왼쪽으로 일정하게 이동
backtiles[i].transform.Translate(new Vector2(-1, 0) * Time.deltaTime * speed);
// 배경 타일이 화면 밖을 나가 -15보다 작아질 때
if (backtiles[i].transform.position.x < -15f)
{
// 가장 오른쪽 타일의 위치 파악
float rightX = float.MinValue;
for (int j = 0; j < backtiles.Length; j++)
{
if (backtiles[j].transform.position.x > rightX)
{
rightX = backtiles[j].transform.position.x;
}
}
// 새로운 위치에 배치
float tileWidth = backtiles[i].bounds.size.x;
backtiles[i].transform.position = new Vector2(rightX + tileWidth, backtiles[i].transform.position.y);
}
}
}
}
- GroundScroller (바닥)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GroundScroller : MonoBehaviour
{
public SpriteRenderer[] tiles;
float speed = 1f;
void Update()
{
for (int i = 0; i < tiles.Length; i++)
{
// 왼쪽으로 일정하게 이동
tiles[i].transform.Translate(new Vector2(-1, 0) * Time.deltaTime * speed);
// 바닥 타일이 화면 밖을 나가 -12보다 작아질 때
if (tiles[i].transform.position.x < -12f)
{
// 가장 오른쪽 타일의 위치 파악
float rightX = float.MinValue;
for (int j = 0; j < tiles.Length; j++)
{
if (tiles[j].transform.position.x > rightX)
{
rightX = tiles[j].transform.position.x;
}
}
// 새로운 위치에 배치
float tileWidth = tiles[i].bounds.size.x;
tiles[i].transform.position = new Vector2(rightX + tileWidth, tiles[i].transform.position.y);
}
}
}
}
- PlayerController (플레이어)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
bool isJump = false;
bool isTop = false;
public float jumpHeight = 0;
public float jumpSpeed = 0;
Vector2 startPosition;
void Start()
{
// 초기 위치 설정
startPosition = transform.position;
}
void Update()
{
// 마우스 클릭 이벤트
if(Input.GetMouseButton(0))
{
isJump = true;
} // 아닐때는 점프와 위치를 false로 설정하고 초기위치로 이동
else if (transform.position.y <= startPosition.y)
{
isJump=false;
isTop = false;
transform.position = startPosition;
}
// 점프가 true일때
if (isJump)
{
if(transform.position.y <= jumpHeight - 0.1f && !isTop)
{
transform.position = Vector2.Lerp(transform.position, new Vector2(transform.position.x, jumpHeight), jumpSpeed * Time.deltaTime);
}
else
{
isTop = true;
}
// 점프 한 후 다시 초기위치로 이동
if (transform.position.y > startPosition.y && isTop)
{
transform.position = Vector2.MoveTowards(transform.position, startPosition, jumpSpeed * Time.deltaTime);
}
}
}
}
어려웠던 점이나 알게된 점
처음에 스크롤 구현할때 그냥 직접 -7.3f만큼 이동해! 라고 정했었는데 내가 뭘 잘못만졌는지 아니면 7.3f의 값보다 세밀하게 설정했어야하는건지 오브젝트들이 조금씩 겹치게 되면서 점점... 이상해지는 그림을 볼 수 있었다.
맨 오른쪽의 좌표값과 너비를 구해서 더해준 값을 재생성되는 오브젝트의 x좌표로 설정하면 겹치지않게 생성이 된다.
계획
[ 개발 일정 계획표 ]
2024-04-09
- 플레이어 점프 기능, 그라운드 스크롤, 배경 스크롤
2024-04-10
- 더블 점프 기능, 장애물 설치(랜덤 장애물로 할지 고정 시간에 장애물을 보이게 할지 미정), 장애물 충돌 이벤트 설정
2024-04-11
- 로딩화면(스플래시) 제작 및 설정, 전체적인 씬 UI 구현
2024-04-12
- 기본 좀비맛 스프라이트 이용하여 애니메이션 설정, 쿠키 슬라이드 기능
2024-04-13
- 달리기 기능, 점수 기능
2024-04-14
- 화폐 관리, 뽑기 기능
2024-04-15
- 내 쿠키 확인 기능
> 이전글
https://milkyquartz.tistory.com/198
[Unity] step1. 쿠키런: 오븐브레이크 2차창작물 제작 기획안
서론 4월이 됐으니 개인 미니프로젝트 하나 만들어보고자 팬게임 제작을 목표로 삼았다. 내가 개발하려는건 쿠키런 스트리머 박김례의 팬게임으로 내가 제일 즐겨보는 유튜버이다. > 박김례 유
milkyquartz.tistory.com
'Unity > Project' 카테고리의 다른 글
[Unity] step3. 좀비런: UI와 로딩화면 제작 (2) | 2024.04.11 |
---|---|
[Unity] step2. 좀비런: 더블 점프 기능, 장애물 설치 (Feat. 내배캠 - TIL) (2) | 2024.04.10 |
[Unity] step0. 쿠키런: 오븐브레이크 2차창작물 제작 기획안 (2) | 2024.04.09 |
[Unity] AIR(AI와 AR을 이용한 교육 보조 프로그램) - 종합설계 프로젝트 (4) | 2024.01.26 |
[Unity] 유니티로 클릭해서 넘기는 영어 단어장 만들기(서버연동) (0) | 2023.11.27 |