Пример #1
0
    // 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;
    }
Пример #2
0
        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;
        }
Пример #3
0
        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;
            }
        }
Пример #4
0
    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;
        }
    }
Пример #5
0
    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);
        }
    }
Пример #6
0
    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;
        }
    }
Пример #7
0
 //------------------------------
 // Use this for initialization
 //------------------------------
 void Start()
 {
     _currentState = AnimalStates.IDLE;
 }