Quantcast
Channel: Cocos中文社区 - 最新主题
Viewing all 90394 articles
Browse latest View live

[muzzik 分享]:优化单脚本开发流程

$
0
0

看到了这个帖子里,很多人都不喜欢组件式开发的流程,最主要的原因有

1.审查代码不便

由于各种引用预制体,或者直接通过路径加载预制体,导致审查代码需要

  1. 搜索预制体
  2. 打开预制体
  3. 跳转脚本

而使用纯代码方式可以直接跳转到另一个模块脚本内,只需要一步

两全其美的办法

// 模块代码

@ccclass('test')
export default class test extends Component {
    static open(config?: 可选初始化配置) {
        // ... 在这里加载模块的预制体
    }
}

// 其他模块使用,这样可以直接跳转

@ccclass('main')
export default class main extends Component {
    click() {
        test.open();
   }
}

2. UUID 变更导致各种 miss

在 2.x 的时候我也经常遇到这个问题,但是 3.x 没有遇到一次,不知道各位的问题场景是什么?

1 个帖 - 1 位参与者

阅读整个主题


独立解谜游戏 《InOutPath》现已公开Steam页面

$
0
0

hallo,大家好,我们是独立游戏《InOutPath》的开发团队,随着游戏开发日趋完善,我们现已将《InOutPath》的Steam页面公开。

地址如下: Steam 上的 开关 InOutPath (steampowered.com)

作为一名独立游戏团队的一员,感慨良多。非常感谢cocos团队提供的优秀引擎让我们在打造这款游戏的时候不会被技术掣肘,可以随心所欲发挥创作的空间和能力。

我们是一款冒险解谜游戏,一共7个大章节300+小章节。包含了包括海洋,水面,竹林等各色的7种完全不同风格的场景,也包含了20多种迥异的解谜机制。

我们的游戏在程序实现上,需要满足创作团队海阔天空的想象力,这与cocos提供的强大的可视化编辑器能力是断不可分的。

在此我再次感谢cocos团队的卓越能力。三鞠躬。

话不多说,技术论坛上干货。

首先游戏的整个驱动是分为数据部分和显示部分。数据部分基于cocos编辑器插件进行数据构筑。这里非常感谢cocos团队 2youyou2 提供的思路。

我们基于cce.gizmos api 打造了一个较为舒服的路径规划工具。PS:cce api是cocos editor api的编辑器命名空间API。里面封装了大量对于cocos editor的操作。

API 如下:

image

因为路径数据和物体模型无关,这可以让我们非常方便的在美术资源未准备好的时候就进行大量的创作而不会增加后续研发成本,路径是简单数据也不会带来任何运行时损耗。

首先我们先找个小型关卡看一看。

image

其中路径中间的白色线段既是我们的关卡路径。他几乎承担了整个游戏的的逻辑。无论是小型地图还是超大型地图,都能一把嗦。

无论你的路径是需要旋转,缩放还是平移都可以非常方便的视线,无论你的路径是直线,曲线或者什么物理上不存在的线。

由于我们风格迥异的关卡氛围。所以我们有9个配置好的完全不同的场景数据,我们会在加载不同的风格的时候,使用场景数据同步到当前场景,因为我们在游戏运行中并不会加载其他场景。除开main场景,其他场景只是一个氛围配置表。里面包含了主方向光,雾效等各类参数。

image
image

这样我们可以在一个场景里面跑通所有风格的氛围了。

接下来就是后处理部分了,由于cocos新版的后处理框架在性能方面不满足我们的项目需求,所以我们还是继续延续了我们另一款RPG的后处理架构。

目前我们使用的后处理技术有:
image

同样的,我们也会在加载不同的风格的时候对后处理进行关卡控制。

image

这里我稍微说下我们获取深度图的方式。

由于我们不想先渲染一遍场景获取深度图,我们也不需要特定角度的深度图,比如对于下雨遮罩的顶部深度图。所以我们只需要在渲染透明物体前把深度图拷贝出来使用就行。如果你问我为什么不直接使用,需要拷贝。那是因为会出现gl的写时读问题。

关键代码如下:
image

其次就是全部GrabPass了,我们需要做水底部分的波动,水面部分的正常渲染。

也是一个全屏拷贝pass搞定。

image

