플레이어가 보이지 않을 때 올바르게 움직임을 예측하는 방법은 무엇입니까?


20

나는 멀티 플레이어 게임을하고 있으며 클라이언트 측 예측을하고 있지만 일부 플레이어는 물약을 마시고 보이지 않게 될 수 있습니다 ...

문제는 그들이 보이지 않게 될 때 클라이언트가 자신이 있다는 것을 알기 위해 사용할 수있는 것을 공유하지 않기 때문에 플레이어가 보이지 않는 플레이어가 차지한 타일을 밟을 때 그는 성공할 것으로 예상하고 서버가 보낸 못생긴 위치 수정.

한 가지 해결책은 클라이언트가 알 수 있도록 무언가를 공유하는 것이지만 해커는이 정보를 사용하여 보이지 않는 플레이어가있는 곳을 속일 수 있습니다.

Btw 나는 이미 규칙적인 움직임 예측을 해결했는데 완벽하게 작동합니다.


4
모든 플레이어에 대한 정보를 보내십시오. 사기꾼이 속일거야 정직한 플레이어의 경험을 망치지 말고 대신 사기꾼을위한 신고 시스템을 만드는 것에 대해 생각하십시오.
user1306322

2
사기꾼이 쉬워 질수록 정직한 선수도 무너질 수 있습니다. 신고 시스템은 좋은 생각이지만, 보이지 않는 것이 게임의 큰 부분이라면, 예방 조치가 필요할 수 있습니다.
ThatOneGuy

@ user1895420 일반적으로 그러한 자료를 일반 텍스트로 보내지 않기에 충분하여 일반 플레이어가 해당 데이터를 쉽게 얻을 수 없습니다. 기술에 정통한 사람 만이 그렇게 할 수 있다면, 그 어느 것보다 좋은 예방책입니다.
user1306322

1
또는 보이지 않는 메커니즘을 약간 변경하여 매우 가까이서 작동하지 않는 것이 좋습니다. 따라서 게임 데이터를 통해 자신의 길을 속이는 사람들조차도 실제로 이점을 얻을 수 없습니다.
user1306322

보이는 플레이어가 가까이있을 때만 보이지 않는 플레이어의 위치를 ​​보내면 어떨까요? 이것은 과도한 움직임 문제를 피하기 위해 몇 개의 프레임을 제공하지만 사기꾼이 반응 할 충분한 시간을주지 않아야합니다. 보이지 않는 두 명의 플레이어에게는 충돌을 무시합니다. 모든 플레이어의 위치가있는 중앙 서버가있는 경우 위치를 브로드 캐스트 할 때와 그렇지 않을 때를 조정할 수 있습니다.
jdm

답변:


30

이것은 애니메이션 문제로 간주 될 수 있습니다. 보이지 않는 객체로 이동하려고 시도하여 서버에서 위치 수정이 다시 발생하면 수정뿐만 아니라 수정이 필요한 이유를 나타내는 플래그를 다시 보냅니다. 플레이어가 뒤로 튀어 나오는 대신 "woah"종류의 뒤로 뒤로 애니메이션을 수행하여 방금 뭔가 부딪친 것처럼 보이게 할 수 있습니다.

이 접근 방식을 사용하는 게임에서는 튀어 나온 부분에서 (적어도 순간적으로) 투명성을 제거하는 것이 드문 일이 아닙니다. 무엇보다도 이것은 보이지 않는 플레이어가 군중을 피하거나 다른 캐릭터와 너무 가까워 지도록 인센티브를 제공하여 보이지 않는 플레이어와의 충돌 빈도를 줄입니다. 따라서 이러한 종류의 충돌에 대한 애니메이션이 약하거나 존재하지 않는 경우에도 보이지 않는 캐릭터가 가시성에 튀어 나와서 방금 발생한 모든 사람에게 명확하게 전보함으로써 다소 숨겨져 있습니다.

보이지 않는 거리에서 보이지 않게 애니메이션을 제거 할 수 있습니다. 이것은 보이지 않는 플레이어에게 다른 캐릭터와의 접촉을 피하기 위해 훨씬 더 많은 동기를 부여합니다. 이는 스텔스 기반 게임 및 AI ( "비공개"를 "표시 할 수 없음"으로 대체)에 대한 일반적인 접근 방식이며 월드 오브 탱크와 같은 PvP 게임에서 볼 수 있습니다. 대기 시간 제한 내에서 충돌 할만큼 눈에 띄지 않는 부분이없는 경우 보이지 않는 문자로 인한 충돌 응답에 대해 걱정할 필요가 없습니다.

보이지 않는 물체와의 충돌을 무시하는 Dracor의 솔루션도 좋습니다. 보이지 않는 플레이어의 클라이언트를 위해 애니메이션이 다시 필요하므로 객체는 화면의 플레이어 아바타를 통해 클리핑되지 않습니다. 다른 것이 없다면, 보이는 물체가 항상 보이지 않는 물체를 밀어내어 누군가가 그와 충돌 할 때 보이지 않는 플레이어가 서버에서 자동으로 빠져 나갈 수 있습니다.

