在做游戏开发中经常会需要到计算扇形的视野或者是受击范围的时候。

其实这个分为两部分,

第一部分是在扇形距离范围内(也就是不考虑角度,其实是圆形范围内)

第二部分是扇形角度范围内

第一部分很简单,Vector3.Distance(a, b);计算距离

下面讲讲第二部分,扇形角度范围内。

计算怪物是否在你的视野范围内其实可以这么看

Avatar的正方向向量与Avatar到Enemy之间向量的夹角大小是否小于于视线大小的一半。

这样就能判断是否在视线范围内。

所以现在的问题就是这么计算这个夹角

计算的方式是,

1.获取Avatar正方向的一个点与Avatar世界坐标相减,获取正方向向量

2.Enemy的世界坐标与Avatar世界坐标相减,获取Enemy到Avatar的方向向量

3.调用Vector3.Angle(a, b)计算夹角

public GameObject avatar;public GameObject enemy;float minDistance = 10f;float minAngle = 120f;// Update is called once per framevoid Update (){Vector3 avatarPos = avatar.transform.position;Vector3 enemyPos = enemy.transform.position;float distance = Vector3.Distance(avatarPos, enemyPos);//主角相对于目标的向量Vector3 srcLocalVect = enemyPos - avatarPos;srcLocalVect.y = 0;//获取主角正前方的一个点Vector3 forwardLocalPos = avatar.transform.forward * 1 + avatarPos;//获取正方向向量Vector3 forwardLocalVect = forwardLocalPos - avatarPos;forwardLocalVect.y = 0;//计算角度float angle = Vector3.Angle(srcLocalVect, forwardLocalVect);if(distance < minDistance && angle < minAngle/2){Debug.LogError("In EyeSight");}}

转载于:https://blog.51cto.com/13638120/2084942

【小松教你手游开发】【unity实用技能】计算目标物体是否在自己的扇形视野范围...相关推荐

  1. mtk 帧同步_【小松教你手游开发】【面试必读(编程基础)】网络游戏同步方式(帧同步和状态同步)...

    在做网络游戏的时候首先要做的是选择一种同步方式来使用,网上的文章都是说帧同步与状态同步的选择,但是又经常讲的模糊不清,我大概整理了一下,并且有一种我们现在项目用的网络同步方式 状态同步 状态同步就有好 ...

  2. 【小松教你手游开发】【unity实用技能】InvalidOperationException: ou

    InvalidOperationException: out of sync 在unity开发中出现这个bug. 在网上查了下是在迭代器中直接修改引起的.c#是不允许你在迭代器中直接修改. 改了一下确 ...

  3. 【小松教你手游开发】【unity实用技能】网游同步技术

    http://www.skywind.me/blog/archives/1343 转自http://www.skywind.me/blog/archives/1343 实时动作游戏在近年来得到迅猛的发 ...

  4. 【小松教你手游开发】【unity实用技能】unity游戏移植到WindowsPhone8平台上的一些...

    最近在移植u3d的游戏到WindowsPhone8上,WindowsPhone有多蛋疼就不说,移植的过程中还各种问题,稍稍总结一下 1.WindowsPhone账号在电脑上注册不要在手机上.手机上我就 ...

  5. 【小松教你手游开发】【unity实用技能】给每个GameObject的打开关闭加上一个渐变...

    在游戏开发中,经常会因为直接将GameObject,setActive的方式打开关闭,这种方式效果太过生硬而给它加上一个Tween 可能是AlphaTween或者ScaleTween. 再加上一个Pl ...

  6. 【小松教你手游开发】【unity实用技能】u3d 层次问题总结

    首先的首先,NGUI区分前后层次关系是用Depth值.已经跟z轴值无关 首先因为我自己用的是NGUI,所以我的u3d层次问题也就是NGUI的层次问题 先确定UI渲染顺序,Camera>UIPan ...

  7. 【小松教你手游开发】【unity实用技能】Unity图片变灰的方式

    http://www.tuicool.com/articles/Vruuqme NGUI中的Button几乎是最常用到的控件之一,并且可以组合各种组件(比如UIButtonColor,UIButton ...

  8. 【小松教你手游开发】【unity系统模块开发】Unity5.5.2UI打包AssetBundle

    之前已经有几篇文章写打包AssetBundle,但毕竟没有实际在项目中写过都写的比较浅. 刚好最近项目更新Unity5.5.2就顺便由我来更新ui打包流程 这里就把这次的经验写一下 这里还是稍微解释一 ...

  9. 【小松教你手游开发】【面试必读(编程基础)】堆和栈的区别(转过无数次的文章)...

    一.预备知识-程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其 操作方式类似于数据结构中的栈 ...

最新文章

  1. 微生物相关网络构建教程中文Microbial association network construction tutorial
  2. 原创 | 工业场景中的预测性维护
  3. Android Studio离线打包5+SDK
  4. es java_JAVA API操作ES详解
  5. Winsock Error Codes
  6. 2进程之间的关系:进程组,会话,守护进程
  7. 分析access.log
  8. mybatis、mybatisplus的常用操作
  9. 视觉SLAM——ORB特征
  10. matlab 怎么使用function,Matlab怎么调用函数 自定义函数使用方法
  11. linux socket tcp程序,Linux下Socket TCP的简单例子
  12. 2022年PMP培训机构如何挑选?哪家好?
  13. GBase 8a 报错gbase_forward_result failed to write result for client
  14. 通达信 移动平均算法_涨停板这样选!首次公开通达信超级选股法使用流程(建议收藏)...
  15. PS-制作燃烧的字体
  16. 腾讯云学生服务器(官网校园计划)
  17. bitnami redmine 4 windows一键式版本安装企业微信插件方法
  18. 深度学习入门-神经网络
  19. 求一个3×3矩阵对角线元素之和。
  20. onchange()事件的应用

热门文章

  1. noip模拟赛 蒜头君的兔子
  2. 搭建 Visual Studio 和 Freeglut、GLEW的OpenGL环境
  3. 在eclipse中使用Lombok
  4. [原创]SQL 表值函数:获取从今天计算起往前自定义天数
  5. Log4j每天、每小时、每分钟定时生成日志文件
  6. linux 搭建 lamp环境搭建,Worktile官方博客,分享企业协作的技巧、工具和实践
  7. POJ3422简单费用流
  8. 操作系统原理第五章:CPU调度
  9. 【Android 逆向】Android 逆向通用工具开发 ( Android 逆向通用工具组成部分 | 各模块间的关联 )
  10. 【错误记录】Android Studio 向 GitHub 提交代码报错 ( Push failed: Failed with error: Could not read from remote )