专案前期就导入了A★并以它的格状资料做为移动的判定,不论是玩家和怪物都是利用此资料做移动的。然而这个资料有些地方不是很正确,在这篇文章的最後,也有先将此问题记录下来
因此,今天就花些时间先来处理这个A★格状资料不正确的问题。
解决的方法有二种
二个方式都算是可行的方案,不过利用改变房间的方法仍还是有可能在不注意的情况下产生相题的问题,也就是说要规范房间的制作方式才能避开这个问题。而今天采用的方法是利用Raycast方式进行,在游戏一开始生成的时间可能会稍微花些时间,但这个方法比较合适,且不太需要额外的规范。
主要的程序码片断如下
if (gridNode.HasAnyGridConnections)
{
//
var raycastToNorth = Physics.Raycast(
raycastStartPosition, Vector3.forward, out northHit, distanceToCheck, layerMask);
var raycastToEast = Physics.Raycast(
raycastStartPosition, Vector3.left * -1.0f, out eastHit, distanceToCheck, layerMask);
var raycastToSouth = Physics.Raycast(
raycastStartPosition, Vector3.forward * -1.0f, out southHit, distanceToCheck, layerMask);
var raycastToWest = Physics.Raycast(
raycastStartPosition, Vector3.left, out westHit, distanceToCheck, layerMask);
// i is the direction index
var hasConnectionAtAStar = gridNode.HasConnectionInDirection(i);
var hasConnectionAfterRaycast = !hitAtDirections[i];
}
// i is the direction index
gridNode.SetConnectionInternal(i, false);
先利用HasAnyGridConnections来排除本来就没有路径的Node,也就是这个时间点以A★原先的资料为主。而後四方向侦测,若是Raycast侦测到有阻挡物(墙壁),则将原来的A★资料做修正,这个阶段则以Raycast为主。
可以从ActivityLog里看到若是再往南边走,则会有不能走的讯息出现
A★的资料修正後,接下来再加入一个移动限制,也就是若是玩家移动的方向前方那一格已有怪物,则玩家不能够移动到那格。这点和多数的Roguelike以及早期的FPDC移动机制是相同的,就不再特别强调这个规则。
利用怪物身上有目前在哪个Node index的资料,直接和场上所有的怪物进行比对,如果要移动到的Node Index刚好是某只物物目前所在地,则不能移动。
部份VS如下
试着往怪物的所在地方向移动,则会看到不能移动的讯息
多数的小地图是用Camera直接由TopDown的角度照下来,但这个方法没有办法有效的呈现出地图中每一格的(墙壁)资讯。而目前是用A★进行格状资料的生成,利用这个资料,可以用另一种方式呈现小地图。
想过直接在Texture上进行SetPixel的方式画每一格,但或许可以直接利用Tilemap进行小地图的生成。
初步的尝试,看起来是不正确的,不知道是A★的倶料拿取有错,还是有其它原因,要再花时间了解
<<: 纯手工打造UART间的资料清洗工具II - 在一个档案中同时存取两个UART的方法
>>: 30天零负担轻松学会制作APP介面及设计【DAY 20】
文章说明 文章分段 文章说明 deeplab的简单介绍、於我的意义 ep.1 tensorflow的...
今天介绍visibility的两个属性:visible和hidden visibility只控制物件...
什麽是 Render? 身为一个网路软件开发者,程序写完测完本机跑完後,下一个问题就是要部署在哪里了...
Net Core 为一跨平台的应用开发,其此框架上可以加上许多自制服务,称之为容器也不为过。 如果...
随着生物医学数据的增加,机器学习可以提供各式服务来帮助人类。常见的案例像是:诊断问题、药物发明、虚拟...