발표자료

2024. 2. 2. 19:58카테고리 없음

반응형

 


파괴 및 복구 시스템 개요

객체를 파괴하거나 복구하기 위해 하나의 부모 객체 아래에 완전한 객체와 파편 객체를 자식 객체로 삽입합니다. 복구 시 완전한 객체를 활성화하고 파괴 시 파편 객체를 활성화하는 방식으로 구현됩니다. 부모 객체 내에 ParentObject를 생성하고 각 객체에 대해 옵저버 패턴을 사용합니다. 클릭 및 재생 완료 값을 데이터로 전달합니다.

문제점 

그러나 데이터를 전달하더라도 새로 활성화된 자식들이 데이터를 읽지 못하는 문제가 발생했습니다. 데이터는 처음부터 활성화된 자식들로부터만 읽을 수 있었습니다.

해결책 

모든 객체를 활성화한 후 시작할 때, 파편 객체나 완전한 객체 중 하나를 객체의 유형에 따라 비활성화합니다. 따라서 모든 객체는 데이터를 부모에게 전달하고 나중에 반환합니다. 이 방식을 통해 활성화했을 때 문제가 발생하지 않았습니다.

if (child.Type == ObjectPropertyType.NOON) {
    child.gameObject.SetActive(false);
}

해결책의 문제점 

그러나 이 방법은 객체의 유형에 따라 복구와 파괴를 단 한 번만 허용합니다. 이는 중간에 비활성화된 객체가 다시 활성화될 때 데이터를 전송할 수 없기 때문입니다. 만약 전송할 수 있었더라도 지금의 방식은 문제가 많아보였습니다.

해결책의 문제점의 해결책 

파편 객체와 완전한 객체를 분리하여 서로 다른 유형의 프리팹을 생성했습니다. 이들은 서로 교환되거나 교환되지 않도록 만들어졌습니다. 결과적으로 부모와 함께 생성되어 비활성화에 대해 걱정할 필요가 없었습니다. 추가적으로, 파괴와 복구를 프리팹 교환을 통해 수행할 수 있도록 새로운 스크립트, Brack,이 생성되었습니다.

메소드 구현

  • 파괴 메소드 (Destroying): 객체를 파괴할 때 호출됩니다. Instantiate 함수를 사용하여 프리팹의 복제본을 생성하고 원본 객체의 자식 위치와 회전으로 설정합니다. 파괴된 프리팹의 모든 Rigidbody 컴포넌트에 대해 각각의 방향으로 힘을 적용합니다. 원본 게임 객체는 Destroy 함수를 통해 제거됩니다.
  • 복구 메소드 (Restoring): 객체를 복구할 때 사용됩니다. Instantiate 함수를 사용하여 프리팹의 복제본을 생성합니다. 이때 원본 객체의 위치와 회전을 사용합니다. 원본 게임 객체는 제거됩니다.

https://tv.kakao.com/v/443992622

첫번째 해결법으로 구현한 파괴와 복구

 

https://tv.kakao.com/v/444085938

두번쨰 해결법으로 구현한 파괴와 복구

 

반응형