과도한 플레이어 생성 잔해를 어떻게 정리할 수 있습니까?


92

내가 만들고있는 최신 게임에서 2D 객체를 임의로 슬라이스 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

수백 또는 수천 개의 조각으로 지속적으로자를 수 있습니다. 이것이 항상 수면 물리 상태에 있기 때문에 많은 지연을 발생 시키지는 않지만 이동을 일으킬 때 문제가 있습니다.

나는 그것을 어떻게 다루어야할지 잘 모르겠다. 특정 시간이 지나면 삭제하고 싶지 않습니다. 나는 당신이 잠시 후에 잘라낸 무언가로 되돌아 가면 무작위로 사라지는 방법을 좋아하지 않습니다.

과도한 플레이어 생성 잔해를 어떻게 정리할 수 있습니까?


17
실제로 당신이 원하는 것이 당신의 질문에서 명확하지 않습니다. 당신은 "잔해를 청소하고 싶다"고 말하지만 동시에 당신은 잔해가 잠시 후에 사라지는 것을 원하지 않는다고 말합니다.
Philipp

10
작은 & 큰 작은 조각을 파괴합니다. 더 큰 조각이 레벨에 머물렀다는 것을 확신하지만 완전히 기억하지는 못합니다. 예를 들면 다음과 같습니다. youtu.be/236ly0ApPqg?t=177
TyCobb

2
범위를 벗어난 물건은 다시 올 때 제거하고 교체 할 수 있습니다.
Loren Pechtel 2016 년

3
내 작은 의견이지만 잘라 내기 동작에 의해 영향을 받기 위해 최소 물체 크기를 설정하십시오. 자르려는 조각을 찾기가 어렵다면자를 수 없습니다. (단지, 멋진 게임 역학, 이것은 확실히 다리를 가지고 있습니다!)
AJFaraday

