为什么我的炮塔停止拍摄AI播放器?

时间:2018-10-17 22:46:21

标签: c# unity3d

目前正在为期中工作,但我只停留在一个特定的部分。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 );
}
}

1 个答案:

答案 0 :(得分:2)

在冷却结束后,必须将“ firing”变量重新设置为false。还建议您在进行冷却以节省CPU时不要执行Raycast。