找回密码
 立即注册
查看: 182|回复: 3

有什么2d游戏制作东西保举?

[复制链接]
发表于 2024-7-15 17:54 | 显示全部楼层 |阅读模式
有什么2d游戏制作东西保举?
发表于 2024-7-15 17:55 | 显示全部楼层
(本文作者 郄同学

我在bilibili看到了皮皮关老师分享的2D换装视频模块,感觉很有意思。附上链接:
【自制游戏开发工具】独立游戏必备的2D人物换装系统_哔哩哔哩_bilibili但是,视频中讲的是把换装结果保存为png图片,和我想要的效果不一样。我想要的是一个支持换装功能的2D游戏,类似星露谷物语。经过一个星期的尝试,终于在我的2D小游戏里实现了换装功能:



2D换装功能展示

其中遇到了一些问题,也想到了对应的解决办法,这里分享给大家。
一、Unity动画系统的局限性

按照我一开始的思路,既然原来的案例已经将调整好的人物装扮保存成PNG图片。我只需要读取保存好的图片进行使用,合成animation动画,在游戏里面调用就完成了换装.。



皮皮关的换装案例,按导出按钮后会生成png文件

经过测试我发现——确实可以读取到图片,也可以根据视频中的方法拿到Sprite。
但是有一个问题出现了:Unity提供的创建animation的API功能,只能在Editor模式下才能执行。当我们把程序打包后是没办法执行Editor模式下的API的,会报错。
所以只能放弃该思路.
所以我只好换了一种思路:利用协程循环替换Sprite实现animation的效果,还不错哦 :)
二、项目工程准备


  • 找到皮皮关老师视频中的工程,把其中的素材和代码拷贝到自己的工程里。也可以打成unity package再导入。全部素材和脚本如下图:



原案例的脚本和素材,全都白嫖过来

2. 查看并重新设置图片存储位置。
找到原始工程里面控制图片保存的脚本UIManager.cs,打开脚本找到存储路径位置。修改保存路径为:
  1. string path = Application.persistentDataPath; //设置存储路径。
复制代码
persistentDataPath是unity自带程序的通用存储路径。这样打包后的APP程序在安装部署后会由Unity指定存储位置,只有在这个位置Unity有读写权限。(毕竟在没有系统允许的情况下,用户随便指定的存储位置,Unity是没有读写权限的。)
具体来说,原本的代码像这样:


以上几行代码只留下string path = Application.persistentDataPath; 其他部分删除掉。
三、读取保存的装扮图片

思路:假设已经导出好了png图片,那么在persistentDataPath目录中应该有png图片。
只需要实用C#的FileStream去打开这个png图片,读取文件内容到byte数组里,最后通过texture2D.LoadImage的方法把byte数组还原为贴图即可。


FileStream、LoadImage这些函数我也不清楚怎么用,只要在用到时百度一下,找到前辈的参考案例,一般都能解决 :) 只要看懂每一步代码的作用就好了。
如何获取到保存的png文件名呢?我是从UIManager里取到的输入框的字符串:
  1. string str_Clothes;  //保存换装的文件名
  2. if (UIManager.Instance.exportNameField.text != "")
  3. {
  4.      str_Clothes = UIManager.Instance.exportNameField.text;
  5. }
复制代码
其实不用这么麻烦,为了简单你可以直接写死文件名,比如“test.png”,保存和读取都是test.png即可~~
四、根据图片生成Sprite

上一步已经通过文件还原了Texture2D,下一步是把Texture2D还原成Sprite,这里需要用到Sprite.Create这个函数来创建Sprite.
  1. // 参数依次为:贴图,矩形区域,图片锚点(基准点),每单位像素数
  2. // 返回值:Sprite
  3. Sprite.Create(Texture2D texture, Rect rect, Vector2 pivot, float pixelsPerUnit);
复制代码
由于导出的图片是一个图集,里面包含几十个小图片,用代码耐心一个一个切出来就好了。也可以直接copy我写好的代码(下载地址我放在文末或评论区)。


以上代码,需要先创建四个列表用来保存每个方向动画的一组Sprite。
  1. public List<Sprite> up = new List<Sprite>();
  2. public List<Sprite> down = new List<Sprite>();
  3. public List<Sprite> left = new List<Sprite>();
  4. public List<Sprite> right = new List<Sprite>();
