Задать вопрос
@Senture

Как сделать взрыв гранаты с уроном который не будет проходить сквозь стены(collider'ы)?

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

Вот 2-е мои реализации гранаты:
1
using System.Collections.Generic;
using UnityEngine;

public class GranadeBulletScript : MonoBehaviour {

    private float timeDetected = 5f;
    private List<GameObject> playerInTrigger = new List<GameObject>();

	// Use this for initialization
	void Start () {
        gameObject.GetComponent<Rigidbody>().velocity = gameObject.transform.forward * 20;
    }
	
	// Update is called once per frame
	void Update () {
        timeDetected -= Time.deltaTime;
        if(timeDetected <= 0)
        {
            foreach (GameObject hit in playerInTrigger)
                Damage(hit);
            Destroy(gameObject);
        }
	}

    private void Damage(GameObject hit)
    {
        var health = hit.GetComponent<Player>();
        if (health != null)
        {
            health.TakeDamage(100f);
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
            playerInTrigger.Add(other.gameObject);
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.gameObject.tag == "Player")
            playerInTrigger.Remove(other.gameObject);
    }
}
а вот второй вариант
using UnityEngine;

public class GranadeScript : MonoBehaviour
{
    [SerializeField] private float damage;
    [SerializeField] private float radius;
    [SerializeField] private float timeOfExplode;

    private void Damage(GameObject hit)
    {
        var health = hit.GetComponent<Player>();
        if (health != null)
        {
            health.TakeDamage(damage);
        }
    }

    private void Update()
    {
        timeOfExplode -= Time.deltaTime;

        if (timeOfExplode <= 0)
        {
            Collider[] colls = Physics.OverlapSphere(transform.position, radius);

            foreach (Collider coll in colls)
            {
                if (coll.gameObject.tag == "Player")
                {
                    Debug.Log("Boom");
                    Damage(coll.gameObject);
                }
            }
        }
    }

    private void OnDrawGizmos()
    {
        Gizmos.DrawWireSphere(transform.position, radius);
    }
}



Нужно как то сделать чтоб взрыв не проходил сквозь стены, подскажите пожалуйста как это реализовать?
  • Вопрос задан
  • 494 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Сделайте raycast от гранаты до персонажа и узнаете есть ли препятствие на пути. Или для полного реализма запускаете кучу осколков и они долетят или нет до персонажа.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы