首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的炮塔停止射击AI播放器?

为什么我的炮塔停止射击AI播放器?
EN

Stack Overflow用户
提问于 2018-10-18 06:46:21
回答 1查看 60关注 0票数 1

目前我正在为我的期中考试做一些事情,但我被困在一个特定的part.The AI角色必须遵循一条使用路点的路径,然后在一个圆圈的顶部停下来射击(摧毁)一堵墙以到达最终的路点。AI角色必须在炮塔位于射击附近并摧毁它之前做到这一点。AI角色有3点生命值,如果射击三次就会死亡。炮塔在每一次射击后都有一个冷却时间,所以它给了AI角色击落墙壁的时间。

我被卡住的部分是当AI角色到达击落墙壁的路点时(我还没有实现),炮塔射击一次,不再射击。然而,光线投射是有效的,因为只要AI在范围内,它就会观察AI。

下面是我的转塔脚本:

代码语言:javascript
运行
复制
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 );
}
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-18 06:51:07

在冷却时间结束后,你必须将"firing“变量设置回false。此外,建议您不要在冷却过程中执行光线投射,以节省一些CPU。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52864624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档