复制代码
大家需要注意一点,在生成Sprite的时候,一定要根据自身需要控制Sprite像素的大小pixelsPerUnit,因为默认的pixelsPerUnit大小为100,而我们的像素画合适的值是16或32。
五、用协程实现2D动画

使用协程的理由:
    Unity自带的Animation是控制循环播放帧图像来实现动画效果,而且前面说到,使用代码生成Animation只能在Unity Editor模式下进行(项目打包后会报错),所以这里可以选择用协程来完美实现同样的效果动画效果,还能避免项目打包的问题。



这里相当于用协程代替了animation实现了序列帧动画

这里相当于用协程代替了animation实现了动画播放。
之后,在移动时,只要启动协程就能让动画播放了:



角色上下左右移动时,开启协程(别忘了先全部已有的协程)

六、游戏流程说明

其实到这里,换装的主要功能模块都已经实现了。光看文章可能有点懵,我来介绍一下实际游戏的流程。

  • Player主角触碰猫头鹰NPC后,点击空格按钮来执行场景切换。切换到换装的场景。
  • 在玩家处于换装场景的时候,可以随意换装,点击保存的时候,会保存png图片并切换回主场景。另外也可以点击ESC按键切换回主场景。
  • 回到主场景时,执行前面说的一系列步骤,从png文件中读取还原主角的图片。这样换装功能就完成了。



1. 触碰猫头鹰商店,按空格键进入换装界面



随意换装,然后点击右上角“导出”回到主场景



换装完成!

七、Scene场景切换的注意事项

由于我是直接借用了原来的换装工具场景,会带来一点小问题——当场景中同时存在两个EventSystem或者两个Audio Listener的话,系统会报错提示。
解决方案:在从副场景回调到主场景的时候,需要把副场景的EventSystem对象和Camera对象进行隐藏然后再回到主场景。



从主场景到换装场景时,禁用所有当前场景的物体



从换装场景回到主场景时,关闭换装场景的EventSystem和Main Camera

当然,最好的做法是重新实现换装场景。但是为了简单起见我没有改写原来的功能。但是没想到在切换场景时带来一大堆问题  :)
结语

说说这次整合的经历和感受。
Unity引擎很强大,虽然不够智能,但这也许是优点。随着对引擎深入的了解,你会发现总能通过技术手段实现玩家各种离奇的想法。
虽然在调试过程中,总会在认为不可能有问题的地方遇到意想不到的问题,不过引擎也提供了很多的小功能或者笨功能去逐步解决问题。
分享自己的一个心得:
开始做自己从未尝试过的小功能的时候,首先需要有一个大概的方向思路,确保大方向没问题。如果最开始方向错误了,做到最后就像感觉撞了南墙。
不过没关系,任何尝试都是对自身的一次提高,大胆去进行尝试就好。
最后,很感谢分享各种功能知识点的博主,相信他们也是经历过各种尝试后提炼出来的精华分享给了大家。

工程链接(百度网盘):https://pan.baidu.com/s/1Ro7Kr8dJXVm4ePbzprjcIg?pwd=pv44
欢迎加入游戏开发群欢乐搅基:1082025059
对学习游戏开发、游戏制作感兴趣的童鞋,欢迎访问咱们的主页:
知乎 - 安全中心

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2024-7-15 17:55 | 显示全部楼层
ヾ(๑╹◡╹)ノ"想要制作2D游戏,当然要来试试我们的唤境引擎啦!
唤境引擎已经实现实现2D游戏全品类制作支持啦!无论你是想制作什么类型的2d游戏,唤境都能帮你实现噢!目前已经有不少制作师通过唤境引擎制作出各种好玩的小游戏啦!



唤境引擎唤境激励计划游戏开发游戏制作

最重要的是,唤境引擎的功能和素材全部都可以免费使用!能大大地降低你的开发成本噢!同时,为了帮助新手游戏制作师,唤境上有各种游戏制作模板和制作教程,帮你快速入门做游戏!而且唤境官方还根据不同的游戏类型,开设了各种游戏制作的免费线上训练营!训练营里有很多优秀的讲师和同学会为你提供制作上帮助噢!



