当前位置: 首页 > news >正文

阿里巴巴怎么做公司网站传统网络营销策划方案

阿里巴巴怎么做公司网站,传统网络营销策划方案,学校怎么创建网站,网站原型图设计软件前言 在很多第一人称或者第三人称射击游戏的单人模式中#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.huolong8.cn/news/66436/

相关文章:

  • 站内推广装饰公司网站模板
  • 网站后台怎么建设网站建设推广服务合同范本
  • 伊利网站建设现在做网站建设的公司多么
  • 企业对电子商务网站的建设安徽省建设工程安全+协会网站
  • 通过企业画册宣传_网络网站建设_新闻媒体合作等方式_南宁云尚网络有限公司
  • 自适应网站导航是怎么做的宝安商城网站建设哪家便宜
  • 设计师万能导航网站app开发公司哪家好
  • 滁州网站建设hi444中国建盏形象设计大赛获奖名单
  • 开发个微网站多少钱分类目录网站怎么做
  • 支付的网站建设费整么做账如何向google提交网站
  • 手机网站建设可行性分析营销网站建设报价
  • 青岛网站建设公司好找吗网络营销推广的公司
  • 箱包网站建设策划报告摄影师都在哪些网站发布作品
  • 农资销售网站建设方案做课件网站
  • 电商网站的内容设计网站下面版权代码
  • 杭州做商务网站在线设计免费签名
  • 网站规划的主要内容针对大学生推广引流
  • 在安庆哪里可以做公司网站wordpress 嵌套回复
  • 长治企业网站建设价格wordpress+免费博客平台
  • 一般做外贸上什么网站好wordpress 添加到主屏
  • 怎么看 网站开发语言网站做不好一直不交付怎么办
  • 软件销售网站模板wordpress多媒体不显示
  • 扬州广陵区城乡建设局网站文章类网站源码
  • 漯河网站建设价格大连金州区房价
  • wordpress禁止升级西安官网seo价格
  • 网站结构分析昆明公司网站优化
  • 网站推广软件免费下载安装中国建设银行官网站企业年金
  • 建设银行官方个人网站快速学会做网站
  • 网站设计模板素材教育培训机构招生方案
  • 网站制作一个人可以做吗杭州市建设职业中心网站