C# 试图向游戏对象发射射弹,不是吗';别动=

C# 试图向游戏对象发射射弹,不是吗';别动=,c#,unity3d,unity3d-2dtools,C#,Unity3d,Unity3d 2dtools,我正在制作一个2D塔防游戏,希望我的塔楼能在仆从面前发射一个预制场。然而,它目前只产生我想要的预制,但不移动它 我的两个脚本: public class Attacker : MonoBehaviour { // Public variables public GameObject ammoPrefab; public float reloadTime; public float projectileSpeed; // Private variables private Transform

我正在制作一个2D塔防游戏,希望我的塔楼能在仆从面前发射一个预制场。然而,它目前只产生我想要的预制,但不移动它

我的两个脚本:

public class Attacker : MonoBehaviour {

// Public variables
public GameObject ammoPrefab;
public float reloadTime;
public float projectileSpeed;

// Private variables
private Transform target;


// Use this for initialization
void Start () {
}

// Update is called once per frame
void Update () {

}
void OnTriggerEnter(Collider co){
    if (co.gameObject.tag == "Enemy" || co.gameObject.tag == "BlockTower") { 
        Debug.Log("Enemy tag detected");

        if(this.gameObject.tag == "Enemy" && co.gameObject.tag != "Enemy"){
            Debug.Log("This is an Enemy");
            // Insert for Enemey to attack Block Towers.
        }
        if(this.gameObject.tag == "Tower" && co.gameObject.tag != "BlockTower"){
            Debug.Log("This is a Tower");
            Tower Tower = GetComponent<Tower>();
            Tower.CalculateCombatTime(reloadTime, projectileSpeed);
            Transform SendThis = co.transform;
            Tower.SetTarget(SendThis);
        }
    }
}
公共类攻击者:单一行为{
//公共变量
公共游戏对象弹药预制;
公共浮动重新加载时间;
公共浮动射弹速度;
//私有变量
私有转换目标;
//用于初始化
无效开始(){
}
//每帧调用一次更新
无效更新(){
}
空对撞机(对撞机公司){
如果(co.gameObject.tag==“敌人”| | co.gameObject.tag==“碉堡”){
Debug.Log(“检测到敌方标签”);
if(this.gameObject.tag==“敌人”&&co.gameObject.tag!=“敌人”){
Log(“这是一个敌人”);
//插入Enemey以攻击封锁塔。
}
if(this.gameObject.tag==“Tower”&&co.gameObject.tag!=“BlockTower”){
Log(“这是一座塔”);
塔=GetComponent();
塔。计算mbattime(重新加载时间、射弹速度);
Transform SendThis=co.Transform;
设置目标(SendThis);
}
}
}
}

公共级塔楼:单一行为{
私有转换目标;
私人漂浮火速;
私人双下一次租赁;
私有游戏对象子弹;
私有攻击者源;
//用于初始化
公共虚拟空开始(){
source=this.GetComponent();
}
//每帧调用一次更新
公共虚拟无效更新(){
如果(目标){
Log(“我有一个目标”);

//如果(nextFireTime您必须更新项目符号的位置。您仅在创建项目符号时移动


尝试列出项目符号并使用更新功能更改位置。

Vector3.MoveTowards
仅移动对象一次,调用
FireProjectle
时,这只是瞬间位移

您需要使用
Update()
函数创建某种投射脚本,使其随时间移动

以下是一个例子:

public class Projectile : MonoBehaviour
{
    public Vector3 TargetPosition;

    void Update()
    {
        transform.position = Vector3.MoveTowards(transform.position, TargetPosition, speed * Time.DeltaTime);
    }
}
然后在项目符号实例化之后,设置目标:

bullet.GetComponent<Projectile>().TargetPosition = target.position;
bullet.GetComponent().TargetPosition=target.position;

希望有帮助。

请注意,您每次调用FireProjectle时都会实例化项目符号,但它不会更新创建的项目符号。将来,向游戏开发人员提问可能会更好。例如,这里的人建议您列出项目符号,而不是建议使用
update()
所有单一行为实例都有的方法。GD上的人会知道Unity的微妙之处,并能给出更好、更具体的建议。作为补充说明,如果你想让寻的器投射物跟随他们的目标,你可以传递
target.gameObject
,而不是目标的位置。
bullet.GetComponent<Projectile>().TargetPosition = target.position;