Пример #1
0
    IEnumerator startle()
    {
        var objTransform = GetComponent <Transform>();
        var camera       = Camera.main;
        var lookPosition = new Vector3(camera.transform.position.x, objTransform.position.y, camera.transform.position.z);

        objTransform.LookAt(lookPosition);
        anim.CrossFade("Attack");
        yield return(new WaitForSeconds(anim["Attack"].length));

        spiderMode = SpiderFSM.Backup;
        moveTarget = objTransform.position + objTransform.forward.normalized * -0.1f;
    }
Пример #2
0
    public void UpdateSpider()
    {
        float distance     = (this.transform.position - Camera.main.transform.position).magnitude;
        var   objTransform = GetComponent <Transform>();

        switch (spiderMode)
        {
        case SpiderFSM.Idle:
            moveTarget = objTransform.position;
            if (idleTimer <= 0f)
            {
                spiderMode = SpiderFSM.Wander;
            }
            if (!anim.IsPlaying("Idle"))
            {
                anim.Play("Idle");
            }
            idleTimer -= Time.deltaTime;
            break;

        case SpiderFSM.Wander:
            if (idleTimer <= 0)
            {
                playSound(sounds[Random.Range(0, sounds.Length - 1)]);
                idleTimer = idleTime;
            }
            if (moveTarget == null || objTransform.position == moveTarget)
            {
                moveTarget = new Vector3(Random.Range(-wanderDistance, wanderDistance) + objTransform.position.x, objTransform.position.y, Random.Range(-wanderDistance, wanderDistance) + objTransform.position.z);
            }
            if (!anim.IsPlaying("Walk"))
            {
                anim.CrossFade("Walk");
            }
            float step = Time.deltaTime;
            objTransform.position = Vector3.SmoothDamp(this.transform.position, moveTarget, ref velocity, 2.0f);
            //objTransform.forward = Vector3.RotateTowards(objTransform.forward, moveTarget, step, 0.0f);
            objTransform.rotation = Quaternion.LookRotation(moveTarget);
            break;

        case SpiderFSM.Startle:
            var rand = Random.Range(0, 2);
            switch (rand)
            {
            case 0:
                playSound("dont hurt me");
                break;

            case 1:
                playSound("dont be afraid");
                break;

            case 2:
                playSound("trust");
                break;
            }
            playSound("dont hurt me");
            StartCoroutine("startle");
            if (!anim.IsPlaying("Attack"))
            {
                anim.CrossFade("Attack");
            }
            break;

        case SpiderFSM.Backup:
            if (moveTarget != objTransform.position)
            {
                if (!anim.IsPlaying("Walk"))
                {
                    anim.CrossFade("Walk");
                }
                objTransform.position = Vector3.SmoothDamp(this.transform.position, moveTarget, ref velocity, 1.0f);
                //objTransform.rotation = Quaternion.LookRotation(moveTarget);
            }
            else
            {
                spiderMode = SpiderFSM.Idle;
                idleTimer  = idleTime;
            }
            break;

        case SpiderFSM.Talk:

            break;
        }
        if (soundTimer > 0)
        {
            soundTimer -= Time.deltaTime;
        }
    }
Пример #3
0
 public void backUp()
 {
     spiderMode = SpiderFSM.Startle;
 }
Пример #4
0
 public void deactivateSpider()
 {
     anim.Stop();
     idleTimer  = idleTime;
     spiderMode = SpiderFSM.Static;
 }
Пример #5
0
 public void activateSpider()
 {
     spiderMode = SpiderFSM.Idle;
 }