[官方公告] 更新公告|口袋方舟编辑器v0.26更新说明③

[复制链接]
1535 |0
复读机读复读机 发表于 2023-8-29 13:27:57 | 显示全部楼层 |阅读模式
本帖最后由 复读机读复读机 于 2023-8-29 14:37 编辑

这篇着重于讲关于类型检测报错,若出现函数变更以及UI重名或预制体内脚本报错导致的报错可以看看

类型检测报错

    口袋方舟v0.26上增加了更严格的类型检测,目的是防止类型安全性问题,提高代码的可靠性和稳定性。
实际上在编写代码时,尤其是在进行业务逻辑的设计和实现时,应该尽量确保所有变量或对象的类型是确定的。这就需要每个变量都应该明确地声明为特定的数据类型。
通过指定变量的数据类型,可以让一起协作开发的搭档以及编译器获得更多变量的信息,包括变量可以存储哪些值?可用的操作?以及如何与其他变量交互等。这样可以减少潜在的错误,并提高代码的清晰度和稳定性。
    所以在更新引擎版本之后,会出现一些由于类型不明确而出现的报错,具体情况有以下几种:
使用了类对象未定义的属性
在脚本中引用了对象的某个属性,但是这个属性不确定是否存在,在编译的时候就会导致报错,报错显示如图:
    1.1.png
    进入脚本中,可以看到在代码中引用了skinConfig中的fly属性,skinConfig由上方的或关系中得到,需要或关系中的每个结果都存在fly属性,skinConfig.fly才能正常运行:
    1.2.png
    进入SkinConfig类中发现,在default下不存在此属性,从而导致了前面的报错:
    1.3.png

解决方案:
需要在类中加入引用的属性,可以用布尔值实现区分有无此属性
    修改前如图:                                            
    1.4.PNG    
    修改后如图:
    1.5.png
变量类型不明确时进行比较操作
  在声明动态获取的变量时TS会将该值设为安全类型unknown。此时若进行比较运算则会导致报错,报错提示如下:
    1.6.png
    进入脚本,报错显示如图,无法将unknow类型与number类型做比较操作:
    1.7.png

解决方案:
    需要在做比较运算时明确变量的类型,在代码中有几种方式可以实现,例如:
    报错的代码如图:
    1.8.png
    解决方案1:在比较操作前加入类型断言。修改后的代码如图:
    1.9.png
    解决方案2:在声明变量时定义好类型。修改后的代码如图:
    1.10.png
    解决方案3:使用“as”关键字转换变量类型。修改后的代码如图:
curStage as number;//curStage为后面用做对比的变量名

    1.11.png
函数返回值的类型不明确

    当函数返回值的类型不明确,并且使用返回值进行比较操作时会提示报错,报错信息如图:
1.12.png     进入脚本,报错位置显示函数返回值有number与boolean两种类型:
    1.14..png
    由于返回值有number和boolean两种,boolean无法与number进行比较操作从而导致报错
    1.13.png
解决方法:需要确定函数返回值的类型,可以用以下几种方法

    解决方法1:在函数声明时即确定好返回值的类型。在新声明函数时可以尝试确定返回值类型,这样能让代码扽可读性更强并且功能更稳定。但如果是改动现有代码的话可能会影响功能,可以使用方法2更改现有代码
    修改前GetTimeLeft函数如图:

    1.13.png
    修改后如图:
    1.15.png
    解决方法2:将函数返回值先定义变量保存,将保存的变量用上面的方法明确类型后,再进行比较操作
    修改前如图:

    1.14..png
    修改后如图:
    1.16.png


Gameplay成员报错  
    Gameplay的一部份成员与GameObject功能类似。为了方便大家的代码管理,现在将Gameplay.Prefab等成员统一为Gameplay.Gameobject。
    在升级到v0.26时会出现命名空间Gameplay下找不到成员的情况,报错如图:
    1.17.png
    进入脚本,报错显示Gameplay命名空间下没有XXX,图中情况就是在命名空间下没有Prefab这个类:

    1.18.png
解决方案:
    用Gameplay.GameObject替换一系列报错的Gameplay.XXX

Gameplay.GameObject //将一系列报错的Gameplay.XXX直接替换为Gameplay.GameObject


    修改前如图:
    1.19.png
    修改后如图:
    1.20.png

其他需要替换的代码块
有些代码块现在编辑器里已经有了新方法可以替代了,可以选择性替换。
    1.21.png
    将(puerts.argv.getByName("Proxy") as any).ProjectDir.indexOf(":") < 0 替换为 SystemUtil.isMobile()

SystemUtil.isMobile()


    替换后如图:
    1.22.png


回复

使用道具 举报

热门版块
热门帖子
1
恐怖游戏常用功能及环境氛围分享
小智慧,大理想!
2024-11-16
2
编辑器无法正常启动
冷面情殇
2024-11-23
3
2024年第47周_口袋方舟邃蓝之星游戏排行榜
「白狼」龟苓羔(inlove)
2024-11-22
4
邮件系统
空伊伊
2024-11-22
5
找茬游戏收集物图鉴没有剪影
阡陌红尘
2024-11-21
快速回复 返回顶部 返回列表