// Use this for initialization void Start() { go = GameObject.Instantiate(Prefab) as GameObject; runAnimName = RunAnimation.name; standAnimName = StandAnimation.name; if (ScareAnimation != null) { hasScare = true; scareTime = ScareAnimation.clip.length; scareAnimName = ScareAnimation.name; cameraCtrl = Camera.main.GetComponent <CameraControl>(); if (!cameraCtrl) { hasScare = false; } } standbyAnimNames = new string[StandbyAnimations.Length]; for (int i = 0; i < StandbyAnimations.Length; i++) { standbyAnimNames[i] = StandbyAnimations[i].name; } go.GetComponent <Animation>().PlayQueued(standAnimName); go.transform.parent = transform; go.transform.localPosition = Vector3.zero; go.transform.localRotation = Quaternion.identity; points = new List <Vector3>(); points.Add(transform.position); foreach (Transform i in WayPoints) { points.Add(i.position); } state = AnimalStates.Idle; }
protected override void Awake() { base.Awake(); AnimatorTriggers = new Dictionary <AnimalStates, string> { { AnimalStates.Idle, "Idle" }, { AnimalStates.Idle2, "Idle2" }, { AnimalStates.Walk, "Walk" }, { AnimalStates.Run, "Run" }, { AnimalStates.Attack, "Attack" }, { AnimalStates.GetHit, "GetHit" }, { AnimalStates.Death, "Death" } }; CurrentState = AnimalStates.Idle; MiningObjectCollider.enabled = false; }
protected void SetState(AnimalStates state) { CurrentState = state; foreach (var animatorTrigger in AnimatorTriggers) { Animator.ResetTrigger(animatorTrigger.Value); } Animator.SetTrigger(AnimatorTriggers[state]); if (state == AnimalStates.Walk) { speed = WalkSpeed; } else if (state == AnimalStates.Run) { speed = RunSpeed; } }
void Think() { switch (state) { case AnimalStates.Idle: { if (Random.Range(0, 99) < StandByRate) { int idx = Random.Range(0, standbyAnimNames.Length); go.GetComponent <Animation>().CrossFade(standbyAnimNames[idx]); go.GetComponent <Animation>().CrossFadeQueued(standAnimName); } else { if (Random.Range(0, 99) < WalkRate) { int delta = (Random.Range(0, 3) - 1); currentIdx = currentIdx + delta; if (currentIdx < 0) { currentIdx = 0; } if (currentIdx >= points.Count) { currentIdx = points.Count - 1; } Vector3 dst = points[currentIdx]; Quaternion rot = Quaternion.Euler(0, Random.Range(0f, 360f), 0); dst += (rot * Vector3.forward).normalized * Random.Range(0, PathWidth); startPos = transform.position; endPos = dst; startTime = Time.time; state = AnimalStates.Run; go.GetComponent <Animation>().CrossFade(runAnimName); //Vector3.forward } } } break; } }
bool CheckShouldScare() { if (!hasScare) { return(false); } if ((transform.position - cameraCtrl.mLookAt.transform.position).magnitude > ScareRadius) { scareStartTime = Time.time; go.GetComponent <Animation>().CrossFade(scareAnimName); go.GetComponent <Animation>().CrossFadeQueued(standAnimName); state = AnimalStates.Scare; return(true); } else { return(false); } }
void StateUpdate() { switch (state) { case AnimalStates.Idle: { CheckShouldScare(); } break; case AnimalStates.Run: { if (!CheckShouldScare()) { float time = Time.time - startTime; Vector3 dir = (endPos - startPos).normalized; Vector3 tar = go.transform.position + dir; transform.LookAt(tar); transform.position = startPos + (dir * time * WalkSpeed); if ((endPos - transform.position).magnitude < 1) { state = AnimalStates.Idle; go.GetComponent <Animation>().CrossFade(standAnimName); } } } break; case AnimalStates.Scare: { if (Time.time - scareStartTime > scareTime) { state = AnimalStates.Idle; } } break; } }
//------------------------------ // Use this for initialization //------------------------------ void Start() { _currentState = AnimalStates.IDLE; }