// Use this for initialization void Start() { this.gameObject.animation.Play("BeeAnimRun00"); nowState = HornetAIState.Aproach; if (Player == null) { nowLine = (int)(Random.value * (DataBase.Lines.Length - 0.01f)); LineTarget = DataBase.Lines[nowLine]; Player = DataBase.Player; FaceForward = DataBase.FaceForward; nowState = HornetAIState.Appear; } IntervalTime = Time.time + 0.5f + Random.value * 0.9f; Timer = 0.0f; LMMV = 0.0f; randPos = new Vector3( (Random.value - 0.5f) * 1.7f, (Random.value - 0.2f) * 0.8f, (Random.value - 0.5f) * 1.3f ); #if false LineTarget.position = LineTarget.position + LineTarget.right * randPos.x + LineTarget.up * randPos.y + LineTarget.forward * randPos.z; #else LineTargetPos = LineTarget.position + LineTarget.right * randPos.x + LineTarget.up * randPos.y + LineTarget.forward * randPos.z; #endif burningS = this.transform.GetComponentInChildren <ObjectBurning>(); AudioSource AS = GetComponent <AudioSource>(); if (AS != null) { AS.pitch = (Random.value - 0.5f) - 0.5f; } modelAnim = this.transform.GetComponentInChildren <ModelAnimation>(); RenderMat = GetComponentInChildren <SkinnedMeshRenderer>().materials; }
// Update is called once per frame void Update() { PlayerLookAt(); #if false AproachPlayer(); if (transform.position.y < -12.0f) { Destroy(this.gameObject); } //if (Time.time > 5.0f) if (burningS != null) burningS.BurnObject(); #else switch (nowState) { case HornetAIState.Appear: AproachPlayer(); burningS.Count = LifeMax; if (Time.time > IntervalTime) { nowState = HornetAIState.InitMove; } break; case HornetAIState.InitMove: burningS.Count = LifeMax; if (LineMove(0.02f)) { nowState = HornetAIState.Aproach; NextLineSet(); //animation.CrossFade("BeeAnimIdle00"); } //AproachPlayer(); break; case HornetAIState.Aproach: if (burningS.burning) { nowState = HornetAIState.Burn; } if (Time.time > IntervalTime) { nowState = HornetAIState.Move; } AproachPlayer(); if (Distans3(this.transform.position, Player.transform.position, 1.0f)) { nowState = HornetAIState.FollowForward; animation.CrossFade("BeeAnimIdle00"); Player = DataBase.CameraLookAt; } break; case HornetAIState.Move: if (burningS.burning) { nowState = HornetAIState.Burn; //modelAnim.SetAnimDead(); } if (LineMove(0.02f)) { nowState = HornetAIState.Aproach; NextLineSet(); } break; case HornetAIState.FollowForward: if (FaceFollowing()) { nowState = HornetAIState.Speer; if (modelAnim != null) { modelAnim.SetAnimSpeer(); } Timer = Time.time + 0.55f; IntervalTime = Time.time + 1.3f; } break; case HornetAIState.Burn: Timer = Time.time + 15.0f; IntervalTime = Time.time + 6.0f; animation.CrossFade("BeeAnimIdle00"); if (modelAnim != null) { modelAnim.SetAnimDead(); } //transform.GetChild(0).rigidbody.useGravity = true; transform.rigidbody.useGravity = true; transform.rigidbody.constraints = new RigidbodyConstraints(); //transform.GetChild(0).rigidbody.isKinematic = false; //transform.GetChild(0).rigidbody.AddTorque(-0.1f,0.0f,0.0f,ForceMode.VelocityChange); nowState = HornetAIState.Dead; if (RenderMat != null) { foreach (Material rm in RenderMat) { rm.color = Color.black; } } break; case HornetAIState.Dead: if (Time.time > IntervalTime) { burningS.RemoveBurn(); #if false MeshRenderer[] MR = GetComponentsInChildren <MeshRenderer>(); foreach (MeshRenderer mr in MR) { mr.enabled = false; } #else SkinnedMeshRenderer[] SMR = GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (SkinnedMeshRenderer smr in SMR) { smr.enabled = false; } #endif } else { #if false if (RenderMat != null) { foreach (Material rm in RenderMat) { rm.color = Color.black; } } #endif } if (Time.time > Timer) { Destroy(this.gameObject); } break; case HornetAIState.Speer: if (Time.time > Timer) { DamageEffect.getInstance.SetEffect(); Timer = Time.time + 30.0f; } if (Time.time > IntervalTime) { nowState = HornetAIState.GoAway; } break; case HornetAIState.GoAway: GoAway(); break; default: break; } #endif }