private void UpdateLife() { float life_rate = actor_controller_.GetActorParameter().Life / actor_controller_.GetActorParameter().MaxLife; var scale = cover_.localScale; var position = cover_.localPosition; scale.x = life_rate; position.x = (life_rate - 1f) * 0.5f; cover_.localScale = scale; cover_.localPosition = position; }
// 乗り移ってるときに魂ゲージを減る private void ReduceSoulAmount(ActorController actor_controller) { soul_amount_ -= actor_controller.GetActorParameter().SoulDamage *Time.deltaTime; SoulGaugeController.Instance.SetLifeRate(soul_amount_ / kMaxSoulAmount); if (soul_amount_ <= 0f) { soul_amount_ = 0f; if (actor_controller.GetActorType() == ActorController.ActorType.kSoul) { CameraController camera = Camera.main.GetComponent <CameraController>(); if (camera != null) { camera.SetTarget(null); } if (MinimapSystem.Instance) { MinimapSystem.Instance.Camera.SetTarget(null); } Destroy(gameObject); GameFlowController.Instance.GameOver(); } } }
// 魂に戻る処理 private void ReturnToSoul(ActorController actor_controller) { if (return_ == false || actor_controller.GetActorType() == ActorController.ActorType.kSoul) { return; } if (actor_controller.GetActorParameter().CanSwimming == true && is_swimming_ == true) { is_swimming_ = false; return; } // Soul soul_.SetBrainType(ActorController.BrainType.kPlayer); var soul_state = soul_.gameObject.AddComponent <SoulReturnState>(); soul_state.SetSoulAmount(soul_amount_); soul_state.transform.SetPositionAndRotation(transform.position, transform.rotation); soul_state.SetReturnPoint(transform.position + transform.right * 2f); soul_.ChangeState(soul_state); // This ChangeStateToNpc(actor_controller); }
/// <summary> /// 水に入った処理 /// </summary> /// <param name="actor_controller"></param> public override void Swim(ActorController actor_controller) { if (actor_controller.GetActorParameter().CanSwimming == true) { is_swimming_ = true; } }
public override void Act(ActorController actor_controller) { Patrol(actor_controller); if (actor_controller.GetActorParameter().Life <= 0f) {// 肉体が死ぬ Destroy(gameObject); } }
/// <summary> /// 岩を押す処理 /// </summary> /// <param name="actor_controller"></param> public override void OnPushEnter(ActorController actor_controller) { speed_rate_ = actor_controller.GetActorParameter().PushStrength; speed_rate_ = speed_rate_ == 0f ? 1f : speed_rate_; if (!animator_) { return; } animator_.SetBool("push", true); }
/// <summary> /// 火に入った処理 /// </summary> /// <param name="actor_controller"></param> public override void Burn(ActorController actor_controller) { if (actor_controller.GetActorType() != ActorController.ActorType.kSoul) { return; } // 魂を燃やす soul_amount_ = Mathf.Clamp(soul_amount_ - actor_controller.GetActorParameter().FireDamage , 0f, kMaxSoulAmount); }
/// <summary> /// 初期化処理 /// </summary> /// <param name="actor_controller"></param> public override void Init(ActorController actor_controller) { if (soul_ == null) {// 魂のコントローラを保存しておく soul_ = actor_controller; } CameraController camera = Camera.main.GetComponent <CameraController>(); if (camera != null) { camera.SetTarget(transform); } if (MinimapSystem.Instance) { MinimapSystem.Instance.Camera.SetTarget(transform); } animator_ = GetComponentInChildren <Animator>(); gameObject.tag = "Player"; var rely_detector_object = new GameObject("RelyDetector"); rely_detector_object.transform.SetParent(transform); rely_detector_ = rely_detector_object.AddComponent <RelyDetector>(); var parameter = actor_controller.GetActorParameter(); nav_mesh_agent_ = GetComponent <NavMeshAgent>(); nav_mesh_agent_.velocity = Vector3.zero; nav_mesh_agent_.angularSpeed = parameter.TurnSpeed; nav_mesh_agent_.updatePosition = true; nav_mesh_agent_.updateRotation = false; var rigidbody = GetComponent <Rigidbody>(); rigidbody.angularVelocity = Vector3.zero; rigidbody.velocity = Vector3.zero; if (kActorLifeUiPrefab == null) { kActorLifeUiPrefab = (GameObject)Resources.Load("Prefabs/ActorLifeUi", typeof(GameObject)); } if (actor_controller.GetActorType() != ActorController.ActorType.kSoul) {// Life ui life_ui_ = GameObject.Instantiate(kActorLifeUiPrefab).GetComponent <ActorLifeUiController>(); life_ui_.SetTarget(transform); } }
/// <summary> /// 行動処理 /// </summary> /// <param name="actor_controller"></param> public override void Act(ActorController actor_controller) { UpdateInput(); if (actor_controller.GetActorParameter().Life <= 0f || soul_amount_ <= 0f) { return_ = true; } Move(actor_controller); RelyOnTarget(actor_controller); ReturnToSoul(actor_controller); ReduceSoulAmount(actor_controller); }
public override void Init(ActorController actor_controller) { patrol_points_ = GetComponent <PatrolPoints>(); patrol_points_.RecalculatePoints(); animator_ = GetComponentInChildren <Animator>(); wait_counter_ = kWaitTime; var parameter = actor_controller.GetActorParameter(); nav_mesh_agent_ = GetComponent <NavMeshAgent>(); nav_mesh_agent_.speed = parameter.MoveSpeed; nav_mesh_agent_.angularSpeed = parameter.TurnSpeed; nav_mesh_agent_.updatePosition = true; nav_mesh_agent_.updateRotation = true; }
// 移動処理 private void Move(ActorController actor_controller) { float direction_magnitude = direction_.magnitude; if (animator_) { animator_.SetFloat("movement", direction_magnitude); } if (direction_magnitude == 0.0f) { return; } ActorParameter parameter = actor_controller.GetActorParameter(); nav_mesh_agent_.Move(direction_ * parameter.MoveSpeed * speed_rate_ * Time.deltaTime); // 物理演算の時の回転を切ったのため直接にtransformで回転する direction_ = transform.InverseTransformDirection(direction_); var turn_amount = Mathf.Atan2(direction_.x, direction_.z); transform.Rotate(0f, turn_amount * parameter.TurnSpeed * Time.deltaTime, 0f); }