我想撰寫一個跟蹤我的玩家并向其射擊的敵人。玩家跟隨部分作業,但當它射擊時,子彈留在原地。Bullet 有一個設定為觸發的碰撞器。玩家有標簽 - 分配給它的玩家 這是子彈的腳本:
public float speed;
private Transform player;
private Vector2 target;
void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
target = new Vector2(player.position.x, player.position.y);
}
// Update is called once per frame
void Update()
{
//Move projectile towards
//Ja gribam lai lode seko transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
transform.position = Vector2.MoveTowards(transform.position, target, speed * Time.deltaTime);
if(transform.position.x == target.x && transform.position.y == target.y){
DestroyProjectile();
}
}
void OnTriggerEnter2D(Collider2D other){
if(other.CompareTag("Player")){
DestroyProjectile();
}
}
void DestroyProjectile(){
Destroy(gameObject);
}
}
這是敵人的腳本:
public float speed;
public float stoppingDistance;
public float retreatDistance;
private float timeBtwShots;
public float startTimeBtwShots;
public GameObject projectile;
public Transform player;
// Start is called before the first frame update
void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
timeBtwShots = startTimeBtwShots;
}
// Update is called once per frame
void Update()
{
//Checking distance between enemies
if(Vector2.Distance(transform.position, player.position) > stoppingDistance)
{
//Move enemy towards player
transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
//Check if the distance is smaller and make sure if enemy isnt too near to the player
} else if(Vector2.Distance(transform.position, player.position) < stoppingDistance && Vector2.Distance(transform.position, player.position) > retreatDistance){
//Too near enemy will stop moving
transform.position = this.transform.position;
//if distance is smaller than retreat Back away
} else if(Vector2.Distance(transform.position, player.position) < retreatDistance){
transform.position = Vector2.MoveTowards(transform.position, player.position, -speed * Time.deltaTime);
}
// Shootig
if(timeBtwShots <= 0){
Instantiate(projectile, transform.position, Quaternion.identity);
timeBtwShots = startTimeBtwShots;
} else {
timeBtwShots -= Time.deltaTime;
}
}
}
uj5u.com熱心網友回復:
代碼本身沒有問題,所以肯定是別的東西有問題。
一種可能性是GameObject projectile可能未在統一檢查器中設定。彈丸上也應該有一個子彈組件,所以要確保它是正確的。
原因也可能是子彈速度。默認情況下,它設定為 0,如果是,則不會移動。仔細檢查檢查器中的值以確保它不是 0。
第三種可能性是可能有多個帶有玩家標簽的物件,導致 FindGameObjectWithTag 回傳錯誤的玩家物件。這不太可能,但可以通過使用不同的方法獲取玩家物件來修復,例如在敵人腳本中設定它
uj5u.com熱心網友回復:
@GalaxyShard ,@derHugo 感謝您的回答!原來我沒有在子彈中添加彈丸腳本!我已將彈丸腳本分配給 Player 物件,而不是子彈本身。解決了
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351168.html
上一篇:輪到您啟用和禁用按鈕