12
나는 컷팅 메카닉이 github에서 찾은 무료 자산 이기 때문에 커팅 메카니즘을 만드는 데 아무런 기여도 없다고 말하고 싶습니다 . 예제를 사용하여 개체를 자르는 방법에 대한 아이디어를 얻을 수 있습니다. (플레이어는 나에 의해 코딩되었으며 게임의 다른 모든
것들도

답변:


71

우선, 그 게임 메카닉은 정말 재미있을 것 같아서 그것을 생각한 것을 축하합니다! 다음은이 특정 문제를 해결하기 위해 독립적으로 또는 함께 사용할 수있는 두 가지 간단한 솔루션입니다.

매우 작은 조각 제거

플레이어를 방해하거나 환경에 실제로 영향을 미치지 않는 작은 충돌 조각을 유지해야 할 점은 많지 않습니다. 여분의 충돌 논리를 계산하는 것은 그만한 가치가 없으므로 이러한 부분을 제거하거나 충돌을 제거하십시오.

플레이어 컷 제한

무제한 자르기를 사용하면 모든 방해물을 뭉치 더미로 얇게 썰면 많은 퍼즐을 간단하게 만들 수 있습니다. 플레이어에게 몇 가지 상처 만 주면됩니다 (또는 시간이 지남에 따라 천천히 재충전됩니다).


1
퍼즐 게임을 만들 계획이 없기 때문에 첫 번째로 할 것이라고 생각하십시오.
Ducktor

36
작은 조각들도 사라질 때 마이클 베이 그것은 로그가 아니며 톱밥입니다. 또는 톱밥 폭발. 왜 안돼?!
corsiKa

26
@corsiKa 절단 동작에 약간의 타오르는 효과를 추가하면 절단 부분이 특정 너비의 접점에 흠집을 남길 수 있습니다. 물체가 너무 작아서 완전히 "스코어 (scorched)"상태가되면 화염에 터져 몇 분 안에 타 버릴 수 있습니다.
T. Sar

155

병목 현상 파악

수백 개의 움직이는 물체는 문제가되지 않습니다. 그러나 수백 개의 충돌 객체가있을 수 있습니다. 테스트가 필요하지만 병목 현상이 충돌이라고 생각합니다.

그건 그렇고, 우리는 얼마나 많은 물건을 말하고 있습니까? 플랫폼은 무엇입니까? 모바일 게임의 백 개체는 웹 게임의 백 개체 또는 데스크톱 게임의 백 개체와 동일하지 않습니다.

같은 게임을 테스트하지만 잘라낸 개체 사이의 충돌을 비활성화하고 비슷한 양의 개체에 지연이 발생하는지 확인하십시오. 그럴 경우, 엄청난 양의 물체가 문제의 원인이라는 것을 의미합니다. 그렇지 않으면 충돌이 문제입니다.

이렇게하면 성능 향상을 위해 수행 할 작업에 대한 결정이 이루어집니다. 아래의 모든 아이디어가 적용되는 것은 아니며 어쨌든 테스트가 필요합니다.


객체와 상호 작용할 때 문제가 발생하는 것처럼 플레이어에서 멀리 떨어진 많은 객체를 최적화하는 것에 대해서는 이야기하지 않겠습니다.

움직일 때 문제가 있습니다.

객체와 상호 작용할 때 문제가 발생하면 보이지 않는 객체를 제거하면 어떻게 해결되는지 확실하지 않지만 아직 도움이 될 것으로 가정합니다.

플레이어로부터 멀리 떨어진 물체가 문제가된다면 더 작은 레벨로 시작하거나 플레이어가가는 곳에 따라로드 및 오프로드 할 수있는 덩어리로 게임을 나눌 수 있다고 말할 수 있습니다.


출입 금지 구역의

나는 잔해를 청소할 때 가장 먼저해야 할 것은 경계를 벗어난 물체를 제거하는 것이라고 생각합니다. 예를 들어 구덩이로 떨어진 조각. 플레이어가 그것을 볼 수있는 방법이 없다면, 그것을 유지할 이유가 없습니다.

나는 이것으로 돌아올 것이다.


보다 현실적으로 만들기 (1 부)

톱, 도끼 또는 이와 유사한 도구로 나무를 자르면 재료가 손실됩니다 (톱밥, 부스러기 등). 레이저로 자르더라도 레이저는 나무를 태울 것입니다. 또한, 목재가 아닌 것의 경우, 일반적으로 절단, 부서짐 등의 주위에 변형이있을 것입니다.

내가 말하는 것은 절단이 완벽하지 않으며 일부 재료가 손실된다는 것입니다. 게임에서 모델링 할 수 있습니다. 그 마술 절단 빨간 물건은 두께가 있습니다. 물체에서 그 두께를 제거하십시오 (너무 죄책감을 느끼면 입자 효과를 추가하십시오).

이것은 당신이 그 두께보다 작은 것을 절단 할 수 없다는 것을 의미합니다. 실제로 그것을 시도하면 게임에서 제거 될 것입니다. 좋습니다! 그것은 잔해의 양이 상한이 있고 게임에서 그것을 정리하는 기계적으로 건전한 방법이 있음을 의미합니다.


작은 물체를위한 기어 교체

충돌이 문제인 경우 더 잘 작동합니다.

물체가 너무 작 으면, 다른 각도의 세부 사항은 관련성이 떨어집니다. 덜 정확한 충돌 방식으로 변경할 수 있습니다. 예를 들어 서클 콜 리더를 사용할 수 있습니다.

작은 물체도 충돌없이 처리 할 수 ​​있습니다. 이들과 에이전트 객체 (예 : 플레이어의 아바타 또는 AI 제어 문자) 간의 충돌 만 고려하십시오.

마지막으로 매우 작은 물체는 먼지로 변할 수 있습니다 (입자 효과).


보다 현실적으로 만들기 (2 부)

충돌이 문제인 경우 더 잘 작동합니다.

압력 하에서 재료가 변형되고 파손됩니다. 두께가 매우 작은 긴 물체를 만들면 위의 솔루션을 활용할 수 있도록 작은 물체로 나눕니다.

두께가 너무 작아서 부딪 칠 때 부서지고 부서지는 것처럼 보일 수 있습니다.


객체 병합

개체 수가 문제가되는 경우 더 잘 작동합니다.

많은 게임에서 성능을 떨어 뜨릴 수있는 대량의 드롭을 처리하는 데 사용하는 일반적인 트릭은 드롭을 함께 묶는 것입니다.

서로 가까이있는 작은 물체에 대해 비슷한 것을 시도 할 수 있습니다. 그것들을 하나의 대상이되게하십시오. 그러나 나는 그 조각들을 서로 붙인다는 의미는 아닙니다. 물리를 다룰 단일 객체를 만드는 것을 의미합니다. 입자 효과와 유사한 기술을 사용하여 객체를 구성하는 개별 조각을 여전히 나타낼 수 있습니다.


보다 현실적으로 만들기 (3 부)

바람 들었어? 현실에는 바람이 있습니다.

바람을 사용하여 작은 물체를 밀어냅니다.

나는 작은 물체가 적어도 즉시는 휴식을 취하지 않기 때문에 직관적으로 들릴 수 있다는 것을 알고 있습니다. 판단하기 전에 아래를 읽으십시오.

바람사용할 수 있습니다 하기 전에 멀리 작은 물체를 밀어 - 또는 빨리 - 그들은 쌓이기 시작합니다. 작은 객체에 대한 최적화를 사용하는 경우 (예 : 객체를 결합하거나 충돌을 제거하는 경우) 더 효과적입니다.

또한 바람을 사용하여 항목을 구덩이로 밀어 넣거나 튀어 나올 수없는 경우 항목을 제거하는 변명으로 사용할 수 있습니다. 나는 다시 돌아가겠다고 말했습니다. 그렇지 않은 경우에도 플레이어로부터 너무 멀리 떨어진 작은 물체를 제거하는 변명으로 작용할 수 있습니다.

플레이어가 보이지 않는 동안 물건을 제거 할 수 있습니다. 축복이 있습니다.

그 외에도 이제 바람을 추가 할 변명의 여지가있어 다른 역학이나 게임의 장애물로 바람을 추가 할 수 있습니다. 당신이 기울어지면 사물을 깨끗하게 유지하려고하는 바람의 정신을 이야기에 추가 할 수도 있습니다.

참고 : 청소할 수있는 잔해가있을 때 바람을 유발할 필요는 없습니다 (작동 할지라도), 임의의 간격으로 바람이 발생할 수 있습니다.


비버!

성가신 비버가 와서 나무를 훔칩니다!

이제 당신은 적 유형이 있습니다!

또한, 그들은 당신이 보이지 않는 동안 나무를 제거합니다. 심지어 더미였던 나무 조각으로 도망가는 비버를 보러 돌아갈 수 있도록 디자인 할 수도 있습니다. 이렇게하면 기억에 남는 순간이되고, 왜 나무가 사라 졌는지 설명하고, 직면 한 성능 문제를 한꺼번에 해결할 수 있습니다.


모든 장단점

선택한 플랫폼 또는 선택한 도구에는 제한이 있으며 게임 개발에 소요되는 시간과 예산도 한계입니다. 당신은 현실의 완벽한 시뮬레이션을 할 수 없습니다 아직 . 아무도 할 수 없습니다 .

모든 개발자는 자신의 목표 플랫폼과 당시에 사용했던 도구의 한계 내에서 작업하며, 최고의 게임은 게임의 재미와 참여를 위해 트레이드 오프를 수행해야합니다. 종종 현실적이지 않기 때문에 재미 있고 매력적입니다.

창의성은 그러한 한계에서 비롯됩니다.

그러나 개발에 편리한 실제 부분을 선택 하여 게임을 보다 사실적으로 만들 수도 있습니다 . 때때로 플레이어로부터 떨어져있는 물건을 제거하는 것은 재미있는 게임을 만드는 비용의 일부라는 것을 고려하십시오.


36
이 게시물은 잔해 오버플로 문제에 대한 확실한 해답입니다. 기술에 대한 철저한 요약을 제공하는 한편, 상황에 맞는 창의적이고 솔루션을 선택해야 할 필요성을 명확하게 보여주는 한편, 역학과 이야기가 함께 흐를 수있는 방법을 보여줍니다. 나는 단지 내가 어떻게 감동하는지 표현하는데 어려움이 있다고 말하고 싶었다.
Dragomok

12
빔 폭보다 작은 물체를 절단하려고하면 물체가 완전히 사라질 필요는 없지만 대신 하나의 작은 물체가 생성 될 수 있습니다 . 중요한 것은 절단 대상이 빔 폭을 초과하는 경우 에만 대상의 수를 늘릴 수 있다는 것 입니다.
supercat

1

세상은 이산 적입니다. 픽셀보다 작은 객체는 렌더링 할 수 없으므로 이러한 객체가 존재하지 않도록하십시오. (이것은 Theraot의 현실적 요점과 유사합니다 .)

실제로, 당신은 이것을 무료로 얻을 수 있습니다 : 플레이어는 컷 라인을 본질적으로 화면에서 이산화 라인으로 지정합니다. 컷의 효과는 모든 객체를 해당 선 위 또는 아래의 픽셀과 그 위의 픽셀로 각각 구성된 하위 객체로 나누는 것입니다. 1 픽셀 개체는 선 위와 아래에있을 수 없으므로이 알고리즘으로 잘라낼 수 없습니다.

모든 컷 테이블을 개별 픽셀로 자르면 여전히 추적 할 오브젝트가 너무 많아도 최소 크기가 더 커질 수 있습니다.

또는 걱정하지 마십시오. 플레이어가 물체를 먼지로 자르기 위해 오랜 시간을 소비 할 준비가되어 있다면, 급히 진행되지 않아 발생하는 지연을 처리 할 수 ​​있습니다. ;-)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.