Как сделать столкновение снарядов с игроком в Unity2d правильным?

Рейтинг: -2Ответов: 1Опубликовано: 05.08.2023

Суть проблемы заключается в том, что снаряды противника работают некорректно, задевая игрока там, где его нет, а где он есть - проходят насквозь.

Код снаряда:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class shamrockProjectile : MonoBehaviour
{
    public float shootSpeed;
    public float distance; 
    public LayerMask isSolid;
    void Start()
    {

    }
    void Update()
    {
        transform.Translate(Vector2.right * shootSpeed * Time.deltaTime);
        RaycastHit2D hitInfo = Physics2D.Raycast(transform.position, transform.up, distance, isSolid);
        if(hitInfo.collider != null){
            if(hitInfo.collider.CompareTag("Player")){

                charscript.Instance.GetDamage();
                Destroy(gameObject);
            }
        }
    }
}

Грешу на Rayсast2D, Ведь снаряд пропадает именно там, где игрок был в момент выстрела, а не в момент прилетания снаряда. (Хотя когда игрок стоит на месте, как я уже сказал выше, снаряды просто проходят насквозь.)

Буду благодарен любой помощи, даже простому совету или ссылке на какой ни будь тутор, всем кто поможет - спасибо!

Ответы

▲ 0

Дело в том, что у тебя передвижение происходит в теле Update, а проверка на хиты(как и любая физика в Unity) работает в FixedUpdate

В дальнейшем советую почти во всех случаях использовать FixedUpdate(в том числе и потому, что не нужно заморачиваться с Time.deltaTime)