游戏开发记录--敌人追寻玩家

  • 第一种,玩家出现在敌人的视野内
  • 第二种,玩家的声音被敌人所“听到”
  • 第三种,玩家进入敌人的圆形侦测范围内

今天开始记录自己游戏开发的过程,算是自己的一个笔记吧。

首先让敌人追寻玩家的方法有三种。

第一种,玩家出现在敌人的视野内

简单的来说,就是当敌人“看见”玩家的时候(玩家出现在敌人的视野内),让敌人开始靠近玩家。

这种情况得先在敌人身上绑定一个摄像机,然后当摄像机内出现玩家,且出现的范围比较大的时候,让敌人开始追寻玩家。


(具体在unity中的体现,α为摄像机与玩家之间的夹角)
当α角大于摄像机视野角的一半的时候,就认为敌人看到了玩家,并且进行追寻。

第二种,玩家的声音被敌人所“听到”

这种我在unity中不好表示出来,我画图出来表示

第三种,玩家进入敌人的圆形侦测范围内


给敌人身上挂一个shere,然后取消掉Mesh Renderer组件,在OnTriggerEnter(Collider other)函数内进行判断和让敌人进行追寻

具体的实现代码片段如下

using UnityEngine;
using System.Collections;
using UnityEngine.AI;public class EnemySight : MonoBehaviour {private float seeAngle=120;//敌人视野角度
private bool isSeePlay = false;private Vector3 lastPos;// 玩家的最后位置private Vector3 alermPos=Vector3.zero; //警报位置   private Animator anim;  //主角动画,作用是判断玩家是否在运动private SphereCollidersphereCollider;//敌人身上的碰撞器,该碰撞器是用来触发检测主角是否在敌人可见,可听范围内private NavMeshAgentnavMeshAgent; //AI组件  void Awake(){anim = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<Animator>();lastPos = GameController._instance.lastPlayerPostion;navMeshAgent = GetComponent<NavMeshAgent>();}void Update(){//同步主角位置if (lastPos != GameController._instance.lastPlayerPostion)//触发警报后玩家位置改变{alermPos = GameController._instance.lastPlayerPostion; //更新警报位置lastPos = GameController._instance.lastPlayerPostion;}}void OnTriggleStay(Collider other){if (other.tag==Tags.player){//看玩家Vector3 startDir = transform.forward;//敌人开始朝向Vector3 currDir = other.transform.position - transform.position; //敌人看向玩家的向量float angle = Vector3.Angle(startDir, currDir);//敌人开始朝向与看见玩家朝向的夹角if (angle <seeAngle * 0.5f) //视野角度一半以内可见{//主角在敌人的视野之内isSeePlay = true;alermPos = other.transform.position;//把玩家的位置设置为警报位置GameController._instance.SeePlayer(other.transform);}else{isSeePlay = false;}//听脚步声音if (anim.GetCurrentAnimatorStateInfo(0).IsName("Locomotion"))//如果玩家在运动{NavMeshPath path = new NavMeshPath();if (navMeshAgent.CalculatePath(other.transform.position, path)){Vector3[] wayPoints = new Vector3[path.corners.Length+2];wayPoints[0] = transform.position;wayPoints[wayPoints.Length - 1] = other.transform.position;for (inti = 0; i<path.corners.Length; i++){wayPoints[i + 1] = path.corners[i];  }float length = 0;for (inti = 1; i<wayPoints.Length; i++){length += (wayPoints[i] - wayPoints[i - 1]).magnitude; //所有节点连接的折线的总长度}if (length <= sphereCollider.radius) //在听力范围内{alermPos = other.transform.position;}}}}}void OnTriggleExit(Collider other){if (other.tag == Tags.player){isSeePlay = false;}}

上面是前两种“看”和“听”所实现的代码

下面是实现进入到侦测范围的实现方法,部分内容与上面代码相似,这里仅显示思路和部分代码片段。

private void OnTriggerEnter(Collider other){if(other.tag == "Tag.Player"){//看玩家Vector3 startDir = transform.forward;//敌人开始朝向isSeePlay = true;alermPos = other.transform.position;//把玩家的位置设置为警报位置GameController._instance.SeePlayer(other.transform);}else{isSeePlay = false;}}

最后,如果感兴趣的话,还可以加入我的技术交流小窝:1140238314

游戏开发记录--敌人追寻玩家相关推荐

  1. 2021.03.17 pokémon小游戏开发记录与周总结

    2021.03.17 pokémon小游戏开发记录与周总结 此篇仅包含部分项目代码,只是个人的学习总结. 文章目录 2021.03.17 pokémon小游戏开发记录与周总结 前言 一.前期准备 二. ...

  2. 《射击游戏》游戏开发记录

    游戏开发的学习记录⑥ 项目:射击游戏 开始时间:2022.9.29 (已经结束很久了,一直忘了写,补一下) 新学到的: 做小地图,用来看自己和敌人的位置 //获得屏幕分辨率比率 float ratio ...

  3. 【Android游戏开发十七】让玩家自定义手势玩转Android游戏!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/340.html   ...

  4. 【Android游戏开发十七】让玩家自定义手势玩转Android游戏!—Android Gesture之【输入法手势技术】...

    为什么80%的码农都做不了架构师?>>>     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigam ...

  5. 《Happy Birthday》游戏开发记录(送给朋友的小礼物)

    游戏开发的学习记录⑦ 项目:Happy Birthday (一个小小小游戏,基于unity给朋友做的一个生日小礼物

  6. 【Android游戏开发十七】让玩家自定义手势玩转Android游戏!—Android Gesture之【输入法手势技术】

    Himi  原创, 欢迎转载,转载请在明显处注明! 谢谢. 原文地址:http://blog.csdn.net/xiaominghimi/archive/2011/01/14/6137136.aspx ...

  7. 《捕鱼达人》游戏开发记录

    游戏开发的学习记录④ 项目:捕鱼达人 开始时间:2022.09.01 (新的学期,好好学习!!) 新学到的: 水波荡漾效果的制作 Legacy Shaders->Particles->Ad ...

  8. 麻将游戏开发运营站在玩家角度考虑问题 切勿夸大宣传

    很多投资者麻将棋牌游戏开发完成后,不懂的如何去正确运营,以为只要有一款游戏,后期推广只要大幅度投钱做广告,就会有流量有下载,进而带来盈利.殊不知,这也是一种简单的想法,在这个快速消费的时代,大众的个性 ...

  9. 农场游戏开发记录十五

    农场游戏开发第三周开始了,也是开始控制台交互部分的开发.开始觉得挺没头绪的,因为能想到菜单跳来跳去,不知道该怎么跳.后来想到一个办法,主体用while(true)控制,再每个小部分写一个独立的方法,符 ...

  10. 农场游戏开发记录十七(控制台版本完成)

    今天,已过12点应该是昨天,终于把控制台版本的农场游戏开发完成了.说是开发有点厚脸皮,因为我自己确实没写过这么成体系的代码.成就感还是挺充足的.代码就不在这里放了,另外上传.这里放一点运行时的截图吧.

最新文章

  1. socks5协议RFC文档
  2. 实战SSM_O2O商铺_27【商品类别】删除商品类别从Dao到View层的开发
  3. 【PM模块】外包服务、工作清场管理、预防性维护
  4. matlab制作打地鼠游戏,scratch编程制作打地鼠的游戏教程
  5. 平安夜海报PNG免扣素材来了,全都在这|搜图114
  6. 基于Jenkins 快速搭建持续集成环境
  7. 2019Java查漏补缺(二)
  8. 线程池ThreadPoolExecutor使用
  9. MATLAB实现频数直方图——hist的使用
  10. Atitit 微服务 分布式 区别 微服务的判断标准 目录 1.1. 区别 微服务侧重于微小服务进程隔离级别,分布式侧重于机器隔离 1 2. 微服务是一种架构, 。多微才叫微? 1 2.1. 微服务
  11. linux efi分区安装grub2,GitHub - beatfan/UEFI_grub2: uefi 版本 grub2,可以引导多系统,以及linux的安装...
  12. 2020大一下暑期实习--funcode游戏设计
  13. 公众号数据分析总结怎么做?教你玩转公众号后台数据
  14. hdu 6184 三元环数目
  15. 彩虹网盘外链程序源码V5.1|网盘外链源码
  16. 【IoT】电子产品如何做防静电 ESD 设计
  17. Qt示例解析 【Callout】
  18. python全栈构图_Python全栈 Web(边框、盒模型、背景)
  19. 如何用echarts组件制作图表
  20. 计算机里的word怎么重装,word能卸载重装吗 word卸载重装

热门文章

  1. 一阶微分方程解的存在定理
  2. 学计算机高中应选什么科目,新高考选哪些科目可以报计算机?高中生如何进步?...
  3. Android Studio 使用技巧
  4. html+css基础教程学习之css连接
  5. JAVA将图片背景色设置为透明
  6. C/C++试题集——字符串篇
  7. leetcode刷题java之739. 每日温度
  8. 蝴蝶效应、青蛙现象、鳄鱼法则、鲇鱼效应…… 好多新名词 :)
  9. linux搜狗输入法皮肤,Ubuntu 12.04下安装搜狗拼音 + 安装搜狗皮肤
  10. 美国出台最严技术出口管制!14项前沿科技面临封锁