Gameobject странно движется - PullRequest
       1

Gameobject странно движется

0 голосов
/ 28 февраля 2019

Мои игровые объекты странно движутся.

На враге у меня есть такой сценарий:

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);
        }
    }

Я добавил этот сценарий в качестве компонента Damageable, однако такое поведение имело место еще до того, как этот сценарий был активен, поэтому я не думаю, что он связан:

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

Любые рекомендации о том, что не так?

1 Ответ

0 голосов
/ 03 марта 2019

coll

Я полагаю, это сокращение для столкновения, столкновение происходит на 2 твердых телах (или другом статическом коллайдере, но не связанном с вопросом), поэтому, когда пуля попала в противника,он также блокирует путь врага, даже если вы немедленно уничтожите его, враг все равно прекратит движение на 1 кадр.

Так что сделайте коллайдер на пуле триггером, триггер не будет блокировать другие твердые тела.

Используйте OnTriggerEnter2D (или OnTriggerEnter(Collider) для 3D-игры) для получения события касания.

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

        var d = other.GetComponent<Damageable>();
        if(d != null)
            d.Damage(1);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...