就是在渲染透明物体前拷贝一遍已经渲染的结果。

然后就是发布steam需要打包桌面版了。

这里我们采用的是electron+web mobile的方式。

我们采用的steam sdk 库是 whaqzhzd/steamworks.js: A steamworks implementation for nw.js/electron games (github.com)

这个库和原库不同的地方在于我们接入了新版的steam p2p sdk。因为我们另一款多人RPG需要使用。

这里提一句electron的加密。由于web mobile的代码都是裸的。这导致如果有人用asar unpack解包的话是可以看到无代价看到全部源码的。所以我们基于rust实现了一个非常简单的加密。

由于我们知道electron是可以把node文件作为启动文件的。

所以首先就是修改启动文件为加密node文件。

image

然后利用electron-packager的api对源码进行加密:

image

加密后再rust里面对源码加载进行拦截然后进行解密。这里首先我们屏蔽了应用程序的调试。

image

然后就是在rust里面使用napi对node的_compile函数进行覆写。以便可以让js引擎加载已经解密的代码

image

解密函数就是对于前面加密函数的反向。

image

需要注意的是,由于cocos使用的systemjs。所以我们也需要拦截systemjs的createScript函数。

image

到此一个简单的加密就完成了。这个加密非常初级,只可以增加一点点的难度。但本质没有改变。

最后我放几张游戏图给大家看看。也希望大家帮帮忙点点愿望单。谢谢大家啦。

Steam 上的 开关 InOutPath (steampowered.com)

whaqzhzd/electron-asar-encrypt (github.com)

07db95487580f3c12260b5d38b4eb94 9fe32a75f02959e964de12dc587999e 90e31c51bf0a408181e1e9ae1a75274 308203272dec18d2260d77173402d56 a51e7a3ee02df3b60fb81a65039f54d cde304a0bc8885ce6d6bf6dcce653f3 0c34613268663219b1c15a47632f642 1ecf6c02a35c780799614dc26fb4de6 2d5e21da2a50dc311d584c73d1d5afalight

7 个帖 - 1 位参与者

阅读整个主题

电脑一天死机N次

$
0
0

Mac mini
mac OS :14.3
cocos版本:3.7.4
死机过程,在Chrome调试运行中的同时去操作编辑器,比如拖拽节点,几乎必现,最近半个月出现,心态逐渐崩溃,准备换电脑了

3 个帖 - 1 位参与者

阅读整个主题

导入图片时,如何将Packable默认为false?

$
0
0

如题,想知道能不能在default-meta.json中去配置这个选项?该怎么配?

1 个帖 - 1 位参与者

阅读整个主题

AR demo 是否与机型有关

$
0
0

我的手机不支持AR SDK 只能采用ar降级,下载了AR(mobil) 示例出了一个apk:除 启用了摄像头其他3d场景都没看到,没有示例效果图里面的区域检测,3D模型。请问
1.demo是否需要特定手机或设备?
2.采用ar降级后能否识别人的肢体及五官,精度低点没关系,能识别就行?

1 个帖 - 1 位参与者

阅读整个主题

laya 3.0.11 支持 spine 4.1了

传统无光照effect预览时网页上看不到sprite

$
0
0

编辑器版本3.8.1,社区里的3.8.2也用过一样的问题。
复现方式:
1创建项目,3d项目模板,默认的那个
2新建一个sprite
3新建一个传统无光照effect
4新建一个材质,绑定刚才的effect
5把材质换上
编辑器窗口中正常:
image
点击运行后网页中:
image
此外拖动操作场景里的任意对象时,这个sprite的显示位置会跑偏:
image

4 个帖 - 1 位参与者

阅读整个主题

有微信小游戏150M以上大小的吗 问问都是怎么管理缓存空间不超限的?

$
0
0

2411版本
就是包整体比较大了 远程资源方式了,比如每个版本肯定不超过200的 比如140 150 160的程度,
但随着版本更新 会渐渐有新的资源加入 旧的资源会被废弃,那么累计起来肯定会超过200M的
这种情况 你们是怎么处理缓存的?当然肯定也知道最后一个版本的资源情况,好像没法分辨累计的被废弃的资源吧 那么大家都是怎么处理的?
谁能谈谈经验 避免突破200M的问题的?

1 个帖 - 1 位参与者

阅读整个主题


