/// <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> /// [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(); }