public void Damage(float damage) { if (server_stage_manager_ == null) { server_stage_manager_ = FindObjectOfType<ServerStageManager>(); } if (server_stage_manager_ == null) return; if (server_stage_manager_.IsEndTutorial) return; hp -= damage; }
//毎フレームに一度 void Update() { if (!hp_manager_.isActive) return; if (!enemy_stater_.isNormal) return; if (server_stage_manager_ == null) { server_stage_manager_ = FindObjectOfType<ServerStageManager>(); } if (server_stage_manager_ == null) return; if (server_stage_manager_.IsEndTutorial) return; Vector3 playerPos = player.position; //プレイヤーの位置 Vector3 direction = playerPos - transform.position; //方向と距離を求める。 float distance = direction.sqrMagnitude; //directionから距離要素だけを取り出す。 direction = direction.normalized; //単位化(距離要素を取り除く) direction.y = 0f; //後に敵の回転制御に使うためY軸情報を消去。これにより敵が上下を向かなくなる。 //経過時間を取得 searchTime += Time.deltaTime; if (searchTime >= 1.0f) { //最も近かったオブジェクトを取得 nearObj = serchTag(gameObject, "Player"); player = nearObj.transform; //経過時間を初期化 searchTime = 0; } //プレイヤーとの距離を設定 switch (distance_state) { case DISTANCE_STATE.SHORT: limitDistance = shortlimitDistance; break; case DISTANCE_STATE.MIDDLE: limitDistance = middlelimitDistance; break; case DISTANCE_STATE.LONG: limitDistance = longlimitDistance; break; } //プレイヤーの距離が一定以上でなければ、敵キャラクターはプレイヤーへ近寄ろうとしない if (distance >= limitDistance) { //プレイヤーとの距離が制限値以上なので普通に近づく transform.position = transform.position + (direction * speed * Time.deltaTime); } else if (distance < limitDistance) { //プレイヤーとの距離が制限値未満(近づき過ぎ)なので、後退する。 transform.position = transform.position - (direction * speed * Time.deltaTime); } //プレイヤーの方を向く transform.rotation = Quaternion.LookRotation(direction); if (timer >= 180) { int var; var = Random.Range(0, 3); Debug.Log(var); if (var == 0) { distance_state = DISTANCE_STATE.SHORT; Debug.Log("short"); } if (var == 1) { distance_state = DISTANCE_STATE.MIDDLE; Debug.Log("middle"); } if (var == 2) { distance_state = DISTANCE_STATE.LONG; Debug.Log("long"); } timer = 0; } if (atktimer >= 20) { int var; var = Random.Range(0, 60); if (var < 10) { } else if (var < 30) { Attack(); } else { } atktimer = 0; } timer += 1; atktimer += 1; }
//毎フレームに一度 void Update() { if (enemy_stater_.isMeleed || !hp_manager_.isActive) { StopAllCoroutines(); guard = false; } if (!hp_manager_.isActive) return; if (!enemy_stater_.isNormal) return; if (server_stage_manager_ == null) { server_stage_manager_ = FindObjectOfType<ServerStageManager>(); } if (server_stage_manager_ == null) return; if (server_stage_manager_.IsEndTutorial) return; if (!enter_room_.isEnter) return; if (!guard) { StartCoroutine(Move()); guard = true; } Vector3 playerPos = player.position; //プレイヤーの位置 Vector3 direction = playerPos - transform.position; //方向と距離を求める。 float distance = direction.sqrMagnitude; //directionから距離要素だけを取り出す。 direction = direction.normalized; //単位化(距離要素を取り除く) //direction.y = 0f; //後に敵の回転制御に使うためY軸情報を消去。これにより敵が上下を向かなくなる。 //経過時間を取得 searchTime += Time.deltaTime; if (searchTime >= 1.0f) { //最も近かったオブジェクトを取得 nearObj = serchTag(gameObject, "Player"); player = nearObj.transform; //経過時間を初期化 searchTime = 0; } //プレイヤーとの距離を設定 switch (distance_state) { case DISTANCE_STATE.SHORT: limitDistance = shortlimitDistance; break; case DISTANCE_STATE.MIDDLE: limitDistance = middlelimitDistance; break; case DISTANCE_STATE.LONG: limitDistance = longlimitDistance; break; } //プレイヤーの方を向く transform.rotation = Quaternion.LookRotation(direction); if (timer >= 180) { int var; var = UnityEngine.Random.Range(0, 3); if (var == 0) { distance_state = DISTANCE_STATE.SHORT; } if (var == 1) { distance_state = DISTANCE_STATE.MIDDLE; } if (var == 2) { distance_state = DISTANCE_STATE.LONG; } timer = 0; } if (atktimer >= 20) { int var; var = UnityEngine.Random.Range(0, 60); if (var < 10) { } else if (var < 30) { Attack(); } else { } atktimer = 0; } timer += 1; atktimer += 1; }
void OnTriggerEnter(Collider collider) { if (!isServer) return; if (collider.gameObject.layer != layer_num_) return; if (server_stage_manager_ == null) { server_stage_manager_ = FindObjectOfType<ServerStageManager>(); } if (server_stage_manager_ == null) return; if (server_stage_manager_.IsEndTutorial) return; hp -= collider.gameObject.GetComponent<BulletPower>().getPower; Destroy(collider.gameObject); var hit_effect = Instantiate(hit_effect_prefab); hit_effect.transform.SetParent(gameObject.transform); hit_effect.transform.position = collider.gameObject.transform.position; NetworkServer.Spawn(hit_effect); if (noise_effect_ != null) { if (saved_noise_effect_ == null) { var effect = Instantiate<GameObject>(noise_effect_); var effect_transform = effect.transform; effect_transform.SetParent(transform); effect_transform.localPosition = noise_effect_.transform.position; effect_transform.localScale = noise_effect_.transform.localScale; effect_transform.localRotation = noise_effect_.transform.rotation; effect.name = noise_effect_.name; Destroy(effect, 8.0f); saved_noise_effect_ = effect; } } if (hp < 0) { hp = 0; GetComponent<Rigidbody>().freezeRotation = false; } if (gameObject.tag != "Player") return; sound_manager_.PlaySE(12); }
void Start() { var id = GetComponent<Identificationer>().id; hp = FindObjectOfType<AirFrameParameter>().GetMaxHP(id); MAX_HP = hp; sound_manager_ = FindObjectOfType<SoundManager>(); server_stage_manager_ = FindObjectOfType<ServerStageManager>(); }
public override void OnStartServer() { base.OnStartServer(); server_stage_manager_ = FindObjectOfType<ServerStageManager>(); }