怎么实现3d人物摔倒时手臂腿身体也会受到重力和碰撞影响东倒西歪的效果

$
0
0

大佬们,问下想要实现3d人物摔倒时手臂腿身体也会受到重力和碰撞影响东倒西歪的效果,怎么做啊?

1 个帖 - 1 位参与者

阅读整个主题

有没有一起合伙利用业余时间做游戏的,我是做美术的想寻求靠谱点的技术

你知道怎么实现LOL中德莱文的飞斧头、接斧头效果吗?

$
0
0

QQ录屏20231207071513

引言

Cocos中Tween的简单示例。

在游戏开发中,我们经常用Tween去实现一些简单的动画,例如旋转、位移等等。

本文将介绍一下如何实现LOL德莱文的技能飞斧头、接斧头效果。

本文源工程在文末获取,小伙伴们自行前往。

Tween的基本概念

Tween(插值动画)是一种用于创建平滑动画效果的机制。

它允许你在两个数值之间进行插值,从而在它们之间创建过渡效果

Tween 提供了一个简单灵活的方法来缓动目标。

话不多说,一起来做个实例。

德莱文接斧子

接下来我们一步一步来实现LOL德莱文的技能飞斧头、接斧头效果。

1.环境

引擎版本:Cocos Creator 3.8.1

编程语言:TypeScript

2.资源准备

首先创建2个Cube,压成长条状,我们把他当做德莱文鸡两把斧头(这节目组也太了吧)。

image

然后给德莱文鸡创建leftright两个节点,然后把Cube挂上去,注意中间要加一个节点,让Cube也就是斧头的自转不受影响。

image

添加我们的Draven脚本,把我们需要控制的axe1axe2两个节点拖上去。

image

3.编写代码

首先通过tween().by让斧头的angle增加360,然后通过repeatForever()实现循环增加,最后通过start()开始动画。

for (let i = 0; i < this.axes.length; i++) {
    tween(this.axes[i].children[0]).by(0.25, { angle: 360 }).repeatForever().start();
}

这样就形成了斧头自转的效果。

旋转07

然后通过input.on(Input.EventType.KEY_DOWN, event => {})监听一下键盘事件,当按下空格时飞斧头。

