Unity3d - 当玩家静止时,炮塔停止射击

时间:2016-05-05 12:18:32

标签: c# unity3d

我目前正在开发2D自上而下的游戏,我的炮塔AI问题。一切都很完美,除了当玩家静止不动时,炮塔停止射击。当玩家停止时,bulletTimer会停止增加,而不是随着时间的推移而增加。我猜它与Time.deltaTime和帧刷新有关,但无法找到解决方法。我是否需要使用IEnumerator和waitforseconds编写攻击函数?感觉这是一个简单的问题,但我无法解决它。谢谢您的帮助。这是我的代码:

TurretAI代码

using UnityEngine;
using System.Collections;

public class TurretAI : MonoBehaviour 
{ 
     public float FireRate;
     public float bulletSpeed;
     public float bulletTimer;

     public GameObject Gun;
     public GameObject bullet;
     public Transform target;


     public void Attack()
     {    
         bulletTimer += Time.deltaTime;

         if (bulletTimer >= FireRate) 
         {
             Vector2 direction = target.transform.position - transform.position;
             direction.Normalize ();

             GameObject bulletClone;
             bulletClone = Instantiate (bullet, Gun.transform.position, Gun.transform.rotation) as GameObject;
             bulletClone.GetComponent<Rigidbody2D> ().velocity = direction * bulletSpeed;

             bulletTimer = 0;
         }
     }
 }

这是Turret Trigger代码

using UnityEngine;
using System.Collections;

public class TurretTrigger : MonoBehaviour 
{ 
    public TurretAI turretAI;

    void Awake()
    { 
        turretAI = gameObject.GetComponentInParent<TurretAI> (); 
    }

     void OnTriggerStay2D(Collider2D Trigger)
     {
         if (Trigger.CompareTag ("Player")) 
         {
             turretAI.Attack ();
         }
     }
}

1 个答案:

答案 0 :(得分:2)

我认为你的玩家rigidBody2D在没有移动时正在睡着(这是引擎优化性能,没有你做过的事情)。当rigidBody睡觉时,OnTriggerStay2D将停止检测它们。在您的播放器rigidBody2D.WakeUp()上拨打rigidBody2D会强制rigidBody唤醒并被触发框检测到。

我找不到一种更有效的方法来确保rigidBody刚才保持清醒状态。试试这个,看它是什么导致你的问题然后,如果是,试着找到一种更有效的方式来弯​​腰ridgidBody睡觉!

编辑:Gunnar B指出这可以在检查员中设置。转到播放器的RigidBody`组件并将“睡眠模式”设置为“从不睡觉”。