// Update is called once per frame void LateUpdate() { if (!isDetectionFrame || m_manageTerritory.territoryPoints == null) { return; } SetHitFlags(CollisionTerritory.HitLineTerritory(m_manageTerritory.territoryPoints, transform.position, m_cHitDistance, -m_radius)); }
/// <summary> /// [CheckTerritory] /// テリトリーの当たり判定を行う /// </summary> void CheckTerritory(ref Vector3 position) { //ヒット計算 bool isResult = CollisionTerritory.HitCircleAndRayTerritory( m_playerInfo.territorialArea, position, out m_territoryForwardSideNormall, m_collisionRadius); //フラグ判定 isTerritoryEnter = (isTerritoryStay ^ isResult) & isResult; isTerritoryExit = (isTerritoryStay ^ isResult) & isTerritoryStay; isTerritoryStay = isResult; }
/// <summary> /// [HitCircleTerritory] /// PlayerのテリトリーエリアとXZ円で当たり判定を行う /// 引数1: Player object->GetInstanceID() /// 引数2: Circle position /// 引数3: Circle radius /// </summary> public bool HitCircleTerritory(int playerID, Vector3 position, float radius) { //debug only, invalid key対策 #if UNITY_EDITOR if (!m_players.ContainsKey(playerID)) { Debug.LogError("Error!! PlayerAndTerritoryManager->HitCircleTerritory\n ContainsKey(instanceID) == false"); return(false); } #endif return(CollisionTerritory.HitCircleTerritory( m_players[playerID].playerInfo.territorialArea, position, 100.0f, -radius)); }
/// <summary> /// [RaycastTerritory] /// PlayerのテリトリーエリアとXZでRaycast判定を行う /// 引数1: Player object->GetInstanceID() /// 引数2: Ray position /// 引数3: Ray direction /// 引数4: Ray distance /// 引数5: Ray normal (out) /// </summary> public bool RaycastTerritory(int playerID, Vector3 position, Vector3 direction, float distance, out Vector3 normal) { //debug only, invalid key対策 #if UNITY_EDITOR if (!m_players.ContainsKey(playerID)) { Debug.LogError("Error!! PlayerAndTerritoryManager->GetServant\n ContainsKey(instanceID) == false"); normal = Vector3.zero; return(false); } #endif return(CollisionTerritory.HitRayTerritory(m_players[playerID].playerInfo.territorialArea, position, direction, distance, out normal)); }
void LateUpdate() { if (!isDetectionFrame || m_manageCommander == null) { return; } if (m_manageCommander.isLinked) { if (!m_isLinkedMode) { hitCommander = CommanderManager.instance.GetCommanderObject(m_manageCommander.gameObject); m_isLinkedMode = true; } SetHitFlags(CollisionTerritory.HitLineTerritory( m_manageCommander.manageTerritory.territoryPoints, transform.position, m_cHitDistance, -m_radius)); } else { m_isLinkedMode = false; hitCommander = default; for (int i = 0; i < CommanderManager.instance.commanderCount; ++i) { var commander = CommanderManager.instance.GetCommanderIndex(i); if (commander.isValid) { bool result = CollisionTerritory.HitLineTerritory( m_manageCommander.manageTerritory.territoryPoints, transform.position, m_cHitDistance, -m_radius); if (result) { SetHitFlags(result); hitCommander = CommanderManager.instance.GetCommanderObject(m_manageCommander.gameObject); break; } } } if (!hitCommander.isValid) { SetHitFlags(false); } } }
/// <summary> /// [UpdateBasePoint] /// BasePointの更新を行う /// </summary> public void UpdateBasePoint() { //処理インターバル判断 if (m_intervalTimer.elapasedTime < m_collisionJudgementInterval) { return; } //処理負荷軽減 Vector3 position = transform.position; //ヒットしたPlayerのID int hitPlayer = -1; //Playerにヒットした回数 int hitCount = 0; //当たり判定ループ foreach (var e in PlayerAndTerritoryManager.instance.allPlayers) { //当たったらID保存、カウンタインクリメント if (CollisionTerritory.HitCircleTerritory(e.Value.playerInfo.territorialArea, position, m_collisionRadius)) { hitPlayer = e.Value.playerInfo.instanceID; ++hitCount; } } //ヒットしていなかったら解除 if (hitCount == 0 && isLinked) { UnlinkPlayer(); } //ヒットしていたら登録 else if (hitCount == 1 && !isLinked) { LinkPlayer(hitPlayer); } //ないだろうけど上書きされたら解除->登録 else if (linkPlayerID != hitPlayer) { UnlinkPlayer(); LinkPlayer(hitPlayer); } //タイマー再スタート m_intervalTimer.Start(); }
// Update is called once per frame void Update() { //Debug.Log(CollisionTerritory.HitSegments(Vector3.forward, -Vector3.forward, -Vector3.right, 100)); Debug.Log(CollisionTerritory.HitLineTerritory(m_territory.territoryPoints, transform.position, 100)); }