오늘의 공부 내용 :
오늘은 일단 팀프로젝트를 하면서 더 많은 기능을 구현하기 위해서 내가 맡은 아이템 부분을 추가로 코딩을 하였다.
오늘의 코드 구현을 한것은 시간이 지날수록 플레이어의 속도가 계속 증가하는 코드와
장애물 충돌 시 체력이 감소되고 잠깐의 무적판정을 얻을 수 있게 하는 코드를 만들었다. 처음으로 서서히 플레이어가 증가하는 코드를 봐보자!
public float timetospeedUp =10f; // 몇초마다 속도 증가할건지
public float speedUpAmount = 1f; // 몇만큼 속도 증가할건지
일단 보면 알다싶이 기본 몇초마다 속도를 증가할지 몇만큼 속도가 증가될건지 변수 선언을 해주고
void Start()
{
StartCoroutine(SpeedUpOverTime()); // 코루틴 시작
}
IEnumerator SpeedUpOverTime() // 속도 증가 코루틴
{
while (true) // 무한 루프
{
yield return new WaitForSeconds(timetospeedUp); //10초 기다림
normalSpeed += speedUpAmount; // 속도 증가
if (!isInvincible) // 무적 상태가 아닐 때만 속도 증가
{
currentSpeed = normalSpeed; // 현재 속도를 기본 속도로 설정
}
}
}
스타트 함수안에 코루틴을 만들어서 while문으로 무한 루프로 돌 수 있게하고 그안에 몇초마다 속도를 증가할껀지! 기본은 10초로 잡았지만 public으로 선언을 했기때문에 인스팩터에서 알아서 추치 조정이 가능하니깐 그냥 임의로 지정해놓은거다!! 그러고 대쉬기를 먹을때 무적상태가 되다보니 그때는 속도증가 멈추게 해놨다.
그리고 다음 코드를 한번 봐보자
private void OnTriggerEnter2D(Collider2D other)
{
if (other.GetComponent() != null && !isInvincible) //장애물 컴포넌트를 가진 오브젝트와 충돌하고 무적상태가 아닐때
{
PlayerHealth health = GetComponent();
if (health != null)
{
health.TakeDamage(10); // 체력 감소 수치는 조절 가능
StartCoroutine(ObstacleCoroutine()); // 무적 상태 코루틴 시작
}
}
}
첫번째 이 코드부터 보자! 이코드 자체는 일단 장애물에 닿았을대 피격데미지를 입히게 설정을 해놓은것이다!! 여기서 문제 StartCoroutine(ObstacleCoroutine()); 이것은 무엇일까요!?
바로 이건 피해를 입었을때 잠시동안 무적판정을 하기위한 코루틴이다!
그래서 이후에 저것만 들어가면 오류가 나기때문에
private IEnumerator ObstacleCoroutine()
{
isInvincible = true; // 무적 상태로 설정
yield return new WaitForSeconds(isInvincibleTime); // 일정 시간(여기서는 3초) 동안 대기
isInvincible = false; // 무적 상태 해제
}
이 코드를 추가해줘야한다.. 왜냐면 ObstacleCoroutine() 이거에대한 함수가 없기때문에!
그래서 이렇게 추가를 하게 되면 플레이어가 장애물에 닿았을때 피해를 입으며 잠시동안 무적 판정에 들어가게 된다.
공부하면서 어려웠던점 :
어려웠다? 보기보다는 사실 만들다보니 장애물이 계속 연속으로 나오는데 무적기능을 넣지 않는다면 계속 데미지를 입게 되다보니 그럼 게임 진행이 되지가 않는다 그래서 그거를 넣야겠다 생각을했다!
방향성 :
이러한 필요구성들을 만들면서 계속 생각이 나다보니 욕심이생기긴 하더라 그래서 참 이게 할게 많구나.. 싶더라.. 그래도 너무 잼이있는거같고 내가 그래도 열심히 만들고 있는 코드들이 따로 막 오류를 일으키거나 그런게 없다보니 너무 좋았다.. 그래도 코드 만들면서 이 트러블슈팅이 정말 많았기 때문에 이런것들은 다 작성도 하고 생각도 많이 하고 다시 한번 복습도 해야겠다~
내일 할 것 :
프로젝트 마무리 단계이다 마무리 잘해야하는데 첫 번째고 두번째로는 리드미 작성이기때문에 이거는 첨해보는거라 잘모르겠지만 열심히 해보겠다..