目前正在为期中工作,但我只停留在一个特定的部分。AI角色必须使用路标沿路径行驶,然后停在圆圈顶部以射击(破坏)墙以到达墙。最终航路点。 AI角色必须在炮塔附近射击并摧毁它之前执行此操作。 AI角色有3点生命值,如果射击3次,将会死亡。炮塔每次射击后都会冷却,因此可以给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 );
}
}
答案 0 :(得分:2)
在冷却结束后,必须将“ firing”变量重新设置为false。还建议您在进行冷却以节省CPU时不要执行Raycast。