[开发者心得] 坤坤出品|PrefabEvent二次开发教程——初始化流程①

[复制链接]
3194 |7
森林鹿 发表于 2023-3-3 17:23:13 | 显示全部楼层 |阅读模式
目录
初始化流程①
最新版本下载请前往》》 坤坤出品 | 预制体大合集 | 适配027版本
有细心的同学可能发现了,我之前发布的预制体集合里大部分都有一个叫PrefabEvent的脚本,有很多小伙伴想尝试改预制体或者想基于这个脚本二次创作预制体时都觉得这一块内容看不太明白,今天给大家简单介绍一下这个PrefabEvent协议,让大家能够更好地进行二次开发~

PrefabEvent初始化流程及简单使用

1. 首先需要将上面的附件PrefabEvent.ts下载下来,并导入编辑器内,随后还需要导入“玩家系统”的预制体,“玩家系统”这个预制体是一定需要放入场景中的。

2. 新建一个预制体后去新建一个脚本挂载到预制体节点下面,在脚本的onStart生命周期中初始化触发器的onEnter事件。
image.png


3. 将上面的PrefabEvent.ts文件也拖入一份到这个文件目录下。
image.png

4. 如下图所示去搭建这个预制体。拖入了一个锥体是为了方便辨识这个预制体的位置。示例脚本大部分都是这样的预制体结构。
image.png

5. 如下编写代码,将这个预制体拖入到场景中,如果场景上有拖入玩家系统,当玩家碰到这个触发器时则会受到伤害。

// 导入 "PrefabEvent" 模块中的 "PrefabEvent" 类
import { PrefabEvent } from "./PrefabEvent";

// 声明一个默认导出的类 "NewScript",继承自 "Core.Script"
@Core.Class
export default class NewScript extends Core.Script {
    /** 当脚本被实例化后,会在第一帧更新前调用此函数 */
    protected onStart(): void {

        // 如果当前是客户端,直接返回
        if (SystemUtil.isClient()) {
            return;
        }

        // 获取当前实例化的游戏对象并在对象准备就绪后执行回调
        this.gameObject.ready().then(go => {

            // 将当前游戏对象转换为 "Gameplay.Trigger" 类型
            let trigger = go as Gameplay.Trigger;

            // 当有其他游戏对象进入触发器时,执行回调
            trigger.onEnter.add((other: Core.GameObject) => {

                // 触发一个名为 "PrefabEvtFight" 的伤害事件,并传入当前游戏对象的 guid 和其他游戏对象的 guid,伤害值为 10
                PrefabEvent.PrefabEvtFight.hurt(this.gameObject.guid, other.guid, 10);

            })

        })

    }
}


关注我,更多好用的预制体会逐步发出来!

image.png

PrefabEvent.ts

24.23 KB, 下载次数: 146

回复

使用道具 举报

感情流浪汉 发表于 2023-3-10 20:05:56 | 显示全部楼层
功能非常强!
示例代码有个小疑问,为什么不直接判断if(SystemUtil.isServer())呢?
示例写法是有性能优化吗?
回复

使用道具 举报

犯困嫌疑人 发表于 2023-3-13 14:17:22 | 显示全部楼层
感情流浪汉 发表于 2023-3-10 20:05
功能非常强!
示例代码有个小疑问,为什么不直接判断if(SystemUtil.isServer())呢?
示例写法是有性能优 ...

没有区别,都一样吧。
回复

使用道具 举报

叽里咕噜小胡桃 发表于 2023-3-14 11:36:09 | 显示全部楼层
本帖最后由 叽里咕噜小胡桃 于 2023-3-14 11:37 编辑

感觉很有帮助~ 点赞收藏了!
回复

使用道具 举报

叽里咕噜小胡桃 发表于 2023-3-14 11:38:20 | 显示全部楼层
感情流浪汉 发表于 2023-3-10 20:05
功能非常强!
示例代码有个小疑问,为什么不直接判断if(SystemUtil.isServer())呢?
示例写法是有性能优 ...

格式上会舒服一些~ 如果是client直接return的话可以确保接下来的代码都是server,就不会纠结中括号的问题了。个人习惯问题~ 我就经常这样写hhhh 感觉不用对中括号还是比较香的!
回复

使用道具 举报

明天跑10公里 发表于 2023-3-14 18:05:14 | 显示全部楼层
叽里咕噜小胡桃 发表于 2023-3-14 11:36
感觉很有帮助~ 点赞收藏了!

收藏了哟~
回复

使用道具 举报

明天跑10公里 发表于 2023-3-14 18:07:02 | 显示全部楼层
犯困嫌疑人 发表于 2023-3-13 14:17
没有区别,都一样吧。

哈哈,看逻辑应该没区别,我就是怕有什么黑魔法,正主已经出来解释了~
回复

使用道具 举报

明天跑10公里 发表于 2023-3-14 18:08:02 | 显示全部楼层
叽里咕噜小胡桃 发表于 2023-3-14 11:38
格式上会舒服一些~ 如果是client直接return的话可以确保接下来的代码都是server,就不会纠结中括号的问题 ...

搜嘎,原来是小技巧
回复

使用道具 举报

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