// エリアを作成 private BattleAreaModel CreateArea(GameObject stadiumPrefab, GameObject betteryPrefab, GameObject castlePrefab, bool isEnemy = false) { // マップのもとになるものを作成 GameObject mainMap = new GameObject(); mainMap.transform.SetParent(GameObject.Find("MainGameObjects").transform); mainMap.name = "mainMap"; // 砲台をその傘下に追加 var bettery = CreateBettery(betteryPrefab, isEnemy); bettery.View.RootTransform.SetParenet(mainMap.transform); // マップをその傘下に追加 var map = CreateMap(stadiumPrefab, isEnemy); map.View.RootTransform.SetParenet(mainMap.transform); // 城をその傘下に追加 var castle = CreateObject(castlePrefab); castle.transform.SetParent(mainMap.transform); // 敵の場合回転 if (isEnemy) { mainMap = Rotate180(mainMap); } return(BattleAreaModel.CreateArea(bettery, map)); }
// メソッド -------------------------------- // ゲームの各エリアを設定するが。。ここでいいのか? public void Initialize( BattleAreaModel player, BattleAreaModel enemy, BattleMovableTargetModel movableTarget ) { this.playerAreaModel = player; this.enemyAreaModel = enemy; this.movableTarget = movableTarget; }
private void ExtrusionZakoFromArea(BattleAreaModel area, List <BattleCharacterModel> models) { if (area.Map.Life.IsDead()) { return; } var areaCollision = area.Map.View.GetCollision(); foreach (var zako in models) { // 衝突判定を行わない場合はしない if (!zako.View.IsCollisionEnable) { continue; } var zakoCollision = zako.View.GetCollision(); if (areaCollision.IsHamidashi(zakoCollision)) { // 雑魚中心からエリア中心までのベクトル Vector3 vecFromAreaToZako = areaCollision.Position - zakoCollision.Position; // 雑魚中心からエリア中心までの距離 float lengthFromAreaToZako = (vecFromAreaToZako).magnitude; // 制限距離 float limitedLength = areaCollision.Radius - zakoCollision.Radius; // はみ出し距離 float hamidashi = lengthFromAreaToZako - limitedLength; // はみ出しの解除 zako.View.RootTransform.SetPosition(zako.View.RootTransform.GetPosition() + vecFromAreaToZako.normalized * hamidashi * MapCollisionSmooth); } } }