unity及其他免费PC游戏制作引擎或工具帖

  • m
    mes
    问题的话倒是有很多,看看各位职业开发者的看法。

    1 如果是2d平台,抛弃物理系统,那地图的图块以什么形式显示在游戏里,图块位置又以什么形式作为数据储存和读取?

    2 如果是3d但是只有地面和墙,俯视可以当成2d的,有没有抛弃物理系统来做和地图的碰撞检测的方法?

    3 镜子,如果不打算做出能反射出世界那种,那做成怎样的比较好看?

    4 前面提到2d渲染顺序需要详细的说明。

    5 就是上面的问题,各个特效具体怎么实现,有的我看范围甚至不是完全圆的,应该不是粒子。

    要是怎么才算具体,当然最好按每步的步骤说明,要是没有,至少得有这种程度,知道是Material.SetTextureOffset的话,至少能搜出资料。
  • z
    zerofree0000
    1 都是网格。只不过2d的是最简单的两个三角形的网格组成方块。unity里所有看得见的东西实际都是网格上贴图。存储方式看你导入数据的方式,3d一般用3dmax之类制作了模型导出为fbx被unity直接利用。2d直接把图片放在工程里,拖到场景里unity会自动帮你生成一个sprite,内部实现还是网格和贴图。但是实际用的时候你不用太在意这个,拖上去就能用。
    2 碰撞检测其实不是物理的一部分,但是物理引擎依赖于需要碰撞检测。碰撞检测本身你自己用坐标判断也是可以的,圆最简单判断圆心距离于两个半径和即可,其次矩形。更复杂的形状也能自己实现,不过unity帮你用collider实现何苦自己去弄,使用这些为你做好的功能就是用引擎的意义。

    3 我不太理解你说的好看是什么。镜子本来就是个挺麻烦而且比较耗费性能的东西。建议一开始不要去管。等你懂了顶点贴图uv之后就明白了。

    4 不存在2d渲染和3d渲染的区别。都是网格实现的。

    5 请使用一个粒子效果编辑器试试。粒子系统可以做出很多很多东西,刀光剑气龙卷风。粒子本身还是网格和贴图,只不过是针对大量存在进行了特定优化的。

    你需要关于网格和贴图的基础知识,请google关键字:顶点、uv、法线、着色器、渲染管道。
  • m
    mes
    问题是“怎么做”
    1 那要画出地图的同时,自动得出一个位置数据,这些还要能在unity里直接用,当然还有怎么用。

    2 其实类似上面的,我也知道有这些形状,但画在3d上的地图怎么让它自动生成位置数据。

    下略

    其实问题是如果只有你一个人,这些条件要你从头做到尾,那怎么做?
  • z
    zerofree0000
    3d的东西是用3d工具制作网格顶点,然后导出fbx,在unity里使用。
    2d就是各种图片在里面进行坐标移动。一般的地图编辑器本质是提供了更简单的编辑手段,记录下来的数据都是某某图片显示在某某坐标,运行的时候根据这些数据还原。和你自己手动把图片拉到场景上调整没有区别。

    什么自动生成位置数据——我怀疑你是否安装unity之后自己动手操作过一次。在unity,你把素材拖到场景上,就自动生成了一个game object,它具有基本的坐标、旋转等各种参数。
    只有我一个人,那就先弄到素材。图片,模型……然后放到引擎里,拽到场景上。
    之后是想办法接受用户输入让它们动起来。这开始时程序部分,程序的本质是,根据用户输入来修改你拖拽到场景里的各个物体的参数——包括但不限于坐标,缩放,旋转,色彩,文字等。
  • m
    mes
    好吧,等真正的独立游戏开发者……
    另外做游戏可不易,你可以对unity这么说,看它理不理你。

    看了还是先转型搞比较简单的视觉效果吧,毕竟稍微有点兴趣。
  • L
    Lunamos
    说真的看你那么多帖子,感觉差不多得了。如果不想开发游戏就别把生命浪费在游戏引擎上。如果就是想做视觉的东西就去好好看看图形学和shader的书或者学3D美术,一开始别总想着零敲碎打走捷径,到处寻章摘句,知道个名词不求甚解又有何用。尤其人到中年切忌自以为是,不要当民科,只能让你误入歧途,事倍功半。
  • 洗刷刷
    我劝你别和他白费口舌。这位楼主空有热情却缺乏讨论问题最起码的知识。他的问题明明只要做过unity的官方教程平面跳跃demo就能回答一大部分。
  • m
    mes
    如果会shader,游戏也该能做出来了,当然工作量还在那里。

    至少我知道自己在做啥,其实是不是“职业”这点我不会深究,只是觉得有可能,在中国,你在游戏开发公司甚至不用打开软件,每天开个会,说一顿一天就过去了,不过我只知道最近没见过什么国产我感兴趣的游戏。好了真的不顶了,真有需要的人自己会搜到。
  • m
    mes
    我的意思是如果能力已经到了shader都会写,那搞不好用sdl之类都能做3d游戏。

    可能这样说比较冒犯,不过您说话的应该说语气还是方式确实有点印象,于是勾起了我不太想回忆的感觉。看,其实我觉得我的问题一个也没被解决,而且这事就好像已经过去了。某种意义上真的挺职业,我的意思是做这种职业就很可能变成这种习惯。

    就结合我的经历来说吧,会不会是大部分公司还在用unity5或更前呢?因为已经有了内置画2D格子地图的工具了。要说中国人怎么做游戏的话,其实是已经有模板,整个游戏,做游戏就是稍微改一下就算成品,但是因为也是旧时代的产物,可能需要找好多年前的插件什么的资料,其实不知道,也许真的有问题时真正出手改的人需要。但是还是需要有人开会讨论,好像大家都要很忙。有一点我能理解的是我也想要觉得姑且有工作吗,不用做不是更好?但实质上确实是什么也做不出,什么也不会学到,要不是有兴趣的我会自己搜,那连这种程度也没有,到底有什么意义呢?我觉得不管是在哪个角落都不会快乐。当然一棵树不代表整个森林,我也很希望不是普遍,但做不出什么让人眼前一亮的东西倒是明显的,这就十分中国。
  • w
    w30of
    说实话我看你说话很头大啊……
    你讨论和询问的的东西实在太杂,又没有重点,天南地北你都要问个遍耶,这回又讨论到中国游戏公司什么的…歪了



    1. 当然是以面片的形式显示……不过tile地图通常会把静态图块合并成一张大图来渲染,可移动、可破坏的图块会抽出
    图块数据结构存在二维数组,Map等数据结构里,总之放在方便根据tile的行列值查找的容器里
    如果是自由大小的图块就找个四叉树还是什么的加速算法放进去减少查询消耗
    位置以什么形式作为数据储存和读取是什么意思?是在问地图数据的序列化和反序列化吗?
    直接文本文件打开Tiled的tmx格式文件看一下好了,非常清晰
    另外Unity的序列化库一般是OdinSerializer

    2. 只是想检测的话引擎提供的物理模块肯定会满足需求,也会比自己写的好
    不过真想手写,俯视的话那就收集顶点耳边法生成凸多边形,然后用说了好多遍的分离轴碰撞法:

    大名鼎鼎的N+作者教程:
    https://www.metanetsoftware.com/technique/tutorialA.html

    Advanced Collision Detection Techniques:
    https://www.gamasutra.com/view/f ... sion_detection_.php
    及其中文翻译:【转贴】高级碰撞检测技术
    http://www.cppblog.com/mybios/archive/2006/11/19/15408.html
    这里凸多边形碰撞的理论也可以应用到3D

    话说这文章都有20年的历史了呀,时间过得真快……

    碰撞算法是其一,还有一个重要的是加速算法/结构,得益于计算机图形学的高速发展……
    《实时计算机图形学》 第9章:


    至于后三个问题……

    3. 本来想说用Render target,不过你说怎样比较好看这属于美术方面的,我无从下手

    4. 前面说的什么?

    5. 武器轨迹的问题吗?之前还真跟同事讨论过这个需求……
    要硬想的话,我想到的是指定武器几个Sample点,每帧收集位置,画个spline曲线,再生成个面片,给面片加上材质,要圆滑多填点面就好了

    但google都会给出答案啊,还有代码呢
    楼上老哥说的粒子的实现还很多呀,效果也不错呢

    UE的实现:
    https://cghow.com/unreal-engine-sword-animtrail-effect-breakdown/
    用的老版粒子编辑器,新版用尼亚加拉的会更牛逼吧
    顺便这个东西是需要美术做的,程序不参与

    Unity的实现:
    https://www.youtube.com/watch?v=8tW14NaIM-k

    这些一搜Weapon trail就有好多呀……

    我说的都是比较基础的
    坛内大佬看我说的哪有错,有不好的或过时的望帮回帖指正一下



    话说你这一下子问一大堆形态各异的问题,不会给自己吓到吗?整的这么唬人
    还一个人从头到尾怎么做
    实际制作游戏不会这么恐怖呀,这是令人兴奋的

    这些问题,确实是有不少会在开发中遇到的,但也都是一些比较基本的问题,甚至大部分多少年前别人都解决好了
    遇到一个问题,钻研一个问题,解决一个问题
    自己制作游戏的前辈们不都是这么趟过来的么
    近就有个星露谷物语的例子

    不做游戏,去研究工具,那也可以写一套插件给哥们几个用用
    好用上UnityStore UnrealMarketplace卖钱


    但从你字里行间的意思来看,想做游戏就去做啊
  • 凉宫绿豆沙
    啊,这就是困扰了我很久的问题,我到底想做什么样的游戏。
  • m
    mes
    说真的那种感觉并不想想起来,只是既然想起了就不吐不快。

    1 如果是这样,图是合并大图,然后位置数据出自tiled生成文件,那就是可以想象,但有点复杂。

    2 其实和上面差不多,怎么把显示的地图3d模型的边界收集起来,可能要手动了,我自己想了下,如果角色是圆柱的话可以大略简化为圆心在不在某个图形内。


    3 是美术问题。

    4 关于俯视2D游戏(如RPG MAKER)各种图块和人物的叠放顺序,如果想做地图有高度差,人物可以跳在其他物体上时如何处理的问题。

    5 武器轨迹我查到有人说有两种主要方法,一种就是轨迹,但没说怎么具体做,另一种是做透明平面,然后让贴图“滑过”。
  • m
    mes
    也许看看各种game jam有没相关作品……
  • 凉宫绿豆沙
    前辈你好,请问有关于游戏设计(策划)方面的网站博客吗,或者是具体分析经典游戏设计思路的也可以。
  • z
    zerofree0000
    其实我觉得模拟经营类反而比一般的动作游戏对编程和逻辑的需求更高,因为大量的数值体系和计算都需要脚本控制。
    推荐你会一种程序语言(脚本语言)开发起来会比较快。使用rpg maker一样也会需要去写java script的。反过来会脚本语言了用啥都差不多。
  • z
    zerofree0000
    你要问game design的话那是另一个领域的东西了……
    我虽然自己也想做独立游戏但本质只是个工程师,游戏设计上只是野路子凭自己高兴(这也是自己做独立游戏的目的),所以没啥积累没办法给你推荐,抱歉。
  • m
    mes
    那就是因为你并没想过可能要独自完成,比如那个地方要是出问题了怎么办?要是只依赖插件什么而完全不想原理那能做到多好?

    碰撞,好的,再说碰撞,说到碰撞请列出式子,因为开发的前提就是有这种可能,你要自己写。

    什么方形圆形好像现在谁都会说了,那,就完了?要是碰了,怎么调整位置?我觉得,你们肯定不想去想。

    动手当然是动过,之前RPG MAKER我也试过了,只是要说要做出什么来并没有,结论就是不如先明白更多,否则只是试也是一场灾难。

    其实我也不懂你的目标,是像我这样并没有还是怎样,如果想做的是纸片人对话那其实unity不合适,我也想搞懂更“动作”,需要移动和碰撞检测的类型。
  • w
    w30of
    说了好多遍……分离轴啊,这个算法用来判断重叠检测而判断的依据就是得出最小重叠向量

    这个最小重叠向量能干什么呢,把这个向量加到对应的多边形上,就可以让两个多边形刚刚好脱离重叠……
    你去看一下再问也行啊

    我知道你实际没去看NTutorial了
    https://www.metanetsoftware.com/technique/tutorialA.html

    看到那两个箭头没,紫色的那个就是分离轴算法的结果

    这个教程里还有交互flash帮助你理解呢,多好的文章呀


    之所以没在这里贴代码,是因为有现成文章讲解的非常好呀
    Collision Detection Using the Separating Axis Theorem
    https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169
    这篇文章有图,有代码,还把公式拆了给你讲解

    在收藏夹里好多年了……
  • m
    mes
    so……最后一问,喜欢回就回,不喜欢就算了。

    jeffreythompson.org/collision-detection/poly-point.php

    式子给你了,码也给你了。问题是它们碰了后怎么把点移到多边形外面?
  • m
    mes
    分离轴好像是那个看两个物体间有没缝的吧?

    我的原则是够用就好,并不是没看过,只是这种情况(点/圆对线段/多边形)觉得应该是别的方法。

    另外有个关于圆形和方形的地方我也知道自己错了,无奈无人纠正,那就算了。
  • z
    zerofree0000
    改变物体的坐标啊?所有物体的位置不都是拿坐标管理着?

    至于应该改变到哪儿,你通过上一帧的坐标和这一帧的坐标,计算出移动方向,然后在这个方向的连线上找一个刚好接触又不会重叠的位置,就是这一帧的修正坐标点。对于两个矩形来说,这个计算并不困难。对于不规则的多边形,这会有些麻烦,但如果你规定一些东西排除一些状况,比如只有梯形(可以做倾斜地面),也可以解决。完全不规则的情况——不一定是凸多边形——我不会想自己去实现这个。

    而在你纠结这个的时候,真正的独立游戏开发者,已经用现成的引擎让自己的小人跳起来,然后开始考虑如何实现二段跳,踩墙跳,攀附墙壁等feature了。
  • w
    w30of
    有没有缝就是判断重叠,得出的向量就是用来脱离重叠啊,也就是你说的挤出去

    判断点的话,长宽为零的矩形 和 半径为零的圆形等价于点
    这个也是NTutorialA里有讲到的

    另外你圆形和方形是在哪里说的……

    算了,不再回了……
  • m
    mes
    没关系,反正最后说点实际的吧,圆形和方形碰撞怎么算,其实很简单,从方形在x轴最左和最右的范围内选出和圆心x最接近的值,y轴也一样,然后算这个方形上的点和圆心的距离(的平方),如果小于半径(的平方)则碰了。

    刚看到的别人的成果
    gfycat.com/windywastefulbrocketdeer

    就是3角力量2里林克在墙上移动的机制。
    真有兴趣可以猜猜怎么实现,我也不知道。




    碰撞确实是很难想通,其实物理也一样卡了吧。

    也许折中一下,就用物理引擎,但每多少秒通过位置算一算有没明显出界,然后推回去。




    线段相交点
    github.com/processing/processing/wiki/Line-Collision-Detection
    试复制下来用godot来做个限制点在多边形内的演示,虽没完成应该可以,只是必须自己写的地方比较难看。

    先是数学,其实我也没完全理解,因为要完成这个也需要点向量计算。
    paulbourke.net/geometry/pointlineplane/

    Pa = P1 + ua ( P2 - P1 )
    Pb = P3 + ub ( P4 - P3 )
    因为P都是向量/点坐标,意思是根据u可以算出这条线段所在直线中所有的点。
    如果能算出Pa = Pb即是相交,算出u则能代入上面式子求出相交点。

    在godot工程里,那只要把原始位置和新位置的之间线段和多边形的线都算一遍,如果有交点则新位置为交点,就是最基本的方法。但是因为平行线相交时算不出来,应该需要额外处理。还有是单纯这样就算不出界,但到边就卡主了,怎么处理也需要再看看。

    首先参考官方教程,把范围画出来。
    godot-es-docs.readthedocs.io/en/latest/tutorials/2d/custom_drawing_in_2d.html
    得说我不明白为什么不能在_draw外用比如draw_line,也不明白为什么不能在func外写了var a =1后再写个a=2,总之就是这样。
    还有想用数组之类存放所有点的坐标,c#里似乎好几种,反正这里好像就一种,就随便了。

    之后参考下面复制移动的部分的码,
    godot-es-docs.readthedocs.io/en/latest/getting_started/step_by_step/your_first_game.html
    然后我想想需要取得上一层的node2d里的那个数组,how?谷歌,其实有印象之前在哪见过,但想用时还是得搜。用get_node,get_node("..")就是上一层,get_node("../Label")就是同一层的label。

    运行就像这样

    当然可以看到我就验了一条线,而且还有前面提到的问题,反正不就是“可以”了吗?而且这种程度对我来说才叫“可以”,当然我觉得还是很多人会看不懂。
  • m
    mes
    就说如果真的用过比如unity,就是想用一个多边形围着一个圆不让它出来那怎么办?
    我只想到每条边都做一个方形的碰撞形状,这就是最简单的方法。
    就好像想用剪刀剪线,但是只有菜刀。
    当然这个剪刀我也没完全确定能造出来,只能近似,至少我想了,还试了,要是连这也做不到那最终游戏能做出来吗?
    除了看着是不是难看以外,还有就是会不会想至少这样做会更有意思,归根究底是兴趣问题。
    反正我也只是兴趣,要说有什么让我觉得不爽那就是可以感到并没有其他真正有兴趣的人。

    关于101l问题1,基本方法,也只是参考,和如何与有一大片tile的地图检测
    jonathanwhiting.com/tutorial/collision/
    lazyfoo.net/tutorials/SDL/39_tiling/index.php
  • 汪达
    说得好,那么你为什么不尝试解答楼主的疑问呢?
  • m
    mes
    LS某些人,那我也不客气,下次回答问题请把工程文件拿出来谢谢。
  • L
    Lunamos
    那也得要求你问出一个好问题才行。你问出的问题如果足够好,我相信会有人愿意去试着实现一下再来回答。

    如果问题不够好,给的教程不看,推荐的书不读,谁有有义务去帮你实现一遍呢。

    我觉得你先尝试一下,每次只问一个具体问题比较好。你的语言组织很糟糕,经常看不出你的问题在哪里,或者到底想说什么。比如你131l说,101l的问题1是tile碰撞,你自己想出来了,但你101楼的问题1明明是


    这谁又知道你想说什么啊
  • m
    mes
    如果你看了连接,还有一丁点编程知识的话应该知道,不管你有没兴趣还是说说。

    map[][]
    比如要找地图上横m竖n,因为是0开始的
    map[m-1][n-1]
    我查到的差不多都这样。

    反正留给走到这一步的人,毕竟我也是名称也不会记的人,无法更详细解释。


    还有你们可以继续开发,不再参与。

  • l
    liuyuan23
    这就是活的:你比国足踢得好你怎么不上?

    回答你的问题,这里是非技术性论坛,我讨论的是非技术性问题
  • 汪达
    别,我真没说你比国足踢得好
    我只问你怎么不上
    所谓言传身教,你教别人怎么做,只是靠嘴炮吗?
  • 汪达
    楼上几位老哥相当诚恳地浪费生命回答楼主缺乏常识+刁难般的提问,还要被你个连帖子都不看的跳出来喷政治不正确,喷巨魔?这真是啃脚的笑话别人年纪小了。
  • q
    q8f13
    爬了下楼这歪的够严重的,这到底是在讨论啥

    输入缓冲对于act ftg platformer等需要实时反应的游戏是标配。除只是要做个粪游戏或者4399

    所谓跳跃手感,包括马里奥在内,没有固定的做法。取决于你想营造的手感是什么样的

    所谓硬核的概念是玩家主观不是开发者主观

    抛开设计谈实现没有意义

    有问题集中问一个问题的解决不要东拉西扯

    — from Google Pixel 3, Android 10 ofS1 Next Goosev2.2.2
  • m
    mes
    麻烦不做的人不要回了,因为比如LS也知道歪了吧?那你还继续?如果这么想的人请自己做个完整游戏拿出来,再大家讨论手感啥的,这就是个工具及使用帖,讨论能怎么使用,我有我个人的兴趣,而且只看到没人来解决,而且也没别人有真正的问题。
    反正这种我也不再回。
  • m
    mes
    所以我有提出问题,说不定有人有相同的问题。
    我有问题也是搜到别人的提问。

    数学教程可以,不过要中学生能看懂的水准。
    同理,实现就要包括怎么写码,至少是相关工具的工程测试过可以的。

    要是都没有,那还有什么讨论的意义呢?这里面对的还是更初级的人士。

    刚好搜到有个比较完整的demo,但是没有说明,那就看是不是自己不想“从头开始”的人也能用了。

    github.com/GDQuest/godot-make-pro-2d-games

    还有就是为什么非得做出来?只是兴趣,这就同虚幻引擎非得什么样的画面一样,非常中国。

    见到就顺便发发,场景全能破坏的游戏。
    store.steampowered.com/app/1167630/Teardown/
    也许至少作为设计玩法也可以参考……