唤境引擎唤境激励计划游戏开发游戏制作

希望你能通过唤境引擎制作出想要的2D游戏噢!
唤境引擎丨人人都能做游戏

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2024-7-15 17:56 | 显示全部楼层
谢邀!
说到2D游戏,那就不得不说说公鸡中的战斗机:Cocos引擎
Cocos引擎_游戏开发引擎不管是2016年前的Cocos2d-x版本,还是2016年以后的最新版本Cocos Creator系列。都给游戏行业带来了不少的惊喜。
特别是作为为数不多的中国团队制作的引擎,它也承担了应有的国产崛起责任。
下面的图,是Cocos官网截的(截图时间2022年1月28日,2021年的数据应该还未更新到官网)。




从上图中我们可以看到Cocos在2D领域的霸主地位:
现象级IP游戏:热血系列、大话西游、梦幻西游、问道、征途、拳皇、街霸、仙剑、三国群英传、红警、热血江湖
现象级SLG游戏:列王的纷争(COK)、率土之滨、乱世王者
后起之秀:少年三国志系列、最强蜗牛、动物餐厅、剑与家园、剑与远征、口袋奇兵等等。
而在小游戏火爆的今天,Cocos更是占据了过半的市场份额。
可以发布非常多的主流平台:
原生: iOS、Android、鸿蒙、PC、MAC
网页:H5
小游戏:微信小游戏、字节小游戏、Oppo小游戏、VIVO小游戏、华为快游戏等等。
如果早期Cocos2dx的成功,是得益于:

  • 引擎源码100%免费开源
  • 精致小巧可拓展的架构
  • 超小的包体
  • 超强的性能。
那么Cocos Creator的成功,除了延续其优秀的基因外,应该就是它能够让开发者快速出产品的2D&3D 一体的可视化编辑器了吧。
先放几张截图吧:








当然,这些只是表面。
一个产品的成功,除了产品本身外。更多的还是在于社区的运营和生态的打造。
Cocos的开源基因造就了Cocos团队:提升自我、平等沟通、助人成长(这三个点,没有写入Cocos公司章程,但是大家都在这样做)的文化。
对内是如此,对外也是如此。去翻翻Cocos论坛上的贴子就能发现。 不管对于好的声音,还是不好的声音,Cocos团队都会用心回答。
Cocos中文社区同时,为了更好的让开发者参与其中,Cocos引擎在插件、资源、素材方面也在不遗余力地经营:
Cocos Store还有更有爱的,引擎组的小哥哥们,闲暇时间还会写一些DEMO,并配上教程和文章,授人以鱼的同时,也授人以渔。
顺便给大家看看小哥哥前两天放出来的实时反射与SSAO效果:



Cocos Creator中SSAO ON/OFF对比



Cocos Creator中Realtime Reflection ON/OFF对比

不管是2D还是3D,不管是Cocos2dx还是Cocos Creator。
Cocos始终守着本心,开源免费。让游戏开发更简单,以技术驱动数字内容行业效率提升。
最后还想说一句自己这么多年的感受:仰望星空,脚踏实地
仰望星空是指,我们要看得见诗和远方,不能固守原地,不思进取。
Cocos从2dx到Creator,从2D到2D&3D一体化,从原生到原生+H5+小游戏,从游戏到游戏+教育+XR+许多在探索的领域。正一步步走向广阔的星辰大海。
脚踏实地则是在提醒我们,要踏实做事,恪守初心。
<hr/>最后。
真想吐槽一下知乎的推荐机制,每天会推送非常多的邀请回答。
推送太多,每个都想回答,就会纠结。 纠结会带来痛苦,为了结束痛苦,干脆一个不回答了,一了百了。
但麒麟子还有很多东西想和大家分享呀,就像我每周会收到一个推送:“一个人必须不停地写作,才能不被茫茫人海淹没。”。
正是这句话,一直鼓舞着我,要多创作,多分享。
于是最近给自己定了一个FLAG:每天用心回答一个游戏开发和图形渲染相关的问题。
当作为FLAG后,为了完成这一个FLAG,至少每天的第一篇回答,是不纠结的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-21 21:50 , Processed in 0.069769 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表