赞
踩
首先在Hierachy界面创建好一个capsule躯体和一个Sphere用做敌人角色视线检测,并且将Sphere作为capsule的子对象
简易的敌人模型如上,接下来点击Sphere,将球体自带的碰撞体去除,同时添加胶囊碰撞体Capsule Collider,勾选is Trigger的同时将Direction设置为Z-Axis,这里我们希望检测的方向是视野朝向的方向即蓝轴z轴,点击Edit Collider 设置好检测范围,整体如下:
接下来关键就是代码了,详解如下:
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class enemyview : MonoBehaviour
- {
- // Start is called before the first frame update
- public Transform player;//检测对象
- public bool isinrange;//判断是否在检测范围
-
- private void OnTriggerEnter(Collider other)//用于检测目标进入触发区域
- {
- if(other.transform==player)
- {
- isinrange = true;
- }
- }
- private void OnTriggerExit(Collider other)//在实际游戏过程中,进入该触发区域可能有其他物体,所以要检测目标角色的离开
- {
- if(other.transform==player)
- {
- isinrange=false;
- }
- }
- // Update is called once per frame
- void Update()
- {
- if(isinrange)
- {
- Vector3 direction=player.position - transform.position;//vector3用一个向量记录好射线检测的方向,根据数学知识(A到B的向量等于B的坐标-A的坐标)这里类似
- Ray ray=new Ray(transform.position, direction);//这里的new是要不断更新方向,因为玩家的位置时刻都会改变,有了方向接下来就是射线,射线需要的就是一个原点和一个方向,括号内的transform.position指的就是用于检测的物体自身(即本项目中角色身上的红球);
- RaycastHit hit;//有了射线,接下来就可以进行投射
- if(Physics.Raycast(ray, out hit))//这路的out可以理解为返回投射目标的对象信息
- {
- if(hit.collider.transform==player)//如果投射的对象是玩家则“游戏结束”
- {
- Debug.Log("Gameover!");
- }
- }
- }
- }
- }
将代码添加给红球Sphere,同时将玩家角色拖放进Inspector中的脚本:
点击运行,当你控制游戏角色走过敌人面前并查看Console:
小结关于射线检测,首先创建三位向量确定好方向,有了方向就可创建射线,接下来再是射线投射
利用Physics.Raycast(ray, out hit)收集投射目标的信息。射线检测记住这一模板就运筹帷幄啦!
当然将这一模板的内容与主页当中介绍的敌人巡逻功能结合起来,一个完整的敌人巡逻+目标检测就完成了!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。