2017-04-19 5 views
1

유니티에서 아레나 스타일의 배틀 게임을 만들고 플레이어를 리플레이하는 데 문제가 있습니다. 바로 지금 작동하는 방법입니다.유니티에서 동시에 2 명의 플레이어 오브젝트 리셋하기

플레이어가 죽으면 플레이어가 살해당한 플레이어의 목록에 넣어 플레이어 오브젝트가 파괴됩니다. 그런 다음 게임은 죽은 플레이어 목록을 반복하고 임의의 사용 가능한 스폰 지점을 선택한 다음 플레이어를 다시 스폰합니다. 사용 가능한 스폰 지점은 플레이어가 스폰 지역에있을 때 트리거되지 않는 모든 스폰 지점입니다.

동시에 두 명이 죽거나 적어도 거의 같은 시간에 가까울 때 문제가 발생하며 임의로 선택한 스폰 지점은 트리거 된 시간만큼 처리 할 시간이 없기 때문에 동일하게 끝납니다. 이런 일이 일어날 때 화합의 모든 충돌과 나는 그것을 완전히 다시 시작해야합니다.

나는이 문제를 해결하기 위해 Unity가 동시에 이들을 생성하지 못하도록해야한다고 생각하지만 목록을 반복하여 해결할 것이라고 생각했습니다. 같은 시간에 더 안전하게 죽는 2 명의 선수를 산란하려면 어떻게해야합니까?

답변

0

나는 내 문제를 파악 :) 도움이 나는 무작위로 스폰 포인트를 유지할 수있어 바랍니다. 이 문제는 분명히 2 명의 플레이어가 동시에 죽어가는 것과 관련이 없었습니다. 스폰 방에서 플레이어가 죽어가는 것과 관련이 있습니다. 이 경우 OnTriggerLeave() 메서드가 실행되지 않으므로 사용할 수있는 스폰 지점으로 계산되지 않으므로 아무 것도 없었습니다.

각 스폰 지점에 플레이어를 입력하고 나가는 동안 변경 될 모든 게임 개체의 목록이 포함되도록하여 문제를 해결했습니다. 그런 다음 플레이어가 사망하면 각 스폰 지점 목록에 플레이어의 게임 개체가 포함되어 있는지 확인합니다. 일치하는 것이 발견되면 스폰 지점을 해제하고 사용 가능한 것으로 나타납니다.

더 나은 접근 방법은 대신 spawnpoint 목록에 게임 개체가 있는지 확인하기 위해 목록을 확인하는 것입니다. 아무 것도없는 경우에만 사용할 수 있어야합니다. 현재 방법은 다른 객체를 고려하지 않기 때문에 포인트를 트리거합니다.

0

이것은 다중 스레드 응용 프로그램에서 동일한 문제가 발생하는 일반적인 대기열 예제입니다. 두 가지 여기서 수행 할 수 있습니다 우려

    1. 기분 전환을 제거 충돌을 첫 번째 방법에서

    을 처음부터 당신이 경기장에서 예를 들어 플레이어 스크립트 외부의 스크립트를 만들고 그것을 자기 거기서 다음의 산란 포인트를 선택하기위한 메소드를 작성합니다. 이것은 무작위가 아닌 서수가 될 수 있으며, 사망 할 때마다 각 플레이어는 스크립트에 다음 산란 지점을 선택하도록 요청하고 한 지점에서 충돌이 발생하지 않도록합니다.

    두 번째 방법에서 각 플레이어는 자신의 스폰 지점을 갖게됩니다 (예 : 경기장에 정의 된 산란 지점으로부터의 오프셋). 예를 들어 플레이어 1은 오프셋 0을 가지고 산란 포인트에서 바로 스폰합니다. 그러면 플레이어 2는 산란 포인트에서 1 유닛을 스폰하는 오프셋 1을 갖게됩니다.

    플레이어 수가 제한되어있는 경우 첫 번째 방법을 선호합니다. 플레이어가 많으면 대기열이 귀찮을 수 있습니다.

  • 관련 문제