作者gmking (帝王之心)
看板GameDesign
标题[程式] 问题,物件的地形移动与框选
时间Sun Feb 23 00:48:29 2014
大家好,目前HOE团队已经开始实作部分,以下是我们第一阶段想要实作的系统
https://drive.google.com/file/d/0B_BC8XSz8r3tZzRuZHFLbVBORUE/edit?usp=sharing
目前还缺少对於unity有开发经验的程式
会处理物件移动或者是读取系统时间进行数值计算,还有制作动画等
美术部分缺少会制作「地形模组」的高手~~
====================================================================
广告结束,下面是问题......
因为我们经验还不够,目前有几个问题想要请教一下大家
1.物件移动,因应地形改变移动速度问题
不知道您之前是怎麽做地形的?
因为我们想要做到单位移动可以因应不同地形而改变速度。unity可以内建地型模组但是
不好用(因为之後地图很大很大,用他的内建程式没办法模组化),所以我们想要自己建模
。
但是不知道是直接定义物件的高度然後计算斜率,还是把地形模转成矩阵之後利用高度差
来求斜率呢?
2.框选物件问题
因为我们想要制作RTS,利用滑鼠左键框选来选择单位,右键点击地面来移动,请问要如
何制作这种框选功能呢?利用UI?可是这是动态UI.....
====================================================================
问这种问题应该不会被打吧 囧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.200.150
1F:推 GoalBased:很开心看到你们已经开始实做了 先推再来看系统 02/23 01:00
其实我们这里有做功能展示品XDD 但等之後弄完整再给大家看吧
※ 编辑: gmking 来自: 140.114.200.150 (02/23 01:16)
3F:→ azureblaze:1.地图资讯和地图模组分开 模组只是显示用的 02/23 01:29
4F:→ azureblaze:然後我觉得以要做的东西的难度,你们应该学习自行找答案 02/23 01:31
6F:推 GoalBased:你都PO闻了 却只有文字..既然有展品就放上来吧 02/23 01:44
7F:→ gmking:谢谢您的回答!那个是功能展示品(PPT做的XD) 但还不完全 02/23 01:46
8F:→ gmking:真的要等我们功能做完再传= = 02/23 01:46
9F:推 Ansaga:地型的话要不要参考看看banished用的那个套件 02/23 01:56
11F:→ Ansaga:同事试用了一下感觉满好玩的 02/23 01:57
12F:推 cjcat2266:几个ray cast同时往下探测地形高度,用得到的资料算斜率 02/23 04:06
13F:→ gmking:感谢楼上XD这方法昨天晚上我们有想到 02/23 09:27
14F:→ gmking:看来真的就那几个方法...剩下是pathfinding的问题了 02/23 09:27
15F:→ gmking:虽然A*有些瑕疵 不过应该会先用这个演算法 02/23 09:27
16F:→ gmking:谢谢A大的提供 这应该可以省不少时间= =(我们美术不会地形. 02/23 09:30
17F:推 Killercat:erh, 我个人是有个比较不讨喜的建议 就是图像面先用2D 02/23 12:39
18F:→ Killercat:来做Prototype,再用地图的Alpha channel来模拟高度 02/23 12:39
19F:→ Killercat:这样可以先聚焦在游戏的逻辑面 而高度部分一样可以得到 02/23 12:40
20F:→ Killercat:然後又不需要复杂的3D系统也可以做出prototype 02/23 12:40
21F:→ Killercat:缺点的话大概就是高度会仅仅只有256阶 但是系统会简单 02/23 12:41
22F:→ Killercat:非常多 也暂时不用接触复杂的ray cast问题 02/23 12:41
23F:→ Killercat:说比较明显的缺点的话呢 就是这个没办法用A*很常搭配的 02/23 12:41
24F:→ Killercat:导航网格做A* 但是普通栅状的A*一样能做 也一样能及时 02/23 12:42
25F:→ Killercat:filter掉不能走的框框 其实不会差太多 02/23 12:42
26F:→ Killercat:人力是很有限的 很难一边做3D引擎一边做游戏逻辑同时解 02/23 12:43
27F:→ Killercat:决两个毫不相干的问题 我会建议先尽可能简单化游戏逻辑 02/23 12:43
28F:→ Killercat:以外的部分,专新先prototype游戏逻辑会比较好 02/23 12:44
29F:→ Killercat:另外我说真的 几乎所有的PF演算法都是based on A*.... 02/23 12:44
30F:→ Killercat:最多最多就是heuristic function写的好不好而已 02/23 12:45
31F:→ Killercat:所以不会存在什麽「A*有些瑕疵但是还是暂时得用」这问题 02/23 12:46
32F:→ y3k:1.我建议你们先用2D做... 2.物件可以常驻在场 只差显示不显示 02/23 17:25
33F:→ gmking:询问许多人意见後,问题已经解答,谢谢大家 02/23 23:10
34F:推 dreamnook:喔喔有实际进度了吗? 推 02/24 11:27
35F:推 LayerZ:第一个问题...我没做过手机开发,以下回答有错请指正 02/24 22:29
36F:→ LayerZ:1.你确定你要在游戏中"即时"运算? 02/24 22:29
37F:→ LayerZ:地图去掉Z轴後也只是2D,地图固定的话,很多资讯都是可以 02/24 22:30
38F:→ LayerZ:在设计过程中预先算出来,以纯资料方式载入 02/24 22:30
39F:→ gmking:sry没说清楚我们後来的方法导致误会,会先用矩阵存起来 02/25 08:12
40F:→ Killercat:3D的做法通常分两种 一种是打前後左右四个点ray cast出 02/26 13:16
41F:→ Killercat:z以後可以算出四方向斜率 二的话则是拿这个mesh的三个点 02/26 13:17
42F:→ Killercat:套公式也可以得到斜率(也可以额外参考相邻三角) 02/26 13:17
43F:→ Killercat:两种做法其实各有好处 预算也可以,只是你要花点心思 02/26 13:18
44F:→ Killercat:去存这些东西,索引时间不见得会比算的划算 02/26 13:18
45F:→ Killercat:2d就简单了 直接拿附近八个像素的alpha channel就好 02/26 13:18
46F:推 LayerZ:我没想到索引成本..那真的不一定比较划算@@ 02/26 15:26
47F:→ Killercat:因为斜率可以用GPU在shader算 这一定是最快的 XD 02/26 16:56
48F:→ Killercat:不过普通CPU来讲的话 大概就是多吃一块记忆体 快慢难讲 02/26 16:57
其实斜率读取部分,我们也可以改成这样?
比如说每隔0.1秒在去读取下一个移动格子的资讯。(不然每走一个就读取下一个路径会走
到的格子好像蛮耗效能的)
因为一开始先把地形存到矩阵里面了,剩下的就是看路径演算法选取哪几个格子去走了。
这里的斜率是高度值的变化,也就是delta z,然而值得注意的是,一个角色的大小不是
对应到一个方格,最少也要对应到9格方格(物件比地图格子还大)
不然走起来会超卡啊!(一支角色一个格子的游戏玩起来很难控,特别是RTS...)
但不知采取隔一段时间再去读取位置座标的方式会不会比较节省效能?
※ 编辑: gmking 来自: 140.114.200.150 (02/27 04:06)
49F:→ Killercat:这部分有个比较妙的解法 就是在算导航的时候一定会算 02/27 06:47
50F:→ Killercat:导航格 再最後一步把路径拼接起来的时候算沿路的斜率 02/27 06:48
51F:→ Killercat:这做法有很多意想不到的好处,以前前公司这样做过 02/27 06:48
52F:→ Killercat:这样你就可以在每段导航路径顺便加入速度资讯 02/27 06:49
53F:→ Killercat:重点是这样计算会快很多 02/27 06:50
54F:→ y3k:我真的建议你们先用2D概念去做 不会浪费太多时间在这种细节上 02/27 11:22
55F:→ azureblaze:先能在平地上走再来考虑这种问题 02/27 11:26
56F:推 StupidGaGa:推楼上,这句话是重点,也是基础 03/12 17:22
57F:→ StupidGaGa:我第一次写游戏时,前辈就是给这句 03/12 17:24
58F:→ StupidGaGa:前辈:「你先会走,再来跟我谈其他的」 03/12 17:24
59F:→ StupidGaGa:另外,你上面说依照不同地形决定移动速度,又说到高度 03/12 17:29
60F:→ StupidGaGa:你是想让角色爬山的变慢,还是走过泥泞地的时候变慢? 03/12 17:30
61F:→ StupidGaGa:如果你是鸟瞰视角的话,建议你直接做2D 03/12 17:31
62F:→ StupidGaGa:不少游戏程式都是以2D再写,但是看起来3D 03/12 17:33
63F:→ StupidGaGa:2D就不用算斜率,只要把「斜坡」本身当成一种地形就好 03/12 17:35