范围检测可以通过检测到的模型获取对应的类么?

[复制链接]
1174 |9
今天小雨转甜 发表于 2023-8-16 16:56:00 | 显示全部楼层 |阅读模式
描述: 需要在场景中创建一个物体,所以写了一个物体的类。包括物体的模型,血量等属性。每次创建的时候就 new一个新的类。

需求:玩家通过范围检测获取到这个类。
问题:范围检测检测到的是对应的物体的模型,没有办法直接检测到这个类,怎样通过检测到的模型获取对应的类呢,从而可以使用类中的其他属性。
回复

使用道具 举报

汽汽汽汽水 发表于 2023-8-16 16:57:33 | 显示全部楼层
创建怪物应该是有个统一的脚本去创建的,在这个脚本中维护一下怪物的 GUID。 然后通过范围检测获取到 GUID 在这个对应的脚本中查询一下
回复

使用道具 举报

空伊伊 发表于 2023-8-16 17:05:28 | 显示全部楼层
【口袋方舟手把手教学:打怪小游戏】

可以看这个打怪教程里,从P7攻击怪物&刷怪点的第4分20秒开始看,这里正好就是制作你需要的这个功能
回复

使用道具 举报

今天小雨转甜楼主 发表于 2023-8-16 17:22:27 | 显示全部楼层
空伊伊 发表于 2023-8-16 17:05
【口袋方舟手把手教学:打怪小游戏】 https://www.bilibili.com/video/BV1Sk4y1G7bC/?p=7&share_source=cop ...

和这个略有区别,因为我是在服务端创建的物体,同步后储存在客户端的数组中,所以数组中的类型和检测到的对应不上。
回复

使用道具 举报

空伊伊 发表于 2023-8-16 17:32:22 | 显示全部楼层
今天小雨转甜 发表于 2023-8-16 17:22
和这个略有区别,因为我是在服务端创建的物体,同步后储存在客户端的数组中,所以数组中的类型和检测到的 ...

做法是差不多的,你在服务端创建的物体,服务端只是去做了同步,实际物体还是会生成在客户端的。
还有对应不上是什么意思呢~?
回复

使用道具 举报

今天小雨转甜楼主 发表于 2023-8-16 18:07:31 | 显示全部楼层
确实会显示在客户端,但是物体实际是储存在服务端的。
因为需要在客户端进行检测,所以需要先获取服务端的储存物体的数组,然后通过数组中元素的model与检测到的object对比是否 === 。这样才可以获取到对应的索引。
但是是要对客户端的物体的数据进行处理。(这里有点不会描述了)
我举个例子看能说清楚么:
image.png


回复

使用道具 举报

今天小雨转甜楼主 发表于 2023-8-16 18:22:50 | 显示全部楼层
空伊伊 发表于 2023-8-16 17:32
做法是差不多的,你在服务端创建的物体,服务端只是去做了同步,实际物体还是会生成在客户端的。
还有对 ...


确实会显示在客户端,但是物体实际是储存在服务端的,调用服务端的方法获取到了服务端的物体。不过对客户端是无效的,大概就是这个意思。
回复

使用道具 举报

空伊伊 发表于 2023-8-16 18:30:37 | 显示全部楼层
照你现在的思路,你需要将客户端检测到的模型的Guid,发送到服务端,去与服务端的模型的Guid进行比较。
但我感觉这么做有点绕呢,为什么不直接在服务端进行检测,或者直接在客户端进行创建呢?~
回复

使用道具 举报

今天小雨转甜楼主 发表于 2023-8-16 18:36:48 | 显示全部楼层
空伊伊 发表于 2023-8-16 18:30
照你现在的思路,你需要将客户端检测到的模型的Guid,发送到服务端,去与服务端的模型的Guid进行比较。
但 ...

是有点绕,服务端创建是因为要同步在所有玩家。
至于客户端检测:因为检测后获取到的类的数据需要在客户端使用。如果在服务端检测的话可能需要向客户端传递这个类,我想避免这个操作,主要是之前把类作为复杂类型传参发生过好多错误。
回复

使用道具 举报

空伊伊 发表于 2023-8-16 18:52:55 | 显示全部楼层
这个比较方便的做法是通过属性同步,也就是replicated这个功能来制作。
帖子是这条:
https://forum.ark.online/forum.p ... ighlight=replicated

用replicated做你这个功能:
1.新建一个属性同步脚本,给这个脚本添加一个属性,这个属性代表物体的唯一ID。给这个属性添加属性同步装饰器,并关联一个属性值改变时会触发的函数,我在这里将这个函数称为myFunction吧。
2.在myFunction里编写一段逻辑,用来创建一个classA,这个classA里的成员分别是模型和唯一ID。
3.客户端创建一个数组,这个数组用来存放所有的classA
4.在服务端创建一个数组,这个数组用来存放属性同步脚本。
5.每当服务端创建一个属性同步脚本,就给属性同步脚本的唯一ID进行赋值,然后客户端就会调用myFunction来创建一个classA。
6.当客户端检测到一个模型,就判断这个模型是否是classA的模型,然后将唯一ID发送给服务器,服务器通过这个ID来判断应该对哪个物体进行修改。(这个修改可以是某个被属性同步装饰器标记过的属性值,然后客户端通过类似于myFunction这样的函数来进行具体的表现)
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表