using System.Collections;
using System.Collections.Generic;
using System.Runtime.Remoting;
using UnityEngine;
using UnityEngine.AI;public class ZombieAI : MonoBehaviour
{//动画状态机组件private Animator Animator;//导航网格private NavMeshAgent NavMeshAgent;//移动速度public float MoveSpeed;//丧尸生命值public float ZombieHealth;//伤害值public float Damage;//是否存活public bool Alive;//目标对象public GameObject Target;//攻击范围public float AttackRanage;//攻击时间private float AttackTime;private float NextAttackTime;//获取玩家对象及玩家血量public GameObject Player;public float PlayerHealth;// Use this for initializationvoid Start (){//初始化变量//MoveSpeed = NavMeshAgent.speed;MoveSpeed = 1.0f;Alive = true;ZombieHealth = 50.0f;Damage = 20.0f;AttackRanage = 1.0f;AttackTime = 2.0f;Animator = GetComponent<Animator>();NavMeshAgent = GetComponent<NavMeshAgent>();Player = GameObject.FindWithTag("Player");Target = GameObject.FindWithTag("Player");}// Update is called once per framevoid Update (){PlayerHealth = Player.GetComponent<Steam_VR_PlayerCharacter>().Health;//动画状态机信息AnimatorStateInfo _animatorInfo;_animatorInfo = Animator.GetCurrentAnimatorStateInfo(0);if (Alive == true){if (Target != null){NavMeshAgent.destination = Target.transform.position;Animator.SetBool("Walk", true);//当敌人接近玩家并且进入到可攻击距离时进行攻击if (Vector3.Distance(Player.transform.position, this.transform.position) < AttackRanage){NavMeshAgent.Stop();//transform.LookAt(Target.transform);Animator.SetBool("Walk", false);Animator.SetBool("Attack", true);}//播放攻击动画后对玩家造成伤害if ((_animatorInfo.normalizedTime > 1 && _animatorInfo.IsName("Base Layer.Attack"))){Animator.SetBool("Attack", false);if (NextAttackTime < Time.time){NextAttackTime = Time.time + AttackTime;PlayerHealth = PlayerHealth - Damage;Player.GetComponent<Steam_VR_PlayerCharacter>().SendMessageUpwards("Damage", Damage);if (PlayerHealth < 0)PlayerHealth = 0;//通过外部设置玩家血量Player.GetComponent<Steam_VR_PlayerCharacter>().SetHealth(PlayerHealth);print(PlayerHealth);}                   }}}//敌人血量为0时死亡if (ZombieHealth <= 0){Alive = false;Animator.SetBool("Die", true);NavMeshAgent.Stop();Destroy(GetComponent<CapsuleCollider>());StartCoroutine(ZombieDie());}if ((_animatorInfo.normalizedTime > 1 && _animatorInfo.IsName("Base Layer.hit"))){Animator.SetBool("Hit", false);}if (ZombieHealth <= 0)ZombieHealth = 0;}//死亡后销毁游戏对象IEnumerator ZombieDie(){yield return new WaitForSeconds(5.0f);Destroy(this.gameObject);//ZombieHealth = 50;}//受到子弹撞击时减少血量void OnCollisionEnter(Collision other){if (other.gameObject.tag == "Bullet"){ZombieHealth -= 10;Animator.SetBool("Hit", true);}else{Animator.SetBool("Hit", false);}}//允许外部设置zombie血量public void SetZombieHealth(float ZombieHealth){this.ZombieHealth = ZombieHealth;}
}

