一个简单的敌人自动寻找玩家进行攻击及受到伤害死亡效果实现
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;}
}
一个简单的敌人自动寻找玩家进行攻击及受到伤害死亡效果实现相关推荐
- HTML实现一个简单的图片自动显示特效
一个简单的图片自动显示特效 源代码: <html><head><title>Web</title><link href="https:/ ...
- 通过编程模拟一个简单的饮料自动贩卖机_你喝过自动贩卖的现榨橙汁吗?
日前,关于自动贩卖的现榨橙汁机内部构件是否会污染橙汁一事,深圳和上海两地的监管部门给出了不同的监管意见.这也让该类设备产出的食品是否符合食品安全的标准再度成了坊间热议的问题.在青岛,现榨橙汁机也早已遍 ...
- python编写一个投票选班长_一个简单的Python自动投票
同学在网上帮朋友投票,就简单写了一个,基本上3秒钟一票,这家投票最简单,没有验证码,没有注册用户限制,没有IP限制,三无~!! 本程序需要pam30模块 #---------------------- ...
- 一个简单的中文自动转拼音
import java.util.Scanner; public class ChineseToPinYin {/*** 汉字转拼音缩写* * @param str* 要转换的汉字字符串* @retu ...
- C#游戏编程之创建一个简单的卷轴射击游戏
前几天很多朋友要求贴一篇有关C#游戏开发的实例.本篇文章是创建一个简单的卷轴射击游戏开发实例,内容比较完整,分享给大家,不过篇幅有些长,可以慢慢看哈!本文除CSDN博客外,任何媒体和出版物禁止转载和使 ...
- Android之使用VideoView组件播放一个简单的视频
1.在Android开发中,提供了VideoView组件用来播放视频文件.首先,要使用这个组件来播放视频,必须在布局文件下添加VideoView组件,然后再到Activity里获取这个组件,然后调用这 ...
- 实现敌人(怪物)的简单AI(自动巡逻、看到玩家攻击玩家、玩家离开恢复自动巡逻)
using UnityEngine; using UnityEngine.AI; /// <summary> /// 敌人自动巡逻 /// </summary> publ ...
- unity 敌人自动攻击和寻路_【A*Pathfinding】超级简单的Unity2D寻路
哈喽~我是yumir. 写过俯视角射击和"元气骑士"地图生成之后,不做个敌人AI总觉得差点什么,所以又研究了一下Unity的2D寻路. 这次我用的是A*Pathfinding的免费 ...
- 【UE4】模仿《黑暗之魂》系列游戏制作一个简单的锁定敌人的功能
这是我拆解游戏项目的CameraSystem做出的一点点小总结,然后写了一个非常非常简单的锁定敌人的功能: 第一步:设置敌人属性,标志为可被锁定 创建一个敌人蓝图,随便搞个模型进去 创建一个接口蓝图, ...
最新文章
- 深耕大数据“试验田” 发掘新经济“钻石矿”
- php时间函数 1天,PHP函数第20款:两个时间相差的天数SubTime,不满1天按1天算
- React Native 之 网络请求 fetch
- wps linux32位不兼容,WPS for Linux版问题所在_服务器评测与技术-中关村在线
- JetBrains —— JetBrains系列IDE优化配置(提高启动和运行速度)
- 排名前16的Java工具类
- HandleExternalEventActivity
- tcpprep man 手册翻译
- (转)从Fintech到Techfin,未来十年有九大重要挑战
- 【CF1333C】Eugene and an array(子区间计数)
- 手工纸盒子_折纸盒与纸盒子的折法手工制作图解教程大全 - 纸艺网
- SQL练习题:变更性别
- 十大算法简单介绍以及例题
- Java项目:人才管理系统(java+SpringBoot+FreeMarker+jpa+Mysql)
- RCF--RPC(远程调用框架)
- 有三种钱,你花得越多,赚得越多!
- Linux--问题1--从用户态进入内核态
- 如何善用家中闲置的带宽资源赚钱(2020版)
- Windows服务应用程序
- vue进阶测试——生命周期和异步加载的微妙关系