Unity3D - Raycast не попал в правильную позицию - PullRequest
1 голос
/ 24 февраля 2020

Я пытаюсь сделать пистолет, стреляя лучом из центра камеры, от которой пистолет - дитя, у меня также есть эффект частиц, когда удар происходит только, удар происходит в неправильном положении.

Я выполнил Debug.DrawLine и увидел, что начало луча происходит на 0,8 единицы выше центра камеры, и иногда оно попадает прямо в камеру. Вот сценарий оружия

using UnityEngine;

public class GunShoot : MonoBehaviour
{
    public float gunDamage = 1f;
    public float fireRate = .1f; // wait x seconds to fire again
    public float weaponRange = 100f;
    public float hitForce = 100f;


    public Camera playerCam;
    //public ParticleSystem muzzleFlash;
    public GameObject impactEffect;

    private float nextFire; // Holds the time for which the gun is able to fire again

    void Update()
    {
        Shoot();
    }
    public void Shoot()
    {
        if (Input.GetButtonDown("Fire1") && Time.time > nextFire)
        {
            nextFire = Time.time + fireRate;
            RaycastHit hit;

            if (Physics.Raycast(playerCam.transform.position, playerCam.transform.forward, out hit, weaponRange)) // Center of the camera, directly forward, hat it hits and that infomation, the range of the weapon 
            {

                Target target = hit.transform.GetComponent<Target>();

                if (target != null)
                {
                    target.TakeDamage(gunDamage);
                }

                GameObject impactGameObject = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
                Destroy(impactGameObject, .15f);
            }
        }
    }   
}

Я использовал учебник Брэклиса https://www.youtube.com/watch?v=THnivyG0Mvo, но я последовал этому безоговорочно (за исключением изменения некоторых имен переменных), и я не могу видеть, где это идет не так.

Я не могу просто уменьшите максимум исходного луча, так как иногда он может в 1/10 раза выстрелить из правильного положения

Как вы можете видеть, он явно не стреляет из середины, где перекрестие enter image description here

Любая помощь будет большой благодарностью!

1 Ответ

1 голос
/ 24 февраля 2020

Рассмотрите возможность использования Camera.ScreenPointToRay .

Если вы всегда снимаете с центра экрана, вы можете использовать Camera.ViewportPointToRay

Ray ray = Camera.main.ViewportPointToRay(new Vector2(0.5f, 0.5f));

if (Physics.Raycast(ray, out RaycastHit hit, weaponRange)) // handle hit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...