내일배움캠프 18일차 TIL : 유니티 입문 팀 프로젝트 3일차, 델리게이트 특강

woollim·6일 전
0

내일배움캠프TIL

목록 보기
17/20
post-thumbnail

■ 학습 개요

오늘 계획

  • 유니티 입문 팀프로젝트
    • 캐릭터 스텟 관리 만들기
    • 캐릭터 선택창 만들기
    • 캐릭터 선택(씬) -> 게임(씬) 으로 넘어갈때 데이터 유지 시키기
    • 데이터 받아서 플레이어 캐릭터 설정되게 만들기
    • 점프 높이 설정 튜터님께 질문
    • 죽고나서 안움직이게 바꾸기
  • 첼린지 꾸준 실습(1주차 세번째)
  • 첼린지 특강(델리게이트)

학습 회고

  • 첼린지 특강(델리게이트) 기대했던 특강인 만큼 유익했다. 전에 튜터님께서 조언하신대로 강의중에는 메모를 자제하고 강의 내용 따라가기에만 집중했다. 주말에 다시 영상을 보고 내용정리를 이곳에 추가 할 예정이다.
  • 캐선하고 데이터 넘기는 법을 고민했었는데, 생각난 방법이 괜찮을지 튜터님께 조언을 구해봤었다. OK하셔서 한결 가벼운 마음으로 진행했다. 자세한 내용은 아래에..
  • 죽고 나서도 피격되고, 몬스터들에 치여서 움직이는 현상이 있어서 고치느라 고군분투 했다. 이것도 자세한 내용은 아래에..


■ 질답 정리

  • Q1. 스크립트가 많아지다보니 Awake에서 GetComponent를 했을때 아직 생성되지 않은 컴포넌트여서 null 값이 들어온적이 있습니다.
    = AddComponent를 이용하여 런타임중 컴포넌트를 추가한다면 순서가 꼬이지 않게끔 관리하기 좀 더 편함.

  • Q2. start에서 변수 초기화를 해도 되는지 궁금합니다.
    = start에서 변수 초기화 가능함.
    = Init 같은 입력 함수들을 만들어서 변수 초기화를 모아놓고, Start 함수에서 호출하면 초기화 순서도 관리 하기 편함 (복잡한 프로젝트나 초기화 순서가 중요한 경우에 유용)

  • Q3. 게임 데이터를 저장하고 불러오고 싶은데, 유니티에는 어떤 데이터 저장 방법이 있는지 궁금합니다.
    = JSON을 이용할 수 있음
    = using UnityEngine;에는 'PlayerPrefs' 라는 것이 있음, 이걸로 데이터를 저장하고 불러 올 수 있음. 게임(프로그램) 종료후에도 데이터가 보존 됨 (단, 보안에는 취약함)


■ 트러블 슈팅

죽은 캐릭터 움직임 막기

  • 문제점 : 캐릭터가 죽은 이후에도, 파이어 오브젝트에 피격당하고 몬스터에게 밀려서 이리 저리 밀쳐진다🥲

  • 해결책 : 죽는 시점에 플레이어 게임오브젝트의 콜라이더를 꺼버린다.

  • 문제점2 : 콜라이더가 사라져서 바닥 밑으로 영원히 떨어진다. 그리고 이렇게 해도 이동 입력 눌르면 이동방향대로 x축 플립되는 문제도 있음

  • 해결책2 : Rigidbody2D를 가져와서 x와 y를 얼려버리기

  • 해결책3 : 스프라이터 렌더러를 받아와서 플립x도 영원히 막기

  • 결과 : 의도대로 더이상 움직여지지도 플립되지도, 피격되지도 않음

// 이 함수를 플레이어가 죽는 시점이 있는 코드에 부착했다
private void DeadSet()
{
    Collider2D playerCollider = playerObject.GetComponent<Collider2D>();
    if (playerCollider != null)
    {
        playerCollider.enabled = false;  // 콜라이더 비활성화
    }

    Rigidbody2D playerRigidbody = playerObject.GetComponent<Rigidbody2D>();
    if (playerRigidbody != null)
    {
        playerRigidbody.constraints = RigidbodyConstraints2D.FreezePositionX | RigidbodyConstraints2D.FreezePositionY;
    }

    _spriteRenderer.flipX = false;
    player.isDead = true;
}

다음 씬으로 데이터 넘기는 법

  • 고민 : 캐릭터선택 씬에서 캐릭터를 선택하면 선택 정보를 저장하고, 그 정보를 다음 씬에서도 유지 할 수있어야 한다. 그 정보를 받아서 플레이어 오브젝트를 초기화해서 선택된 캐릭터가 플레이 되게끔 만들어야한다.
  • 해결책 : 데이터를 저장할 게임 오브젝트를 만들고, 씬 로드 과정에 파괴되지 않도록 한다. 다음 씬으로 넘어가면 플레이어가 남아있는 게임데이터 오브젝트에서 정보를 받아와서 초기화 하도록 한다. 아래와 같은 스크립트를 만들고 게임데이터 오브젝트에 부착했다.
  • 결과 : 다음씬에서도 건재했다
using UnityEngine;

public class DontDestroy : MonoBehaviour
{
    void Awake()
    {
        DontDestroyOnLoad(gameObject);
    }
}

0개의 댓글