我写一个简单明了的范例
比如我们要同步一个V3类型的数据,
数据来源:客户端操作
目标:同步所有客户端的 Vector3 V3FromNetwork 变量值
本地客户端客户端(isLocalPlayer为true)进行操作
↓↓↓
调用[Command]修饰的方法SetTestV3,(SetTestV3就具备了往服务器上报的特性)
↓↓↓
服务器执行SetTestV3函数内容
↓↓↓
服务器修改TestV3值时,由于具备标识[SyncVar(hook = nameof(ChangeTestV3))],通知所有客户端的该对象脚本中调用ChangeTestV3
↓↓↓
客户端调用ChangeTestV3,最终成功修改到值。
代码如下
using UnityEngine;
using Mirror;
public class Player : NetworkBehaviour
{
void Update()
{
if (!isLocalPlayer) return;//只操作本地客户端
Vector3 V3SendData = new Vector3(Input.GetAxis("Vertical") * Time.deltaTime, 0, Input.GetAxis("Horizontal") * Time.deltaTime);
SetTestV3(V3SendData);
}
[Command]//客户端上行标识
public void SetTestV3(Vector3 v)
{
//服务端执行内容
TestV3 = v;
}
[SyncVar(hook = nameof(ChangeTestV3))]//服务端修改触发客户端调用hook函数
public Vector3 TestV3 = Vector3.zero;
public void ChangeTestV3(Vector3 oldv, Vector3 newc)
{
//客户端执行内容
标签: Command 从客户端发送到服务器,服务器执行
[Command]
void ABC(){}
注意点
1,方法可以带参数,但需要序列化
2,客户端只能发送属于自己的对象的方法
如果都允许,则设置为不验证:
[Command(requiresAuthority = false)]
标签: ClientRpc 从服务器发送到,客户端执行
[ClientRpc]
void ABC(){}
标签: TargetRpc 从服务器发送到,指定的客户端执行
[TargetRpc]
void TargetRemoteDamaged(NetworkConnection target, int damage){}
PS:第一个参数可忽略,默认发给自己,也就是调用此方法的客户端实体
PS:如果第一个参数有,则发给指定,目标
[Command] 由客户端调用,内容服务器执行;
[ClientRpc]和[TargetRpc]由服务器调用,内容客户端执行;
但[TargetRpc]是指定目标发送,[ClientRpc]是都发送。
一,用SyncVar进行同步
函数标签[SyncVar]
用标签来标记变量,被改变时时,同步给其他客户端;
可指定Hook指定回调函数,并返回旧值和新值
如:
[SyncVar(hook = nameof(ChangeColor))]
Color pcolor = Color.white;
void ChangeColor(Color oldc, Color newc)
{
}
即pcolor发生变化时,客户端都调用ChangeColor
PS:使用此特性标注的变量,只应该在服务器上对此变量进行更改,而通过hook在客户端作用此更改
然后hook,仅会再客户端调用,如果服务器是OnlyServer模式则不会调用
使用脚本让服务器控制所有客户端颜色变化的代码
using UnityEngine;
using Mirror;
public class PlayerController : NetworkBehaviour
{
[SyncVar(hook = nameof(ChangeColor))]
Color pcolor = Color.white;
Rigidbody rb;
MaterialPropertyBlock prop;
/// <summary>
/// 客户端收到同步时调用
/// </summary>
/// <param name="oldc"></param>
/// <param name="newc"></param>
void ChangeColor(Color oldc, Color newc)
{
Debug.Log("更新为新颜色");
prop.SetColor("_Color", newc);
GetComponent<Renderer>().SetPropertyBlock(prop);
}
private void Awake()
{
rb = GetComponent<Rigidbody>();
prop = new MaterialPropert
个人理解的两种方式
Offline,Room,GamePlay
作用:区分Online和非Online模式
通过create->mirror 创建如下脚本
[NetworkRoomManager]
作用:房间管理,有房间创建,连接,等房间相关的回调
基于房间补充相关逻辑
[NetworkRoomPlayer]
作用:包含房间里的玩家状态和回调
[NetworkBehaviour]
创建多个NetworkBehaviour :
如,NetworkBehaviour 改为 myPlayer
NetworkBehaviour 改为 myItem
作用: 有了本脚本,才会标记告知服务器需要同步本对象
继承了MonoBehaviour的Network脚本,
可以衔接Update等函数书写自己的逻辑,
取到玩家网络状态,如
isServer
如果是此对象是在服务器上运行的(包括服务器+客户端一体的主机),则返回true
isServerOnly
如果是此对象仅在服务器运行的(而非包含客户端的主机),则返回true
isClient
如果此对象已经存在,且处于客户端上(包括主机的客户端),则返回true
等等
创建空物体,命名为RoomPlayer,挂MyNetworkRoomPlayer
创建胶囊,命名为Player,挂MyPlayer
创建Cube, 命名为Item 挂myItem
客户端操作权限:
Player预制体上的挂NetworkTransform脚本的ClientAuthority 一定要勾选上,否则没有客户端操作其状态的权限。
在玩家或者我物体预制体上挂载,NetworkIdentity 脚本
(往往挂载其他Mirror脚本时,NetworkIdentity脚本会自动挂载)
1.在Offline场景空物体,挂MyNetworkRoomManager脚本
挂载好在线和离线对应的场景,Player预制体,以及房间相关的预制体和场景
2.同时
个别皓月云用户还存有这个问题,“此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决方案”
那就直接改注册表吧
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy
将enable设置为0
皓月专注于各类游戏主机/掌机收藏,也收藏全平台游戏ROM/镜像。
连平台是啥都搞不清楚的小白,建议不加。
注:本服务属于义卖,补充公益服务器运作,您也可以自己找rom,也可以购买皓月收录的rom,算作捐助皓月服务器,支持服务器发展。
粘液科技(SlimeFun)这款插件可以在不安装任何模组的情况下,让你的水桶服变得像FTB模组服务器。
它为游戏中加入了几乎任何你能够想到的东西,从背包到飞行背包······
它提供了API,使编写附属插件变得容易。
如果你拥有非小游戏为主体的服务器,且你的玩家已经玩腻了原版生存的话,
你就会深深地爱上这款插件!它为你的服务器带来了 400 多件新物品,为服务器添加了新的生存法则!
但令人苦恼的是,每一个科技的解锁,都要相当的一些经验,这对新手玩家很不友好;
也许在原版当中,30级左右就足够了,但面对粘液科技,你得确保你的经验条撑得住。
但愿你玩的开心!
武器分类含有各种各样的用来 PVP 和 PVE 的物品。
爷爷、奶奶的手杖
手杖是你从你爷爷、奶奶那里继承来的致命武器。
奶奶的手杖包含着击退②,爷爷的手杖包含着击退⑤。
这可以让你击退你的敌人更远!
斩首巨剑
斩首巨剑 (铁剑) 有几率斩首怪物,这意味着你可以通过击杀他们的方式来获得对应怪物的头颅。
用此剑击杀一只凋灵骷髅也会有更高的几率获得凋零骷髅头,这相对于一把掠夺③的剑来说。
它当然也可以被附魔。
吸血鬼金剑
吸血鬼巨剑 (金剑)的附魔为 锋利② 、 耐久④ 、 火焰附加② 和 生命窃取①。
每次你攻击一些东西的时候你有 45% 的几率回复2颗心。
地震斧
“一个便携的地震机器···”通过创建一波方块的方式,这把有能量的铁斧能够从它 10 X 1 的区域中推开所有的实体。
地震斧所打击的目标会被以远离玩家的方向打击 4 个方块的距离。
你可以通过右键它来使用本物品,但是,这会很快的使物品耐久下降。
但可惜的是,大多数服务器都ban了它。
灵魂绑定武器
灵魂绑定武器完全正如它的名字一样,你在死亡时不会掉落他们。
可以灵魂绑定的武器有两种 —— 钻石剑和弓。
这种武器和平常的武器在使用起来没有什么两样,同样你也可以附魔它们。
特殊的弓
粘液科技 (Slimefun) 为游戏添加了两种特殊的弓,寒冰弓和爆裂弓。
它们也像普通的弓一样 —— 你可以在它们上面附魔 —— 但它们也有特殊的技能。
爆裂弓
爆裂弓将它击中的实体震入空中。
寒冰弓
寒冰弓给予它所击中的实体缓慢和负面的跳跃提升效果 2 秒,这可
simulation-distance=改为3
paper.yml
prevent-tnt-from-moving-in-water: false 改为true
delay-chunk-unloads-by: 10s 改为5s
update-pathfinding-on-block-update: true改为 false //区块更新时更新怪物寻路,影响不大,但性能有优化
non-player-arrow-despawn-rate: -1改为20
bukkit
spawn-limits:
monsters: 改为25
animals: 改为8
water-animals: 3
water-ambient: 改为10
water-underground-creature: 改为3
axolotls: 改为3
ambient: 改为3
ticks-per://尝试生成tick 从1统一改为2
animal-spawns: 400
monster-spawns: 2
water-spawns: 2
water-ambient-spawns: 2
water-underground-creature-spawns: 2
axolotl-spawns: 2
ambient-spawns: 2
spigot.yml
entity-activation-range://调得更低
animals: 8
monsters: 20
raiders: 12
misc: 2
water: 4
villagers: 4
flying-monsters: 24
trident-despawn-rate: 1200改为20
arrow-despawn-rate: 600改为20
max-tnt-per-tick: 100改为10
purpur.yml
aggressive-towards-villager-when-lagging: true 改为false
us
根据最近发生的一些事情,尝试性做一些规则调整,
并先在且仅在实验服务器验证修改效果。有问题随时反馈
会按更新时间罗列出修改日志
(一张一张图改会比较费劲)
更新记录
火线风暴行动:
-除了最大升限不变其他与里海一样
阿曼湾:
-增加毒刺射程为600
威客岛:
-修改最大升限为750
-增加毒刺射程为600
班达沙漠:
-同火线风暴行动
雪山:
-增加毒刺射程为700
-aa增加到4辆
-aa导弹射程增加到1300
注:由于雪山升限为1500并且雪山可以飞到云上算是地图特色之一所以防空单位加强幅度较大
地铁行动:
-美军边界再次往前推30米防止压家
菜市场:
迫击炮炮弹装填速度调整为12秒
迫击炮从弹药箱补给速度调整为15秒
哈格岛:
-最大载具升限1000米调整为700米
-便携式防空锁定距离由400米调整为600米
-固定翼火箭弹修改为一轮14发备弹5轮单轮重新补给时间15秒
-攻击机机炮修改为备弹1150发
-所有固定翼热诱ecm重装填时间修改为15秒
暂时取消之前里海修改,又崩服bug
里海:
jet机炮调整为800发备弹
jet火箭弹修改为168发备弹,重新装填时间修改为10秒
jet热诱和ecm恢复时间修改为17秒
修改了天花板高度为750米
增加毒刺锁定距离到600米
地铁:
地铁修改了两边的边界防止压家
爆炸物补给时间调整为8秒
运河:
重生信标不能空降
所有连喷被禁用