Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换武器的方法?_C#_Networking_Unity3d_Multiplayer_Photon - Fatal编程技术网

C# 转换武器的方法?

C# 转换武器的方法?,c#,networking,unity3d,multiplayer,photon,C#,Networking,Unity3d,Multiplayer,Photon,我正在用PhotonNetworking开发我在Unity3D中的第一个多人游戏。你可以把它想象成一个2D竞技场游戏,基本上是“在2D中守望” 我已经到了玩家可以通过英雄菜单在不同英雄之间切换的地步(可在繁殖点访问) 这是通过以下方式实现的: 游戏开始: 从我的SQL数据库加载表“hero_data”,并将值存储在我的字典中,其中“data”是一个结构{int-ID,healthpoints,weaponType…} 从SQL db加载表“武器数据”,将其存储在Dict中。。。。。(同一过程)

我正在用PhotonNetworking开发我在Unity3D中的第一个多人游戏。你可以把它想象成一个2D竞技场游戏,基本上是“在2D中守望”

我已经到了玩家可以通过英雄菜单在不同英雄之间切换的地步(可在繁殖点访问)

这是通过以下方式实现的:

游戏开始:

  • 从我的SQL数据库加载表“hero_data”,并将值存储在我的
    字典中,其中“data”是一个
    结构{int-ID,healthpoints,weaponType…}
  • 从SQL db加载表“武器数据”,将其存储在Dict中。。。。。(同一过程)
英雄切换:

通过调用RPC来切换英雄,让每个人都知道英雄已被切换,并基本上在英雄数据字典的特定索引处获取值 这似乎完美无瑕

然而,每个英雄都有自己的武器(应该是英雄的子对象),我不知道应该采取哪种方法来切换武器

事实:

  • 武器数据(字典)包括
    int“伤害”、“射程”、“弹药库”、“射击频率”、“飞溅伤害”…
  • 我认为<>强>至少3种武器类型:光线投射(激光)、射弹实例化(火箭弹)、近战(碰撞检查)
  • 武器类型共享公共字段,如
    “伤害”、“射程”、“弹药库”…
  • 游戏包含大约10个英雄
开发不同的点火类型不是问题! 切换武器的最佳方式是什么

我已经想到了:

  • 基类
    武器:单行为{}
    它继承了一个
    虚拟射击(){raycast firing?}
继承类,例如:
projectleshooting:warms{}
使用
override Shoot(){projectle实例化?}

  • 提到的RPC“SwitchHero”可能包含一行类似于
    if(hero.weaponType=1){weaponObject.AddComponent();}

  • 还是应该使用一个方法实例化ProjectleShooting类

  • 或者为每个英雄创建一个包含武器的阵列?(我个人不喜欢这种方法,因为大约有10个英雄,但其中一些拥有相同的武器类型,只是不同的伤害和弹匣值)


你认为这些方法怎么样?您如何设计多人游戏(英雄+)武器切换?

我认为每个英雄都有自己的武器集合没有任何问题,因为他们需要单独跟踪弹药数量等信息。这种方法会给你带来问题吗?在这里使用继承/接口也是必须的,因为你当然不想在开火时检测武器的确切类型-让武器决定当它被告知开火时它将如何行动。我只是对接口做了一些研究(不知道它们和它们的逻辑)。如果我错了,请纠正我:你建议我为每个英雄创造一件武器(每个英雄只有一件独特的武器),也许是作为一种尝试?英雄有武器火箭发射器。Rocketlauncher附带有“Rocketlauncher.cs”:
Rocketlauncher:arm,IShootable,IReloadable{…}
?我甚至可能建议多个游戏对象,一个英雄下的每种武器一个-然后禁用/启用它们,并在为英雄切换武器时更新对活动对象的引用。然后是的-你只需要通过它的接口与主动武器交互,所以你不需要知道它是什么类型来告诉它射击/重新装弹/等等。