当前位置:   article > 正文

unity3d 射线碰撞与敌人视野检测_unity检测范围内敌人

unity检测范围内敌人

首先在Hierachy界面创建好一个capsule躯体和一个Sphere用做敌人角色视线检测,并且将Sphere作为capsule的子对象

 简易的敌人模型如上,接下来点击Sphere,将球体自带的碰撞体去除,同时添加胶囊碰撞体Capsule Collider,勾选is Trigger的同时将Direction设置为Z-Axis,这里我们希望检测的方向是视野朝向的方向即蓝轴z轴,点击Edit Collider 设置好检测范围,整体如下:

 接下来关键就是代码了,详解如下:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class enemyview : MonoBehaviour
  5. {
  6. // Start is called before the first frame update
  7. public Transform player;//检测对象
  8. public bool isinrange;//判断是否在检测范围
  9. private void OnTriggerEnter(Collider other)//用于检测目标进入触发区域
  10. {
  11. if(other.transform==player)
  12. {
  13. isinrange = true;
  14. }
  15. }
  16. private void OnTriggerExit(Collider other)//在实际游戏过程中,进入该触发区域可能有其他物体,所以要检测目标角色的离开
  17. {
  18. if(other.transform==player)
  19. {
  20. isinrange=false;
  21. }
  22. }
  23. // Update is called once per frame
  24. void Update()
  25. {
  26. if(isinrange)
  27. {
  28. Vector3 direction=player.position - transform.position;//vector3用一个向量记录好射线检测的方向,根据数学知识(A到B的向量等于B的坐标-A的坐标)这里类似
  29. Ray ray=new Ray(transform.position, direction);//这里的new是要不断更新方向,因为玩家的位置时刻都会改变,有了方向接下来就是射线,射线需要的就是一个原点和一个方向,括号内的transform.position指的就是用于检测的物体自身(即本项目中角色身上的红球);
  30. RaycastHit hit;//有了射线,接下来就可以进行投射
  31. if(Physics.Raycast(ray, out hit))//这路的out可以理解为返回投射目标的对象信息
  32. {
  33. if(hit.collider.transform==player)//如果投射的对象是玩家则“游戏结束”
  34. {
  35. Debug.Log("Gameover!");
  36. }
  37. }
  38. }
  39. }
  40. }

将代码添加给红球Sphere,同时将玩家角色拖放进Inspector中的脚本:

                            

点击运行,当你控制游戏角色走过敌人面前并查看Console:

小结关于射线检测,首先创建三位向量确定好方向,有了方向就可创建射线,接下来再是射线投射

利用Physics.Raycast(ray, out hit)收集投射目标的信息。射线检测记住这一模板就运筹帷幄啦!

当然将这一模板的内容与主页当中介绍的敌人巡逻功能结合起来,一个完整的敌人巡逻+目标检测就完成了!

http://t.csdn.cn/iZmbA

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/520627
推荐阅读
相关标签
  

闽ICP备14008679号