如何做网站规范网站升级中

pingmian/2026/1/24 1:31:09/文章来源:
如何做网站规范,网站升级中,wordpress gzip压缩,电商网站后台建设问题前言 在很多第一人称或者第三人称射击游戏的单人模式中#xff0c;玩家的乐趣往往来源于和各式各样的AI敌人的战斗。而战斗的爆发很多时候是因为这些AI在“看见”玩家后就会立即做出反应#xff0c;比如开火、呼叫同伴、躲藏或者逃跑等。 所以这些AI到底是如何探测#xff0…前言 在很多第一人称或者第三人称射击游戏的单人模式中玩家的乐趣往往来源于和各式各样的AI敌人的战斗。而战斗的爆发很多时候是因为这些AI在“看见”玩家后就会立即做出反应比如开火、呼叫同伴、躲藏或者逃跑等。 所以这些AI到底是如何探测或者说”看到“玩家位置的 别人的例子 参考了知乎 给猫看的游戏AI实战二视觉感知初步 这篇文章。 这篇文章中原作者让玩家站在敌人的角度来探测目标它通过向正前方一定扇形区域发射一堆射线来探测目标的位置如下图  这种方法虽然实现起来比较简单但它主要有两个弊端 1.同一时间内发射大量的射线对游戏本身的优化来说很不好容易造成卡顿。 2.如果要探测的物体比较小甚至比两条射线之间的间隔还小那么射线是无法探测到这个物体的。 另一种解决思路 原文的评论中有人提到可以基于探测者自身构建一个球体来探测周围的物体。 因此我们可以用Unity自带的Sphere触发器或者Physics里的OverLaps来构建一个球体探测区域如下图  这里我用的是Overlaps代码如下: 玩家即探测者 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Player : MonoBehaviour {public float moveSpeed; //移动速度public float EyeViewDistance; //视野距离public float viewAngle 120f; //视野角度private Rigidbody rb;private Collider[] SpottedEnemies; //附近的敌人// Use this for initializationvoid Start () {rb GetComponentRigidbody();}private void FixedUpdate(){DetectEnemy();}// Update is called once per framevoid Update (){//AutoMove();MoveAndTurn();Debug.DrawLine(transform.position, transform.forward * 100, Color.red); //红色射线面对的方向}void AutoMove() //向面对的方向自动移动{transform.position transform.forward * moveSpeed * Time.deltaTime;}void MoveAndTurn() //玩家移动{Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hitInfo new RaycastHit();//shoot a ray from cam to mouse position which is only detected by gameobject with Plane layer.Physics.Raycast(ray, out hitInfo, 100, LayerMask.GetMask(Plane));if (hitInfo.collider ! null){transform.LookAt(new Vector3(hitInfo.point.x, transform.position.y, hitInfo.point.z));}rb.velocity new Vector3(Input.GetAxisRaw(Horizontal), 0, Input.GetAxisRaw(Vertical)).normalized * moveSpeed;}void DetectEnemy() //探测敌人{//OverlapSphere内的敌人SpottedEnemies Physics.OverlapSphere(transform.position, EyeViewDistance, LayerMask.GetMask(Enemy));for(int i 0;i SpottedEnemies.Length;i) //检测每一个敌人是否在视野区中{Vector3 EnemyPosition SpottedEnemies[i].transform.position; //敌人的位置//Debug.Log(transform.forward 面对的方向);//Debug.Log(夹角为: Vector3.Angle(transform.forward, EnemyPosition - transform.position)); Debug.DrawRay(transform.position, EnemyPosition - transform.position, Color.yellow); //玩家位置到敌人位置的向量if (Vector3.Angle(transform.forward, EnemyPosition - transform.position) viewAngle/2) //这个敌人是否在视野内{//如果在视野内RaycastHit info new RaycastHit();int layermask LayerMask.GetMask(Enemy, Obstacles); //指定射线碰撞的对象Physics.Raycast(transform.position, EnemyPosition - transform.position, out info,EyeViewDistance,layermask); //向敌人位置发射射线Debug.Log(info.collider.gameObject.name);if(info.collider SpottedEnemies[i]) //如果途中无其他障碍物那么射线就会碰撞到敌人{DiscoveredEnemy(SpottedEnemies[i]);}}}}void DiscoveredEnemy(Collider Enemy) //发现敌人{//Do somethingDebug.Log(发现敌军: Enemy.gameObject.name);Enemy.GetComponentEnemy().BeDiscovered();} } SpottedEnemies是一个Collider数组我用它来保存这一帧当中处于OverlapSphere形成的球体区域的所有敌人对象,LayerMask可以让Overlaps的球体只和指定layer的对象发生交互。然后计算玩家面对的方向和探测到的目标方向的夹角Vector3.Angle(transform.forward, EnemyPosition - transform.position),如下图 forwar向量代表玩家面朝的方向,v1代表探测到的物体相对于玩家位置的方向红色扇形区域代表玩家的视野范围。那么计算这两个向量的夹角然后判断下这个夹角是否小于扇形区夹角的一半即探测目标是否在玩家视野内就行了。如果夹角小于视野夹角的一半那么我们再向目标位置发射一根射线然后看下射线碰撞到的物体是否是目标对象就行因为如果玩家和目标之间有障碍物的话那么射线是会被障碍物挡下来的也就是说玩家的视野被障碍物遮挡了。 Enemy,被探测的目标 这里设定被探测的目标脱离玩家视野一定时间后重新进入隐形状态。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Enemy : MonoBehaviour {public float HideCoolDown 0.3f; //隐藏自己的冷却时间public float AppearTime; //最后一次被发现的时刻private MeshRenderer mr;// Use this for initializationvoid Awake(){mr GetComponentMeshRenderer();}private void Start(){mr.enabled false;}// Update is called once per framevoid Update (){if (Time.time - AppearTime HideCoolDown) return;if (mr.enabled)mr.enabled false;}public void BeDiscovered() //被发现了{mr.enabled true;AppearTime Time.time;} } 最后实现的效果图如下: 这种方法就不用发射大量的射线而且只会对进入球形探测区域且处于视野范围内的物体发射射线并且也避免了小物体无法被探测的bug。   参考资料 知乎U3d开发中大部分事件都是用数学进行计算判定的吗 最高票答案  作者Meta42 猫看的游戏AI实战二视觉感知初步    作者马遥转载于:https://www.cnblogs.com/0kk470/p/7667655.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么做不了自己的网站y-m-d WordPress

