現在、2Dトップダウンゲームを開発中で、私のTurret AIに問題があります。プレーヤが静止しているときは、タレットが撮影を停止する以外は、すべてが完全に機能します。弾丸タイマーは、時間の経過と共に増加するのではなく、プレーヤーが停止すると増加を停止します。私はそれがTime.deltaTimeとフレームをリフレッシュすることと関係があると推測していますが、回避策を見つけることができませんでした。 IEnumeratorとwaitforsecondsで攻撃関数を記述する必要がありますか?それは簡単な問題だと感じていますが、私はそれを解決することができません。助けてくれてありがとう。ここに私のコードです:Unity3d - プレイヤーが静止しているときにタレットが撮影を停止する
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;
}
}
}
そして、これは私があなたのプレイヤーのそれは動いていないときrigidBody2D
が眠っているが(これはエンジンがあると思いタレットトリガ・コード
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();
}
}
}
「Time.timeScale」はいつでも変更できますか?もしあなたが 'Time.deltaTime'を' Time.unscaledDeltaTime'に変更すると助けになるかもしれません。 –
私はタイムスケールをまったく変更していません。実際に何が起きているのかをビデオで記録することができれば助かります。 – lorrotar
OnTriggerStay2Dはすべてのフレームで呼び出しますか? Debug.Logをそこに置き、衝突していないかどうか確認してください。次のコードは大丈夫です。 – Bivis