我在Unity中为我的游戏中的AI编写代码,我想在同一代码中运行NavMesh代理的移动、Raycast和声音触发(在我的游戏中,这是一个对声音敏感的敌人,如果它听到声音,它将跟随声音的来源)。
注 。 导航网状代理。这个组件被附加到游戏中的移动角色上,让它使用NavMesh导航场景
Raycasting在视频游戏开发中通常用于确定玩家的视线等。
我试过将2个单独的脚本一起运行(Raycast和NavMesh),但没有成功。很抱歉,但我对C#的编码完全不了解。
这是我写的代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IAVISIBILIDAD : MonoBehaviour
{
public Transform target;
public float moveSpeed = 3;
public float rotationSpeed = 3;
public float distance = 5f;
public bool Enabled = false;
public bool Detect = false;
private Transform myTransform;
void Awake()
{
myTransform = this.GetComponent<Transform>();
}
void Start()
{
target = GameObject.FindWithTag("Player").transform;
}
void Update()
{
if (Enabled)
{
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);
RaycastHit info;
Debug.DrawRay(transform.position, transform.forward * distance, Color.red, 0.1f);
if (Physics.Raycast(transform.position, transform.forward, out info, distance))
{
if (info.collider.tag == "Player")
{
Detect = true;
}
else
{
Detect = false;
}
}
else
{
Detect = false;
}
}
if (Enabled && Detect)
{
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
Enabled = true;
}
}
void OnTriggerExit(Collider other)
{
if (other.tag == "Player")
{
Enabled = false;
}
}
}
一些建议,因为你没有发布完整的代码。你应该绝对可以做到这些。
例子
if (Physics.Raycast(transform.position, transform.forward, out info, distance))
{
Debug.Log("Collided with: " + info.collider.tag}");
if (info.collider.tag == "Player")
{
Detect = true;
}
else
{
Detect = false;
}
}
else
{
Debug.Log("Failed to collide with anything");
Detect = false;
}