C# Unity3d-玩家静止时炮塔停止射击
我目前正在开发一个2D自上而下的游戏,我的炮塔AI有问题。除玩家静止不动时,炮塔停止射击外,其他一切都能正常工作。当玩家停止时,bulletTimer停止增加,而不是随时间增加。我猜这与时间有关。deltaTime和frame刷新,但找不到解决方法。我是否需要使用IEnumerator和waitforseconds编写攻击函数?这感觉像是一个简单的问题,但我无法解决它。谢谢你的帮助。这是我的密码: 人工智能代码C# Unity3d-玩家静止时炮塔停止射击,c#,unity3d,C#,Unity3d,我目前正在开发一个2D自上而下的游戏,我的炮塔AI有问题。除玩家静止不动时,炮塔停止射击外,其他一切都能正常工作。当玩家停止时,bulletTimer停止增加,而不是随时间增加。我猜这与时间有关。deltaTime和frame刷新,但找不到解决方法。我是否需要使用IEnumerator和waitforseconds编写攻击函数?这感觉像是一个简单的问题,但我无法解决它。谢谢你的帮助。这是我的密码: 人工智能代码 using UnityEngine; using System.Collection
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;
}
}
}
使用UnityEngine;
使用系统集合;
公共类:单一行为
{
公共浮式灭火器;
公共交通速度;
公众浮标计时器;
公共游戏机枪;
公共游戏对象子弹;
公共转型目标;
公开无效攻击()
{
bulletTimer+=Time.deltaTime;
如果(bulletTimer>=燃速)
{
矢量2方向=target.transform.position-transform.position;
Normalize();
游戏对象克隆;
bulletClone=实例化(bullet,Gun.transform.position,Gun.transform.rotation)作为游戏对象;
bulletClone.GetComponent().velocity=方向*bulletSpeed;
bulletTimer=0;
}
}
}
这是炮塔的触发码
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 ();
}
}
}
使用UnityEngine;
使用系统集合;
公共类:单一行为
{
公共塔台塔台;
无效唤醒()
{
tartai=gameObject.getComponentParent();
}
无效OnTriggerStay2D(碰撞R2D触发器)
{
if(Trigger.CompareTag(“播放器”))
{
tai.Attack();
}
}
}
我认为您的播放器的rigidBody2D
在不移动时睡着了(这是引擎优化性能,您没有做任何事情)。当刚体
s睡眠时,OnTriggerStay2D
将停止检测它们。在玩家的rigidBody2D
上调用rigidBody2D.WakeUp()
将强制rigidBody2D
唤醒,并被触发框检测到
我找不到更有效的方法来确保刚体现在保持清醒。试着这样做,看看这是否是导致您出现问题的原因,然后,如果是,试着找到一种更有效的方法来俯身睡觉
编辑:Gunnar B指出,这可以在inspector中设置。转到播放器的刚体组件,将“睡眠模式”设置为“从不睡眠”。您是否在任何时候更改Time.timeScale
?如果您这样做,那么将时间.deltaTime
更改为时间.unscaledDeltaTime
可能会有所帮助。我根本没有更改时间刻度。如果可能的话,我可以录制一段视频来记录正在发生的事情。OnTiggerStay2D是否在每一帧上调用?在那里放一个Debug.Log并检查它是否冲突。下面的代码似乎还可以。我们即将编写相同的代码。我想,你可以在刚体组件中设置睡眠模式。(不睡觉应该是一个选择。)我确信这就是这么简单的事情。非常感谢你。问题已解决=)