本帖最后由 剑寂万古 于 2024-1-4 14:19 编辑
新手引导
简介
游戏完成之后,还需要教会玩家如何进行游戏,这时候就需要一个新手引导的部分来对玩家进行引导.
这个新手引导预制体可以进行基于ui,位置,和自定义条件的引导
预制体使用
新手引导预制体(点击下载)
<video controls src="https://cdn.233xyx.com/online/n5nCOYCYnh4C1704348152897.mp4"></video>
简单使用案例
自己使用代码时请注释掉示例
/**
* 测试ui
*/
class TestUI extends UIScript {
mBtn: StaleButton
onStart() {
this.mBtn = StaleButton.newObject();
this.rootCanvas.addChild(this.mBtn);
this.mBtn.text = "测试按钮";
this.mBtn.onPressed.add(() => {
console.log("点击测试按钮");
})
this.mBtn.position = new mw.Vector2(200, 200);
this.mBtn.size = new mw.Vector2(200, 200);
}
}
/**
* 测试例子
*/
class TestHelper {
//引导测试
public static async testGuild() {
//创建引导
let guideModuleC = ModuleService.getModule(GuideModuleC);
// 进行位置引导时的距离
guideModuleC.setGuideArrowIntervalDis(100);
// 设置引导箭头的信息
guideModuleC.setGuideArrowPointerInfo("116496", new mw.Vector(1, 1, 1), false, 10);
GuideContent.GuideMatrialScale = 1;
// 创建一个UI引导
let newGuide = guideModuleC.addGuideStageHandle(1);
if (newGuide != null) {
// 获取引导UI
let uiHud = UIService.show(TestUI);
let waitSec = false;
// 添加一个运行函数,打印log
newGuide.addRunFunc(() => {
console.error("开始执行引导1");
})
// 添加绑定UI按钮
.addBindUIAndTips(uiHud.mBtn, "点击")
// 等待1秒
.addRunFunc(() => {
setTimeout(() => {
waitSec = true;
}, 1000);
})
.addCondition(() => waitSec)
.addBindUIAndTips(uiHud.mBtn, "再点击一次")
// 添加一个位置引导
newGuide.addBindWorldPos(new mw.Vector(1000, 0, 80))
}
//创建一个目标点引导
let newGuide2 = guideModuleC.addGuideStageHandle(2);
if (newGuide2 != null) {
//UI引导完成后继续执行目标点引导
newGuide.addRunFunc(() => {
guideModuleC.triggerGuide(2);
})
//创建引导世界坐标(通过寻路导航方式)
newGuide2.addBindWorldPos_Pointer(new mw.Vector(1500, 0, 80))
// 普通方式
.addBindWorldPos(new mw.Vector(1900, 0, 80))
.addRunFunc(() => {
guideModuleC.triggerGuide(3);
});
// 在引导3中重置引导2
let newGuide3 = guideModuleC.addGuideStageHandle(3);
newGuide3.addRunFunc(async () => {
let res = await guideModuleC.resetGuideById(2);
if (res) {
guideModuleC.triggerGuide(2);
}
})
}
// 重置所有引导
await ModuleService.getModule(GuideModuleC).resetAllGuideDB();
//触发引导1
guideModuleC.triggerGuide(1);
//监听引导回调
guideModuleC.guideComplateAction.clear();
guideModuleC.guideComplateAction.add((guideId: number) => {
console.error("引导 " + guideId + " 完成");
})
}
}
API参考
具体情况以代码中api为准
class GuideModuleC{
/** 引导线缩放 */
public arrowScale: mw.Vector
/**
* 引导实例完成事件。
*/
public guideComplateAction: mw.Action1<number>
/**
* 获取引导线地标模式刷新频率,主要用于Pointer的渲染模式
* @returns
*/
public getGuideArrowPointerUpdateInterval(): number
/**
* 引导线地标模式刷新频率,角色在动,所以需要重新计算寻路路径,这个是刷新频率,单位毫秒,主要用于Pointer的渲染模式
* @param updateInterval 更新间隔(毫秒)
*/
public setGuideArrowPointerUpdateInterval(updateInterval: number)
/**
* 获取引导线地标是否粒子效果,主要用于Pointer的渲染模式
* @returns
*/
public getGuideArrowPointerIsEffect(): boolean
/**
* 获取引导线地标guid,主要用于Pointer的渲染模式
* @returns
*/
public getGuideArrowPointerGuid(): string
/**
* 获取引导线地标缩放信息,主要用于Pointer的渲染模式
* @returns
*/
public getGuideArrowPointerScale(): Vector
/**
* 获取引导线最多显示的地标数量,主要用于Pointer的渲染模式
* @returns
*/
public getGuideArrorShowMaxPointer(): number
/**
* 设置引导线地标信息,主要用于Pointer的渲染模式
* @param guid 引导线地标对象Guid,默认 29391
* @param scale 缩放,默认 (1, 1, 1)
* @param isEffect 是否特效,默认 否
* @param showPointerCount 最大显示地标数量,默认 10
* @param matrialUpdate 材质更新函数, 不传不会覆盖默认方法。如果传 boolean 则表示是否反向
*/
public setGuideArrowPointerInfo(guid: string, scale: Vector, isEffect: boolean, showPointerCount: number,matrialUpdate?: boolean | ((matrial: mw.MaterialInstance[], arrowGo: mw.GameObject) => void))
/**
* 获取引导线地标生成间隔距离,主要用于Pointer的渲染模式
* @returns
*/
public getGuideArrowIntervalDis(): number
/**
* 设置引导线地标生成间隔距离,主要用于Pointer的渲染模式
* @param intervalDis 间隔距离
*/
public setGuideArrowIntervalDis(intervalDis: number)
/**
* 设置引导线Y缩放
* @param scaleY 引导线Y缩放
*/
public setGuideArrowScaleY(scaleY: number)
/**
* 获取引导线Y缩放
* @returns
*/
public getGuideArrowScaleY(): number {
return this._guideArrowScaleY;
}
/**
* 设置引导线起始方向 偏移
* @param distance 偏移距离
*/
public setGuideArrowDirOffset(distance: number)
/**
* 获取引导线起始方向 偏移
*/
public getGuideArrowDirOffsetDis(): number
/**
* 设置引导线起始坐标 z偏移
* @param offsetZ z偏移
*/
public setGuideArrowStartPosOffsetZ(offsetZ: number)
/**
* 获取引导线起始坐标 z偏移
* @returns
*/
public getGuideArrowStartPosOffsetZ(): number
/**
* 设置引导线 & 目标点特效guid,主要用于Line的渲染模式
* @param arrowGuid 引导线guid "0"则关闭
* @param arrowMartialGuid 引导线材质guid "0"则关闭
* @param targetPointEff 目标点guid "0"则关闭
*/
public async setGuideArrowGuid(arrowGuid: string, arrowMartialGuid: string, targetPointEff: string)
/**
* 重置所有引导存档,以及所有引导阶段任务的状态。
*/
public async resetAllGuideDB()
/**
* 重置指定的引导,会重置这个引导的存档状态,以及运行时的状态。
* @param guideId 引导id
* @returns 成功/失败
*/
public async resetGuideById(guideId: number): Promise<boolean>
/**
* 强制完成一个引导,会添加这个引导的存档状态到已完成。
* @param guideId 引导id
* @returns
*/
public async forceComplateGuide(guideId: number): Promise<boolean>
/**
* 获取最后一次执行引导时的id
*/
public getLastGuideId(): number
/**
* 获取当前引导id
* @returns 返回引导id
*/
public getCurGuideId(): number
/**
* 到达目标点距离判断 默认50 小于50则到达
* @param dis 目标点判定距离
*/
public reSetToTargetPosDistance(dis: number)
/**
* 获取到达目标点距离判断 默认50 小于50则到达
* @returns
*/
public getToTargetPosDistance(): number
/**
* 设置引导主角对象
* @param go 主角GameObject对象
*/
public reSetCharGo(go: mw.GameObject)
/**
* 获取引导主角对象
* @returns
*/
public async getCharGo(): Promise<mw.GameObject>
/**
* 移除指定引导,但是不影响存档。
* @param guideId
*/
public removeGuideId(guideId: number)
/**
* 通过引导ID,添加引导对象实例。
* @param guideId 引导id - 不要重复
* @return 引导对象实例
*/
public addGuideStageHandle(guideId: number): GuideInfo
/**
* 通过引导Id,触发指定的引导。同时会将对应引导示例执行起来。
* @param guideId 引导id
*/
public triggerGuide(guideId: number): boolean
}