private void Awake() { GameUnit = GetComponent <GameUnit>(); Vision = GetComponent <UnitVision>(); NavMeshAgent = GetComponent <NavMeshAgent>(); InvokeRepeating("Movement", 0f, GameStaticVariables.MovementRefreshTime); }
/// <summary> /// 计算所有单位的视野数据 /// </summary> /// <param name="units">所有单位的列表</param> void CalculateVision(List <UnitVision> units) { m_visionGrid.Clear(); for (int unitIndex = 0; unitIndex < units.Count; unitIndex++) { UnitVision unit = units[unitIndex]; Vector2Int centerTile = WorldPosToTilePos(unit.WorldPos); if (IsOutsideMap(centerTile)) { Debug.LogError($"单位{unit.m_gameObject.name}的格子位置{centerTile}超出了地图范围"); continue; } List <Vector2Int> tiles = Utils.CircleByBoundingCircle(centerTile, unit.m_range, m_tileSize); for (int i = 0; i < tiles.Count; i++) { if (!IsBlocked(centerTile, tiles[i], unit)) { m_visionGrid.SetVisible(tiles[i].x, tiles[i].y, unit.m_mask); } } } }
protected virtual void Awake() { NavMeshAgent = GetComponent <NavMeshAgent>(); Vision = GetComponent <UnitVision>(); _laser = GetComponent <LineRenderer>(); }
/// <summary> /// 两点间的视野是否因为地形被阻挡了 /// </summary> bool IsBlocked(Vector2Int startTile, Vector2Int targetTile, UnitVision unit) { List <Vector2Int> points = Utils.LineByBresenhams(startTile, targetTile); for (int i = 0; i < points.Count; i++) { short altitude = m_terrainGrid.GetAltitude(points[i]); if (altitude > unit.m_terrainHeight) { return(true); } } return(false); }
bool IsVisible(int curtMask, UnitVision unit) { if ((curtMask & unit.m_mask) > 0) { return(true); } Vector2Int tilePos = WorldPosToTilePos(unit.WorldPos); if (m_visionGrid.IsVisible(tilePos, curtMask)) { return(true); } return(false); }
void Update() { UnitVision unit = new UnitVision(gameObject, m_mask, m_radius, m_height); Demo.Instance.UpdateUnit(GetInstanceID(), unit); }
private void Awake() { GameUnit = GetComponent <GameUnit>(); Vision = GetComponent <UnitVision>(); }
public void UpdateUnit(int id, UnitVision unit) { m_unitDict[id] = unit; }
protected virtual void Start() { _currentlyActiveVision = Vision; }