您的位置:首页 > 移动开发 > Unity3D

Unity 怪物巡逻并攻击玩家C#代码笔记

2017-06-09 14:17 1026 查看
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class BringEnemyScript : MonoBehaviour {

    public GameObject[] GoOnPatrolPoint;
    NavMeshAgent enemynavmeshagent;
    int count=1;
    Animator EnemyAnimator;
    bool startoroutine;
    GameObject distance;
    Vector3 distancePosition;
    bool IsAttack;

    // Use this for initialization
    void Start () {

        EnemyAnimator = GetComponent<Animator> ();
        enemynavmeshagent= GetComponent<NavMeshAgent> ();
        enemynavmeshagent.destination = GoOnPatrolPoint[0].transform.position;

    }
    
    // Update is called once per frame
    void Update () {

        Collider[] Players= Physics.OverlapSphere (this.transform.position, 9);

        if(Players!=null){
            foreach( Collider _AttackPlayer in Players){
                if (_AttackPlayer.name != "humanoid_dying") {
                    IsAttack = false;
                    continue;
                } 
                if (_AttackPlayer.name == "humanoid_dying") <
d6b6
span style="color:#333333;">{
                    IsAttack = true;
                    StopCoroutine ("ChangeDestination");
                    distance = _AttackPlayer.gameObject;
                    this.transform.LookAt (distance.transform.position);
                } 
                if((_AttackPlayer.transform.position-this.transform.position).magnitude<1){
                    EnemyAnimator.SetBool ("Attack",true);
                }
                EnemyAnimator.SetBool ("ToRun",true);
                enemynavmeshagent.destination=_AttackPlayer.transform.position;
            }
            if(enemynavmeshagent.remainingDistance==0&&startoroutine==false){
                StartCoroutine ("ChangeDestination");
            }
            if(distance!=null&&(distance.transform.position - this.transform.position).magnitude >= 10&&!IsAttack){
                EnemyAnimator.SetBool ("ToRun",false);
                EnemyAnimator.SetBool ("Attack",false);
                enemynavmeshagent.destination = distancePosition;
            }
        }
    }

    IEnumerator ChangeDestination(){
        startoroutine = true;
        EnemyAnimator.SetTrigger ("Idle");
    
        yield return  new WaitForSeconds (EnemyAnimator.GetCurrentAnimatorStateInfo(0).length); 

        this.transform.Rotate(Vector3.Lerp(new Vector3(0,0,0),new Vector3(0,180,0),0.3f));
        enemynavmeshagent.destination = GoOnPatrolPoint[count%GoOnPatrolPoint.Length].transform.position;
        count++;
        distancePosition = enemynavmeshagent.destination;
        startoroutine = false;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: