【发布时间】:2020-09-02 05:15:37
【问题描述】:
我无法让敌人的射弹从敌人飞到玩家的位置。当我玩游戏时,敌人的子弹弹丸在屏幕上朝一个方向飞,而不是朝玩家飞。我认为问题可能在于我如何为弹丸预制件分配方向?任何建议将不胜感激。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyController : MonoBehaviour
{
public float speed;
public Rigidbody enemyRb;
[SerializeField] float rateOfFire;
private GameObject player;
public GameObject projectilePrefab;
float nextFireAllowed;
public bool canFire;
Transform enemyMuzzle;
void Awake()
{
enemyRb = GetComponent<Rigidbody>();
player = GameObject.Find("Player");
enemyMuzzle = transform.Find("EnemyMuzzle");
}
void Update()
{
//move enemy rigidbody toward player
Vector3 lookDirection = (player.transform.position - transform.position).normalized;
enemyRb.AddForce(lookDirection * speed);
//overallSpeed
Vector3 horizontalVelocity = enemyRb.velocity;
horizontalVelocity = new Vector3(enemyRb.velocity.x, 0, enemyRb.velocity.z);
// turns enemy to look at player
transform.LookAt(player.transform);
//launches projectile toward player
projectilePrefab.transform.Translate(lookDirection * speed * Time.deltaTime);
Instantiate(projectilePrefab, transform.position, projectilePrefab.transform.rotation);
}
public virtual void Fire()
{
canFire = false;
if (Time.time < nextFireAllowed)
return;
nextFireAllowed = Time.time + rateOfFire;
//instantiate the projectile;
Instantiate(projectilePrefab, enemyMuzzle.position, enemyMuzzle.rotation);
canFire = true;
}
}
【问题讨论】:
-
你必须保存 Instantiate() 的返回值并在那里进行翻译
-
你想一次发射一颗子弹吗?你想让子弹永远跟随玩家(就像一个“寻找者”)?
-
更好的方法(如果你想要多个项目符号)是在你的项目符号上放置一个脚本,它在 Update() 中移动它
标签: c# unity3d projectile