我目前正在开发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 ();
}
}
}
答案 0 :(得分:2)
我认为你的玩家rigidBody2D
在没有移动时正在睡着(这是引擎优化性能,没有你做过的事情)。当rigidBody
睡觉时,OnTriggerStay2D
将停止检测它们。在您的播放器rigidBody2D.WakeUp()
上拨打rigidBody2D
会强制rigidBody
唤醒并被触发框检测到。
我找不到一种更有效的方法来确保rigidBody
刚才保持清醒状态。试试这个,看它是什么导致你的问题然后,如果是,试着找到一种更有效的方式来弯腰ridgidBody
睡觉!
编辑:Gunnar B指出这可以在检查员中设置。转到播放器的RigidBody`组件并将“睡眠模式”设置为“从不睡觉”。