检测TCP Server中两个对象之间的视线和距离

问题描述 投票:0回答:1

我正在开发一款3D多人游戏。我使用Unity 3D作为开发我的游戏客户端的平台。我必须构建MySQL C#控制台应用程序,它作为TCP服务器。我通过TCP协议将我的客户端连接到我的服务器应用程序。我有以下场景:

我在比赛中有两名球员都穿着枪,并试图互相射击。

在他们之间,有一面墙,玩家1在尝试射击玩家2时收到错误:“你的目标不在视线范围内。” (通常因为它们之间有一堵墙)

但是,玩家2正在使用“黑客”并且他移除了墙壁,因此他没有收到此错误并杀死玩家1。

我的第一个问题是:显然,仅仅依靠客户来决定两个玩家之间是否存在罚款和错误的对象并不是一个好主意。为了让我的服务器应用程序能够检测到播放器和目标之间存在对象,我该怎么办?你能提出什么建议?

我的第二个问题是:如何计算我的服务器应用程序中的两个对象之间的距离?有可能,如果可能,怎么样?

c# unity3d
1个回答
0
投票

我想在您的服务器中,您可以访问游戏世界中所有用户的数据。所以你可以做到这一点,每当用户声称已经完成命中时,如果实际可能的话,你在服务器中仔细检查它。

要这样做并找出距离,您可以使用Raycasting:

Vector3 direction = (...);
RaycastHit hit;
Vector3 convertDirection = transform.TransformDirection(direction);

if (Physics.Raycast(transform.position, convertDirection, out hit, Mathf.Infinity, layerMask))
{
    Debug.Log(hit.distance);
}

编辑:正如拉法隆所说,不确定这个服务器端的成本效益。但你可以做到。毕竟,你是铁人三项

© www.soinside.com 2019 - 2024. All rights reserved.