游戏对象奇怪地移动

时间:2019-02-28 18:40:18

标签: unity3d

我的游戏对象奇怪地移动。

关于敌人,我有这个剧本:

public float speed = 1.0f;
private Transform target;

public void Start()
{
    var player = GameObject.FindWithTag("Player");
    target = player.transform;
}

void Update()
{
    // Move our position a step closer to the target.
    float step = speed * Time.deltaTime; // calculate distance to move
    transform.position = Vector3.MoveTowards(transform.position, target.position, step);

    // Check if the position of the cube and sphere are approximately equal.
    if (Vector3.Distance(transform.position, target.position) < 0.001f)
    {
        // Swap the position of the cylinder.
        target.position *= -1.0f;
    }
}

我用弹丸击中敌人后,它开始移动得更慢。弹丸背后的脚本是这样的:

    if (coll.gameObject.tag != "Player")
    {
        Destroy(gameObject);

        if ((coll.collider.GetComponent("Damageable") as Damageable) != null)
        {
            var d = coll.collider.GetComponent<Damageable>();
            d.Damage(1);
        }
    }

我将此脚本作为“可损坏的组件”添加到其中,但是,即使此脚本处于活动状态,该行为仍然存在,所以我认为它与之无关:

public void Damage(int damageAmount)
{
    print("Damage : " + Health + ":" + damageAmount);
    Health -= damageAmount;
    if (Health <= 0)
    {
        Destroy(gameObject);
    }
}

关于哪里出了什么问题的任何建议?

1 个答案:

答案 0 :(得分:1)

  

coll

我猜这是碰撞的简称,碰撞发生在2个刚体(或另一个静态对撞机,但与问题无关)上,所以当子弹击中敌人时,即使您立即将其摧毁,它也会阻挡敌人的行进敌人仍然会停止移动1帧。

因此,将子弹上的对撞机作为触发点,触发点不会阻止其他刚体。

使用OnTriggerEnter2D(对于3D游戏,则使用OnTriggerEnter(Collider))来接收触摸事件。

void OnTriggerEnter2D(Collider2D other)
{
    if (other.gameObject.tag != "Player")
    {
        Destroy(gameObject);

        var d = other.GetComponent<Damageable>();
        if(d != null)
            d.Damage(1);
    }
}