AttributeError: ‘set’ object has no attribute ‘items’ 出现这个问题,原因可能是定义的header有问题 正确如下: header{“key”:“value”} 如果是直接在请求数据中复制,很有可能会忽略键和值的冒号。

电商的网站开发订单返利功能湖南外贸网站建设

文章目录一、前置准备1. 技术选型2. 创建vue项目二、Rem 布局适配2.1. px转rem2.2. 设置 rem 基准值2.3. 配置vue.config.js2.4. 重置样式表2.5. 配置样式表2.6. 安装less2.7. 注册less2.8. 代码中使用三、vant安装/配置/测试3.1. 安装vant-ui3.2. 引入与注册3.3. vant测试四、…

网站开发平面设计师岗位要求关键词推广和定向推广

简介: K8s 取其精华去其糟粕,是我们程序员应该做的事情。 K8s设计模式 Kubernetes是一个具有普遍意义的容器编排工具,它提供了一套基于容器构建分布式系统的基础依赖,其意义等同于Linux在操作系统中的地位,可以认为是…

创业网站怎么做域名注册哪个好

正常情况下是没有手机上画电子围栏的,公共平台上我也没找到,所以走了一个歪点子,就是给地图添加点击事件,记录点的位置,在画到电子围栏上就是添加电子围栏了,如果只是显示电子围栏就简单了 一、多边形电子…

购物网站开发所用技术台州网站建设方案咨询

数组结构赋值 let [a,b][1,2] //交换两个变量的值 let[a,b][b,a] //扩展运算符的运用 let[a,...b][1,2,3]  //有默认值 右侧的参数等于undefined,默认值生效 let[a3,b][1,2] 对象结构赋值 let {a:a,b:b}{a:1,b:2};let {a,b}{a:1,b:2}let{a,...b}{a:1,b:2,c:3}

行政审批网站建设规范软件开发3000人天报价标准

这三点是webpack优化策略的一部分,具体解释如下: 优化正则匹配(Test):在webpack的配置中,test属性是一个正则表达式,用于匹配需要应用该loader的文件的扩展名。在您提供的代码中,te…

网站制作学校要的相城区公司网站建设

0:前言 🪧 什么情况需要数据库? 1 大规模的数据需要处理(比如上千上万的数据量)2 需要把数据信息存储起来,无论是本地还是服务上,而不是断电后数据信息就消失了。 如果不是上面的原因化,一般…

做网站会遇到哪些问题宁波网站建设i sp.net

