仿我被美女包围了Cocos Creator 3.x源码!!!

小孩子才做选择,我自己吃

引言

最近,一款名为《完蛋!我被美女包围了》的国产真人恋爱影视游戏连续登顶Steam国区畅销榜首。这款游戏售价仅为42元,为玩家提供了一种沉浸式第一视角恋爱体验,让他们仿佛置身于恋爱短剧中。与此同时,这款游戏采用了“影视思维做游戏”的方式,引发了广泛的讨论。人们开始思考,将短剧与游戏相结合的玩法是否会成为未来内容创作的新趋势

笔者认为还是有可能形成新趋势的,磨刀不误砍柴工,于是我用Cocos Creator 3.x尝鲜做了一个Demo实现真人互动影像游戏

本文源码和源工程在文末获取,小伙伴们自行前往。仅供学习与交流,请勿用作其他用途。

1.准备素材

1.首先我们录制一下游戏中分蛋糕的名场面。

2.然后把游戏录屏拆分成几个小片段。

其中包括:

1.将蛋糕拿起来片段。

2.选择人物片段。

3.分别递给3个人物蛋糕的片段。

4.当然少不了自己吃的片段。

下面我们先看看实现原理

2.实现原理

引擎版本:Cocos Creator 3.7.3

编程语言:TypeScript

1.组件

要想用Cocos Creator 3.x实现真人互动影像游戏,我们可以利用Cocos Creator 3.x的cc.VideoPlayer组件。然后通过在上面添加点击事件去做一些逻辑响应

2.遇到问题

无论我们怎么调整节点位置,发现cc.VideoPlayer组件都是在界面的最上层,包括修改节点的zIndex。这样没办法在视频上方添加UI或者一些局部点击事件。

3.解决办法

首先要勾选cc.VideoPlayer组件中的StayOnBottom,这个设置是使cc.VideoPlayer永远在游戏视图最底层。

image

然后Cocos3.X版本可以直接在Project Settings-MarcoConfigurations中勾选ENABLE_TRANSPARENT_CANVAS

而Cocos2.X版本相对麻烦点,需要在Cocos安装目录中搜索boot.js,找到resources\static\preview-templates目录下的boot.js文件。

打开boot.js文件并且在cc.game.run之前添加cc.macro.ENABLE_TRANSPARENT_CANVAS = true;开启支持全透明。

最后修改主摄像机Main CameraBackgroundColor的透明度为0。

image

这样就可以实现在cc.VideoPlayer组件之上添加UI或者实现局部点击事件了。

2.编写代码

创建一个VideoGame组件包含了对组件VideoPlayer的引用。同时创建一个cc.VideoClip[]数据用于获取视频片段。

image

Cocos Creator 3.x核心属性包括:

1.resourceType:视频来源:REMOTE 表示远程视频 URLLOCAL 表示本地视频地址。

2.remoteURL:远程视频的 URLresourceType选择REMOTE时生效。

3.clip:本地视频剪辑,resourceType选择LOCAL时生效。

4.videoPlayerEvent:视频播放回调函数,该回调函数会在特定情况被触发,比如播放中,暂时,停止和完成播放。

5.loop:3.x的版本新增的循环属性,表示视频是否应在结束时再次播放。

6.isPlaying:3.x版本将isPlaying修改成属性,表示当前视频是否正在播放,返回值为布尔类型。

Cocos Creator 3.x核心方法包括:

1.play():开始播放,如果视频处于正在播放状态,将会重新开始播放视频,如果视频处于暂停状态,则会继续播放视频。

2.resume():继续播放。如果一个视频播放被暂停播放了,调用这个接口可以继续播放。

image

3.pause():暂停播放。

image

4.stop():停止播放。

image

3.编辑UI

1.创建节点

首先我们先创建个VideoGame节点,然后添加一个子节点videoBtnNode和它的三个子节点video1video2video3video4

其中VideoGame节点用于添加VideoGame组件和cc.VideoPlayer组件,四个子节点video1video2video3video4用于点击选择人物。

2.添加组件

首先给VideoGame节点添加编写好的VideoGame组件和cc.VideoPlayer组件。勾选StayOnBottom,添加选择videoPlayerEvent事件,添加VideoClips视频片段。

给参与点击的四个子节点video1video2video3video4添加BlockInputEvents用于拦截事件,防止向下传递。

image

3.效果演示

点击开始播放拿蛋糕画面。

拿蛋糕2

然后切换到人物选择画面。

选择界面

给蛋糕郑梓妍。

zy

给蛋糕肖鹿。

xl2

给蛋糕李云思。

lys2

当然少不了自己的一份啦。

zjc~4

结语

本文仅供娱乐参考学习,你们穿越了吗,怎么会已经知道内容?

在哪里可以看到如此清晰的思路,快跟上我的节奏!关注我,和我一起了解游戏行业最新动态,学习游戏开发技巧。

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

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

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

推荐专栏:

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

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

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

游戏开发的技巧、心得、资讯

本文源码和源工程可通过阅读原文获取

17赞

感觉被割草了 :grinning:

mark~太搞了

1赞

这个东西感觉后期会用得上~

原生端有偿试过可以吗?

mark~

原生端,考虑ffmpeg解码,然后Sprite渲染吧,直接改canvas透明度,后续UI的处理很麻烦

electron 妥妥的够用。

1赞

我感觉楼主截图的Gif图也会出现播放下一个视频的时候出现黑屏一闪而过的情况,但那个《完蛋!我被美女包围了》的游戏,好像没有这样的情况,不知道有没有好的处理方式来规避这种情况,因为这个黑屏一闪而过,会打断游戏进度的连贯性,让玩家没那么容易沉浸在游戏里面。

mark 1

个人觉得如果是h5,还不如直接是h5的video在canvas后面,canvas设置为透明背景,过场时直接用h5自己的video直接播放mp4 性能不是更好吗,硬塞到canvas里感觉有点画蛇添足,纯技术成本论理,非抬杠

不要那么早关掉前一个视频咯。等第二个视频开始播放之后再清除第一个。

mark一下

马克11111111

mark啊mark,你在哪?

123
这种选择才有意思

嘿嘿 :smile: :smile: :smile: