// Initialise state public override void InitialiseState(Game1 game) { // Store reference to singleton Managers mapGen = MapGen.Instance; poolManager = PoolManager.Instance; collisionManager = CollisionManager.Instance; enemyDirector = EnemyDirector.Instance; gameManager = GameManager.Instance; collisionManager.Initialise(); enemyDirector.Initialise(); poolManager.Initialise(); // Attach events enemyDirector.OnStageEnemiesDestroyed += OnStageBegin; // gameManager.Hero.OnDeath += OnHeroDeath; // Initialise mapGen.Initialise(game.Services); mapGen.GetMapData("BattleArena"); base.InitialiseState(game); }
//エネミグループをプレハブからインスタンスする関数 public void InstanceEnemy(string enemyGroup_name, GameObject callObj, GameObject parentObj = null) { for (int i = 0; i < enemyGroup_prefabs.Length; i++) { //プレハブにないなら生成しない if (!enemyGroup_prefabs[i].name.Equals(enemyGroup_name)) { continue; //名前と一致していない } //生成したり登録したり GameObject enemyGroup = Instantiate(enemyGroup_prefabs[i], belgianAI); if (parentObj != null) { enemyGroup.transform.parent = parentObj.transform; } enemyGroup.transform.position = callObj.transform.position; instanceMap.Add(callObj, enemyGroup.transform); //add //rootがEnemyDirectorなら EnemyDirector single = enemyGroup.GetComponent <EnemyDirector>(); if (single != null) { GameDirector.Instance().AddEnemyDirector(single); return; } //rootの子オブジェクトがEnemyDirectorなら EnemyDirector[] group = enemyGroup.GetComponentsInChildren <EnemyDirector>(); for (int num = 0; num < group.Length; num++) { GameDirector.Instance().AddEnemyDirector(group[num]); } return; } }
private void Awake() { if (mInstance != null) { Destroy(gameObject); return; } UnityEngine.SceneManagement.SceneManager.activeSceneChanged += OnActiveSceneChanged; mInstance = this; DontDestroyOnLoad(gameObject); mPlayerStats = GetComponentInChildren <CharacterStatistics>(); mSaveManager = GetComponent <SaveManager>(); mTransitionManager = GetComponentInChildren <ScreenTransitionManager>(); mCinematicDirector = GetComponentInChildren <CinematicDirector>(); mCinematicDataProvider = GetComponentInChildren <CinematicDataProvider>(); mCharacterStatInfo = GetComponentInChildren <CharacterStatInfo>(); mCentralEvents = new CentralEvents(); mCompanionBuilder = GetComponentInChildren <CompanionBuilder>(); mEnemyDirector = GetComponentInChildren <EnemyDirector>(); mSoundManager = GetComponentInChildren <SoundManager>(); mQuirkRegistry = GetComponentInChildren <QuirkRegistry>(); mSaveManager.LoadGame(); playerData.onPlayerDataChanged += OnPlayerDataChanged; playerStats.onCharacterStatisticsChanged += OnPlayerStatsChanged; }
//エネミー管理リストの削除関数 public void RemoveEnemyDirector(EnemyDirector ene) { if (!enemyDirectors.Contains(ene)) { return; } enemyDirectors.Remove(ene); }
//エネミー管理リストの追加関数 public void AddEnemyDirector(EnemyDirector ene) { if (enemyDirectors.Contains(ene)) { return; } enemyDirectors.Add(ene); }
// Start is called before the first frame update void Start() { enemyDirector = transform.parent.GetComponent <EnemyDirector>(); thisAgent = GetComponent <NavMeshAgent>(); thisAnimator = GetComponent <Animator>(); PlayerDetected = false; Player = GameObject.Find("Brian").transform; Health = MaxHealth; }
private IEnumerator Shoot() { RaycastHit hit; // Reduce ammo by 1 currentAmmo--; // Play Muzzle Animation if (muzzleFlash != null) { muzzleFlash.Play(); } // Trigger Recoil Animation if (animator != null) { animator.SetBool("isRecoil", true); } // Check if Raycast detects hit if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range)) { Debug.Log(hit.transform.name); EnemyDirector target = hit.transform.GetComponent <EnemyDirector>(); if (target != null) { target.gameObject.GetComponent <Health>().TakeDamage(damage); if (impactEffect != null) { Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal)); } } } // Come back once the recoil animation is done and next fire available yield return(new WaitForSeconds(1f / fireRate)); if (animator != null) { animator.SetBool("isRecoil", false); } }
internal void Update(float deltaTime) { //Update the FarseerPhysics physics PhysicsWorld.Step(deltaTime); Projectiles.ForEach(p => p.Update(deltaTime)); Particles.ForEach(p => p.Update(deltaTime)); Collectables.ForEach(c => c.Update(deltaTime)); Enemies.ForEach(e => e.Update(deltaTime)); MainPlayer.Update(deltaTime); Map.Update(deltaTime); EnemyDirector.Update(deltaTime); MainCamera.Update(deltaTime); Cull(Projectiles); Cull(Particles); Cull(Collectables); Cull(Enemies); }
internal void ClearGame() { Projectiles.ForEach(p => p.WasCleared()); Projectiles.Clear(); Particles.ForEach(p => p.WasCleared()); Particles.Clear(); Collectables.ForEach(c => c.WasCleared()); Collectables.Clear(); Enemies.ForEach(e => e.WasCleared()); Enemies.Clear(); Map.ClearGame(); EnemyDirector.ClearGame(); MainPlayer.WasCleared(); MainPlayer = null; MainCamera = null; }
//インスタンスからエネミーを削除する関数 public void DestroyEnemy(GameObject callObj) { //生成されていないなら if (!instanceMap.ContainsKey(callObj)) { return; } //削除 Transform will_desEneGroup = instanceMap[callObj]; //避難させておく instanceMap.Remove(callObj); //rootがEnemyDirectorなら if (will_desEneGroup == null) { return; } EnemyDirector single = will_desEneGroup.GetComponent <EnemyDirector>(); if (single != null) { GameDirector.Instance().RemoveEnemyDirector(single); Destroy(will_desEneGroup.gameObject); return; } //rootの子オブジェクトがEnemyDirectorなら EnemyDirector[] group = will_desEneGroup.GetComponentsInChildren <EnemyDirector>(); for (int num = 0; num < group.Length; num++) { GameDirector.Instance().RemoveEnemyDirector(group[num]); } Destroy(will_desEneGroup.gameObject); return; }