目前我正在为我的期中考试做一些事情,但我被困在一个特定的part.The AI角色必须遵循一条使用路点的路径,然后在一个圆圈的顶部停下来射击(摧毁)一堵墙以到达最终的路点。AI角色必须在炮塔位于射击附近并摧毁它之前做到这一点。AI角色有3点生命值,如果射击三次就会死亡。炮塔在每一次射击后都有一个冷却时间,所以它给了AI角色击落墙壁的时间。
我被卡住的部分是当AI角色到达击落墙壁的路点时(我还没有实现),炮塔射击一次,不再射击。然而,光线投射是有效的,因为只要AI在范围内,它就会观察AI。
下面是我的转塔脚本:
using UnityEngine;
using System.Collections;
public class TurretScript : MonoBehaviour {
public float rangeToPlayer;
public GameObject bullet;
public GameObject spawn;
private GameObject player;
private bool firing = false;
private float fireTime;
private float coolDown = 0.5F;
void Start () {
player = GameObject.FindWithTag("Player");
}
void Update () {
if ( PlayerInRange() ) {
transform.LookAt(player.transform.position);
RaycastHit hit;
if( Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit )) {
Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 20.0F, Color.red);
if (hit.transform.gameObject.tag == "Player") {
if ( firing == false )
{
firing = true;
fireTime = Time.time;
GameObject.Instantiate(bullet, spawn.transform.position, transform.rotation);
}
}
}
}
if ( firing && fireTime + coolDown <= Time.time )
firing = true;
}
bool PlayerInRange() {
return ( Vector3.Distance(player.transform.position, transform.position) <= rangeToPlayer );
}
}
发布于 2018-10-18 06:51:07
在冷却时间结束后,你必须将"firing“变量设置回false。此外,建议您不要在冷却过程中执行光线投射,以节省一些CPU。
https://stackoverflow.com/questions/52864624
复制相似问题