通过编程实现PDF转PPT的功能,可以自动化转换过程,减少手动操作的工作量,并根据需要进行批量转换。将PDF文件转换为PPT文档后,可以利用PPT的丰富功能和动画效果,达到更好的演示效果。 在Java中,我们可以使用…

网站后端技术有哪些网站开发设计怎么找客户

Netty的ChannelFuture在Netty中的所有的I/O操作都是异步执行的,这就意味着任何一个I/O操作会立刻返回,不保证在调用结束的时候操作会执行完成。因此,会返回一个ChannelFuture的实例,通过这个实例可以获取当前I/O操作的状态。Chann…

信息管理系统网站开发教程江苏省建设招标网站

场景是这样,假设有一台设备会触发类型为Alarm的告警信号,并把信号添加到一个Queue结构中,每隔一段时间这个Queue会被遍历检查,其中的每个Alarm都会调用一个相应的处理方法。问题在于,检查机制是基于多线程的&#xff0…

龙岗网站建设网站制作微信官方网站怎么进入

一、学习目标 了解如何在图片中加入文字了解如何使用鼠标进行图像绘制 二、了解如何通过鼠标进行图像绘制 2.1 了解putText方法的使用 putText方法接收图像,文字内容, 坐标 ,字体,大小,颜色,字体厚度这…

网站开发毕设设计论文建设网站的

作者 | 小枣君来源 | 鲜枣课堂2021年,全球5G网络建设和发展取得了不俗的成绩。根据GSA于8月发布的数据,已有70多个国家及地区的超过175家运营商,推出了5G商用服务。还有285家运营商,正在投资部署5G。中国的5G建设步伐,…

南阳网站建设价格wordpress custom post type

过去的二三年中,我一直关注的是机器翻译API在自动化翻译过程中的应用,包括采用CAT工具和Python编程语言来调用机器翻译API,然后再进行译后编辑,从而达到快速翻译的目的。 然而,我发现随着人工智能的发展,很…

网站怎么做301重定向农村电商平台开发

在前面的系列博文中,我们陆续应用实践开发了很多有趣的项目,但是在密集排布场景下如商超购物场所内货架上货物种类目标检测模型的开发我们则少有涉及,正值周末,本文的主要目的就是想要实践构建这一场景下的目标检测模型&#xff0…

网站建设 翰臣科技公司建设银行网站用360浏览器

昨天晚上做完4题还有30分钟,感觉太晚了就没继续写,不过看了下E题感觉是一个线段树题目,今天中午看了看发现就是一个线段树上递归的询问问题,不过我之前没写过但是靠着日益强大的乱写能力竟然水出来了~~ E. Greedy Shopping 不难…

哪里有手机网站建设广东seo推广

通过对QRadioButton组件进行分组可解决QRadioButton组件的互斥性 实现如下。 假设已设计好UI并且有UI代码情况&#xff1a; 头文件引用&#xff1a; #include <QButtonGroup> 分组功能 &#xff0c;cpp文件代码实现&#xff1a; Your_Project::Your_Project(QWidge…

重庆网站建设百度推广wordpress主题英文改中文

在CSS中&#xff0c;:root是一个伪类选择器&#xff0c;它选择的是文档树的根元素。在HTML文档中&#xff0c;这个根元素通常是<html>。:root伪类选择器常常被用于定义全局的CSS变量或者设置全局的CSS样式。 例如&#xff0c;你可以使用:root来定义一个全局的字体大小&a…

海珠网站建设公司营销网站制作多少钱

点击上方蓝字 关注星标★不迷路岁月本长&#xff0c;忙者自促虽然大部分时候经过PQ清洗的数据都是加载到Excel工作表中&#xff0c;但是PQ中还有另外两种将数据返回Excel中进行分析的方法。三种不同的数据加载方式&#xff1a;Excel 智能表格仅限链接PowerPivot 数据模型一、加…

简单网站建设运营中堂镇做网站

RxJava(一) 翻译地址: http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/ RxJava这段时间在Android开发者之间变得越来越火。 唯一的问题是,很难理解。 特别大部分人之前都是使用命令式编程语言。但是一旦你理解它,它是很完美的! 在这里帮你更好理解RxJava。 一共有…

江西住房城乡建设网站搜索广告是什么

假如你把你的后端项目部署在服务器上的时候&#xff0c;然后你要去读取某个路径下的文件&#xff0c;然后你就要提供文件的路径&#xff0c;然后获取到该文件对象&#xff0c;但是你需要将当前文件对象File转换成MultipartFile再发送http请求传递到其他服务器上&#xff0c;这样…