一个简单的敌人自动寻找玩家进行攻击及受到伤害死亡效果实现相关推荐

  1. HTML实现一个简单的图片自动显示特效

    一个简单的图片自动显示特效 源代码: <html><head><title>Web</title><link href="https:/ ...

  2. 通过编程模拟一个简单的饮料自动贩卖机_你喝过自动贩卖的现榨橙汁吗?

    日前,关于自动贩卖的现榨橙汁机内部构件是否会污染橙汁一事,深圳和上海两地的监管部门给出了不同的监管意见.这也让该类设备产出的食品是否符合食品安全的标准再度成了坊间热议的问题.在青岛,现榨橙汁机也早已遍 ...

  3. python编写一个投票选班长_一个简单的Python自动投票

    同学在网上帮朋友投票,就简单写了一个,基本上3秒钟一票,这家投票最简单,没有验证码,没有注册用户限制,没有IP限制,三无~!! 本程序需要pam30模块 #---------------------- ...

  4. 一个简单的中文自动转拼音

    import java.util.Scanner; public class ChineseToPinYin {/*** 汉字转拼音缩写* * @param str* 要转换的汉字字符串* @retu ...

  5. C#游戏编程之创建一个简单的卷轴射击游戏

    前几天很多朋友要求贴一篇有关C#游戏开发的实例.本篇文章是创建一个简单的卷轴射击游戏开发实例,内容比较完整,分享给大家,不过篇幅有些长,可以慢慢看哈!本文除CSDN博客外,任何媒体和出版物禁止转载和使 ...

  6. Android之使用VideoView组件播放一个简单的视频

    1.在Android开发中,提供了VideoView组件用来播放视频文件.首先,要使用这个组件来播放视频,必须在布局文件下添加VideoView组件,然后再到Activity里获取这个组件,然后调用这 ...

  7. 实现敌人(怪物)的简单AI(自动巡逻、看到玩家攻击玩家、玩家离开恢复自动巡逻)

     using UnityEngine; using UnityEngine.AI; /// <summary> /// 敌人自动巡逻 /// </summary> publ ...

  8. unity 敌人自动攻击和寻路_【A*Pathfinding】超级简单的Unity2D寻路

    哈喽~我是yumir. 写过俯视角射击和"元气骑士"地图生成之后,不做个敌人AI总觉得差点什么,所以又研究了一下Unity的2D寻路. 这次我用的是A*Pathfinding的免费 ...

  9. 【UE4】模仿《黑暗之魂》系列游戏制作一个简单的锁定敌人的功能

    这是我拆解游戏项目的CameraSystem做出的一点点小总结,然后写了一个非常非常简单的锁定敌人的功能: 第一步:设置敌人属性,标志为可被锁定 创建一个敌人蓝图,随便搞个模型进去 创建一个接口蓝图, ...

最新文章

  1. python画完图 程序暂停运行_[Python实战]你也能写的计时器程序
  2. VTK:相互作用之TrackballCamera
  3. 无法获得锁 /var/lib/dpkg/lock
  4. 如何在 ASP.Net Core 中使用 File Providers
  5. “已使用指定的进程(“Web Management Service”)连接到远程计算机,但未能验证服务器的证书”的解决方案
  6. 安卓案例:标签页演示
  7. iPhone 12“概念视频”曝光:被恶搞的太惨了
  8. 同一个目录下html页面跳转,webpack打包多页应用,如何处理不同html页面(通过a标签)之间的跳转?...
  9. 计算机网络知识点总结谢,《计算机网络基础》复习提纲_谢(5)版-课堂教案
  10. 在Content provider实现中使用SQLiteOpenHelper
  11. LeetCode-C#实现-链表(#19/21/141/206/707/876)
  12. Windows和Linux DNS Cache清理
  13. 双态运维联盟(BOA)正式成立
  14. ensp vlan 划分
  15. 一个美国人在上海-American McGee
  16. 使用FlashFXP连接Linux乱码问题
  17. windows计算机操作题,计算机等级考试Windows操作题
  18. Word分栏出现空白怎么解决
  19. mysql数据库所有表合并_mysql数据库如何将表合并我从数据库中倒出表导出后是这样的b 爱问知识人...
  20. 在电脑上剪辑视频用什么软件 如何在电脑上剪辑视频

热门文章

  1. 仿新浪微博返回顶部的js实现(jQuery/MooTools)
  2. **统计出现字数最多的字符**
  3. 最简单的P2P加密聊天软件开发准备
  4. LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本
  5. Could NOT find Vulkan (missing: Vulkan_LIBRARY Vulkan_INCLUDE_DIR) | 解压安装
  6. ChaosBlade:混沌工程简介(一)
  7. 8583报文格式介绍
  8. 学安卓开发需要php,安卓后台开发需要学习什么?
  9. 荣耀80Pro直屏版和荣耀80Pro区别?
  10. 计算机数字怎么转换成文本,怎么把数字转换成文本