보이지 않는 보이지 않는 충돌은 조금 까다 롭습니다. 두 개의 보이지 않는 객체가 함께 클리핑되는지 확인할 수 없기 때문에 충돌을 비활성화하는 것이 유리할 수 있습니다 ( "보이지 않음"으로 가정하면 두 객체가 동일한 클라이언트에 표시되지 않음을 의미 함). 개체 중 하나가 표시되면 보이지 않는 충돌 응답으로 자동으로 돌아갑니다 (보이지 않는 개체를 밀어냅니다).

보이지 않는 사람이 누구를 볼 수있는 복잡한 세트를 가지고 있다면이 모든 것이 까다로워집니다. 필요한 경우 위의 첫 번째 또는 두 번째 솔루션이 가장 좋습니다. 이와 같은 모든 문제에 기술적 해결책이 필요한 것은 아닙니다. 디자인 솔루션 만 있으면됩니다 (예 :이 기능을 디자이너에게 허용하지 않음).


5
Team Fortress 2 게임은 첫 번째 접근 방식을 사용합니다. 보이지 않는 스파이가 다른 플레이어와 접촉하면 다른 플레이어는 스파이를 볼 수 있습니다 (또는 뒤에서 보면 최소한 장애물이 있음).
Xantix

4

보이지 않는 플레이어의 위치를 ​​클라이언트에게 알리고 싶지 않은 경우 여기에는 두 가지 옵션 만 표시됩니다. 1) 보이지 않는 플레이어의 유닛 충돌을 무시합니다-간단한 해결책이며 플레이어는 보이지 않는 플레이어를 찾을 수 없습니다 충돌 테스트 중 하나. 2) 예측 경로를 결정한 후 서버에 예측 경로를 보내고 서버 측에서 경로 자체를 수정 한 다음 새 경로를 다시 보냅니다.


보이지 않는 플레이어의 충돌을 무시하는 문제는 다른 플레이어와 충돌 할 때 보이지 않는 플레이어가 보이지 않게되는 경우입니다. 또한 기분이 좋지 않습니다. 내 게임에서 나는 실제로 길이나 길 찾기가 없다. 플레이어는 한 번에 한 단계 씩 4 방향으로 만 움직일 수있다
affiszervmention

그리고 남은 것은 예측 된 움직임 (단일 벡터 또는 벡터 배열)을 전송하고 서버 측 검사를 수행하는 것입니다. 또는 다음과 같이 수정 내용을 애니메이션으로 표시하십시오.
Daniel Rusznyak

1
그리드 기반 맵이 있고 어쨌든 모든 정사각형을 하나씩 확인하는 경우 서버 쪽에서 보이지 않는 문자의 위치를 ​​SHA-1 또는 SHA-2와 같은 단방향 인코딩으로 인코딩하려고 할 수 있습니다 확인한 좌표를 동일한 알고리즘으로 인코딩하여 자신의 경로를 확인하십시오. 성능면에서 효과적이라고 말할 수는 없지만 클라이언트 측에서 실제로하고 싶다면이 솔루션은 제한된 수의 위치에서만 작동 할 수 있으며 인코딩 할 그리드 포인트의 양 때문에 해킹이 실제로 문제가 될 수 있습니다 메모리의 데이터와 일치합니다.
Daniel Rusznyak

나는 그것이 작동하는 것을 볼 수 있습니다. 가장 작은지도에는 1500 개의 다른 위치가 있습니다. 공격자가 모든 위치를 미리 계산하지 못하도록 몇 초마다 키 변경과 함께 HMAC를 사용해야합니까?
affiszervmention 2019

5
아닙니다. 당신이 생각 해낼 수있는 계획은 해커에 대해 "안전하지"않습니다. 클라이언트가 플레이어가 주어진 위치에 충돌하는지 여부를 판단 할 수 있으면 누군가가 게임을 해킹 할 수 있습니다. 회전 키로 HMAC를 수행한다고해서 클라이언트가 초당 1500 HMAC를 수행하는 것을 막을 수는 없습니다. 마십시오 하지 암호화 너 자신을 시도합니다. 원래 목표를 달성하려면 보이지 않는 플레이어 위치가 플레이어의 1 또는 2 타일 내에있는 경우에만 클라이언트에게 보냅니다. 그런 다음 누군가 내 옆에 있는지 알기 위해 해킹 할 수 있습니다 (이것을 확인하기 위해 움직일 수 있기 때문에 유용하지 않습니다).

2

내가 오해하지 않는 한 해결책은 간단합니다. 모든 보이지 않는 플레이어에게 클라이언트 정보를 보내지 말고, 예상되는 간격 동안 동작 한계 내에서 충돌 할 수있는 범위 내에있는 플레이어에게만 정보를 보내십시오. 다시 말해, 클라이언트가 미래에 200ms 만 예측해야하는 경우, max_player_velocity units/sec * 1/5 sec유닛 내에서 보이지 않는 플레이어에 대한 정보 만 보내십시오 .


나는 그것이 효과가 있다고 생각하지만 내 게임은 타일 기반입니다 (말을 잊어 버렸습니다).
affiszervmention

따라서 인접한 타일이나 2 걸음 또는 그 밖의 곳에는 보이지 않는 플레이어 만 공개하십시오.
R ..

다음은 아니다 확실히 그들은 충돌 것, 보이지 않는 선수는 발견되지에 해킹 사람을 멀리 할 것
affiszervmention
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.