input.on(Input.EventType.KEY_DOWN, event => {
    if (event.keyCode == KeyCode.SPACE) {
    }
}

接着简单算出几个坐标:

  • position1:固定小鸡前方的坐标,实际上游戏会是目标敌人的位置,由于示例没有敌人,感兴趣的可以自行实现
  • position2:斧头反弹回来的高点,即抛物线效果的最高点。
  • position3:斧头反弹回来的最终落点,这里随机主角位置或者左右两边的固定位置。
let position1 = this.player.forward.normalize().multiplyScalar(-2).add3f(0, 0.5, 0).add(this.player.worldPosition);
let position2 = this.player.forward.normalize().multiplyScalar(-1).add3f(0, 4, 0).add(this.player.worldPosition);
let rand = Math.floor(Math.random() * 3) - 1;
let position3 = this.player.right.normalize().multiplyScalar(rand).add(this.player.worldPosition);
let parent = this.axes[0].parent;
let position = this.axes[0].worldPosition.clone();
this.axes[0].parent = this.player.parent;
this.axes[0].worldPosition = position;
this.axes[0].lookAt(position1);
this.axes[0].rotate(Quat.fromEuler(new Quat(), 0, 90, 0));

动画一,让斧头通过修改世界坐标worldPosition从当前位置用0.3秒飞到目标位置position1

tween(this.axes[0])
  .to(0.3, {
      worldPosition: position1
  })

动画二,通过贝塞尔曲线坐标函数tweenonUpdate回调时刻计算斧头的坐标,并设置形成抛物线动画。

//计算贝塞尔曲线坐标函数
let twoBezier = (t: number, p1: Vec3, cp: Vec3, p2: Vec3) => {
    let x = (1 - t) * (1 - t) * p1.x + 2 * t * (1 - t) * cp.x + t * t * p2.x;
    let y = (1 - t) * (1 - t) * p1.y + 2 * t * (1 - t) * cp.y + t * t * p2.y;
    let z = (1 - t) * (1 - t) * p1.z + 2 * t * (1 - t) * cp.z + t * t * p2.z;
    return new Vec3(x, y, z);
};
                
tween(this.axes[0].worldPosition)
  .to(1, position3, {
      onUpdate: (target: Vec3, ratio: number) => {
          this.axes[0].worldPosition = twoBezier(ratio, position1, position2, position3);
      }
  })

通过.call()添加一个播放完成回调,让斧头复位,在通过.start()开始动画。

.call(() => {
    this.axes[0].parent = parent;
    this.axes[0].position = v3();
    this.axes[0].setRotationFromEuler(new Vec3(0, 90, 0));
    this.hideSkillRangeIndicator();
})
.start();

其中斧头落地的指示圈的实现可以阅读我的推荐文章《技能范围指示器》,文末有链接,这里不做过多说明。

4.结果演示

QQ录屏20231207071513

结语

本文源工程可通过私信发送Draven获取。CocosStore搜索"亿元程序员",有更多实用源码哦!

我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。

AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。

实不相瞒,想要个在看!请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐专栏:

100个Cocos实例

8年主程手把手打造Cocos独立游戏开发框架

和8年游戏主程一起学习设计模式

从零开始开发贪吃蛇小游戏到上线系列

知识付费专栏

1 个帖 - 1 位参与者

阅读整个主题

Cocos creator 2.4.9版本能集成到鸿蒙4.0系统吗

急需一个java语言技术架设个端

$
0
0

可按小时算工:一小时150
可按工作量商议价格
精通java的请留下联系方式

1 个帖 - 1 位参与者

阅读整个主题

window的包怎么调python的代码

【BUG】编辑器报错[Scene] Cannot read property 'vb' of null

$
0
0

编辑器报错[Scene] Cannot read property ‘vb’ of null

编辑器版本:3.8.1

编辑器控制台报错:

[Scene] Cannot read property 'vb' of null 
TypeError: Cannot read property 'vb' of null 
    at Object.updateWorldVertexAndUVData (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:292274:31) 
    at Object.fillBuffers (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:292226:18) 
    at Batcher2D.commitComp (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:110653:21) 
    at Sprite._render (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:105101:18) 
    at Sprite.fillBuffers (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:107687:18) 
    at Batcher2D.walk (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:111055:22) 
    at Batcher2D.walk (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:111072:22) 
    at Batcher2D.update (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:110452:18) 
    at Root._frameMoveProcess (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:3717:29) 
    at Root.frameMove (G:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin\.cache\dev\editor\bundled\index.js:3364:18) 

Bug影响:场景编辑器无法工作。包括但不限于,在场景编辑器中编辑已有的对象,缩放场景。保存项目后重启Cocos Creator也无法解决。

Bug复现方法:在一个2D场景下,新建一个2D Sprite对象,设置对象的Content Size为720*1280,设置对象的Sprite Frame属性为引擎自带的精灵default_ui/default_panel,设置Type属性为TILED,报错出现。
image

1 个帖 - 1 位参与者

阅读整个主题


web mobile构建报错 Build Failed: Error: Error: ENOENT: no such file or directory, open 'xxx'其他平台没事

$
0
0

cocos creator 2.4.3
复现步骤:
将resources bundle压缩类型选择成合并所有JSON
image
点击构建
image
控制台报错

Build Failed: Error: Error: ENOENT: no such file or directory, open '/Users/shixintao/Documents/work/TuWanGame_Client_h5/build/web-mobile/assets/resources/import/6b/6b9b046a-cb6e-4713-b247-4be55a4447f2.json'
    at IpcMainImpl.<anonymous> (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/editor-framework/lib/main/ipc.ccc:1:4952)
    at IpcMainImpl.emit (events.js:315:20)
    at IpcMainImpl.emit (domain.js:483:12)
    at Object.<anonymous> (electron/js2c/browser_init.js:157:9047)
    at Object.emit (events.js:315:20)
    at Object.emit (domain.js:483:12)
    at Object.topLevelDomainCallback (domain.js:138:15)
    at Object.callbackTrampoline (internal/async_hooks.js:118:14)
	--------------------
    at /Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/editor/page/build/build-worker.ccc:1:5638
    at wrapper (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:272:20)
    at next (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:4584:24)
    at /Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:325:20
    at wrapper (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:272:20)
    at iterateeCallback (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:417:21)
    at /Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:325:20
    at /Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/editor/page/build/group-manager.ccc:1:5421
    at wrapper (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:272:20)
    at iteratorCallback (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:497:17)
    at /Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/editor/lib/builder/index.ccc:1:3950
    at wrapper (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:272:20)
    at next (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:4584:24)
    at /Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/node_modules/async/dist/async.js:325:20
    at /Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/editor/core/gulp-build.ccc:1:5879
    at Gulp.<anonymous> (/Applications/Cocos/Creator/2.4.5/CocosCreator.app/Contents/Resources/app.asar/editor/core/gulp-build.ccc:1:26733)
    at Object.onceWrapper (events.js:422:26)
    at Gulp.emit (events.js:315:20)
    at Gulp.emit (domain.js:483:12)

根据报错信息,查找文件确实不存在。

但是同样的配置,将发布平台改成web desktop或者android没有任何报错
image

请各位大神帮忙瞧瞧

1 个帖 - 1 位参与者

阅读整个主题

小白请教一个RichText换行遇到的问题

$
0
0

Creator 版本:3.8.1,场景中有一个父剧情节点DramaNode绑定了Layout组件用于纵向排版,由于需要逐行逐字显示剧情,每条剧情使用一个子节点childNode,子节点上文字展示用RichText组件实现,RichText设置了maxWidth,当子节点剧情不换行时显示正常,一旦需要换行DramaNode则会抖动一下,开始以为是使用自定义字体的问题,但是用系统默认字体还是这样,有没有大神遇到过这种情况.

3 个帖 - 1 位参与者

阅读整个主题

升级gradle后编译报错

$
0
0

Build command failed.
Error while executing process D:\SDK\ndk\23.2.8568313\ndk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:\cocospro\new\Android\build\jsb-default\frameworks\runtime-src\proj.android-studio\app\jni\Android.mk NDK_APPLICATION_MK=D:\cocospro\new\Android\build\jsb-default\frameworks\runtime-src\proj.android-studio\app\jni\Application.mk APP_ABI=armeabi-v7a NDK_ALL_ABIS=armeabi-v7a NDK_DEBUG=1 APP_PLATFORM=android-16 NDK_OUT=D:/cocospro/new/Android/build/jsb-default/frameworks/runtime-src/proj.android-studio/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=D:\cocospro\new\Android\build\jsb-default\frameworks\runtime-src\proj.android-studio\app\build\intermediates\ndkBuild\debug\lib NDK_TOOLCHAIN_VERSION=clang NDK_MODULE_PATH=D:\cocospro\new\Android\build\jsb-default\frameworks\cocos2d-x;D:\cocospro\new\Android\build\jsb-default\frameworks\cocos2d-x\cocos;D:\cocospro\new\Android\build\jsb-default\frameworks\cocos2d-x\external -j4 NDK_DEBUG=1 cocos2djs}
Android NDK: WARNING: Unsupported source file extensions in D:\cocospro\new\Android\build\jsb-default\frameworks\cocos2d-x/cocos/Android.mk for module cocos2dx_static
Android NDK: …/external/sources/edtaa3func/edtaa3func.h renderer/memop/RecyclePool.hpp

make: *** No rule to make target ‘cocos2djs’. Stop.

2 个帖 - 1 位参与者

阅读整个主题

原生开发保存微信头像一定要用离屏渲染吗,有没有更简便的方法?

$
0
0
  • Creator 版本:3.8.0

  • 目标平台:ios/android

使用assetManager.loadRemote(url, {ext: ‘.png’},function(err, imageAsset:ImageAsset){})获取到微信头像并显示出来,想更进一步通过获取到的ImageAsset把头像保存本地,chatgpt问了半天就一个方法离屏渲染,然后从randtexture上获取图片的像素信息。图像信息本来已经拿到了,再画一次从randtexture拿数据是不是冗余了?特向大佬们请教。

1 个帖 - 1 位参与者

阅读整个主题

个人开发的小游戏,还可以上架吗?

$
0
0

如题,做了个还算有些可玩性和美感的小游戏,怎么上国内的安卓渠道、苹果,以及各种小游戏呢,到底还能不能上,最低限度的情况下,需要哪些资质呢,有大佬愿意分享一下经验吗?

3 个帖 - 1 位参与者

阅读整个主题

Viewing all 90394 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>