射出几个 Raycasts 来检查一个物体
Shoot out several Raycasts to check for an object
我正在为我的游戏制作一个敌人,它会一直跟着你,直到它再也看不到你为止。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class pathfindingPlayer : MonoBehaviour
{
RaycastHit hit;
NavMeshAgent _navMeshAgent;
void Awake() => _navMeshAgent = GetComponent<NavMeshAgent>();
public bool seen;
public float noticeDistance = 7f;
void Update()
{
Debug.DrawRay(transform.position, transform.forward * noticeDistance, Color.red);
Ray PlayerRay = new Ray(transform.position, Vector3.back);
if(Physics.Raycast(PlayerRay, out RaycastHit hitInfo, noticeDistance))
{
if (hitInfo.collider.CompareTag("Player"))
{
Vector3 SeenPlayer = hitInfo.point;
_navMeshAgent.SetDestination(SeenPlayer);
}
}
}
}
现在的问题是只射出一个Raycast。因此敌人只会朝一个方向跑。有没有办法为此添加多个光线投射,或者我需要重写代码吗?提前致谢
你可以创建一个函数来进行光线投射并每隔 x 秒调用一次,但对于你想要实现的目标,我会尝试在敌人身上放置一个圆形对撞机,其半径为敌人能看到的距离,并确保将对撞机设置为触发器,如果玩家触发对撞机,则使其朝向玩家
我正在为我的游戏制作一个敌人,它会一直跟着你,直到它再也看不到你为止。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class pathfindingPlayer : MonoBehaviour
{
RaycastHit hit;
NavMeshAgent _navMeshAgent;
void Awake() => _navMeshAgent = GetComponent<NavMeshAgent>();
public bool seen;
public float noticeDistance = 7f;
void Update()
{
Debug.DrawRay(transform.position, transform.forward * noticeDistance, Color.red);
Ray PlayerRay = new Ray(transform.position, Vector3.back);
if(Physics.Raycast(PlayerRay, out RaycastHit hitInfo, noticeDistance))
{
if (hitInfo.collider.CompareTag("Player"))
{
Vector3 SeenPlayer = hitInfo.point;
_navMeshAgent.SetDestination(SeenPlayer);
}
}
}
}
现在的问题是只射出一个Raycast。因此敌人只会朝一个方向跑。有没有办法为此添加多个光线投射,或者我需要重写代码吗?提前致谢
你可以创建一个函数来进行光线投射并每隔 x 秒调用一次,但对于你想要实现的目标,我会尝试在敌人身上放置一个圆形对撞机,其半径为敌人能看到的距离,并确保将对撞机设置为触发器,如果玩家触发对撞机,则使其朝向玩家