Прикрепленный скрипт, который использует RayCast к пустому игровому объекту и теперь он не работает, почему? - PullRequest
0 голосов
/ 17 октября 2018

Я хочу выстрелить лучом из кончика пистолета противника и посмотреть, попадет ли он в игрока.Для этого я создал пустой игровой объект, помещенный внутри оружия в иерархии, и переместил пустой игровой объект, который я назвал TipOfGun, но я не прикрепил скрипт к TipOfGun с именем Gun с помощью rayCast, но он ничего не делает, посколькуЯ обеспокоен и после всех испытаний, которые я сделал.Я не могу понять, почему Raycast никогда ничего не попадает.Ниже приведен мой код, и я также публикую изображение своей иерархии.

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

public class Gun : MonoBehaviour
{

    private ParticleSystem muzzleFlash;
    Vector3 tipOfGun = new Vector3(0.009f, 0.329f, 0.017f);

    // Use this for initialization
    void Start()
    {
        GameObject muzzleFlashObj = GameObject.Find("muzzleFlash");
        muzzleFlash = muzzleFlashObj.GetComponent<ParticleSystem>();
    }



    public void ShootWeapon()
    {

        muzzleFlash.Play();
        Ray ray = new Ray(transform.position, transform.forward);
        RaycastHit hit;
        if (Physics.SphereCast(ray, 0.75f, out hit))
        {
            Debug.Log("Name of component hit:" + hit.collider.gameObject.name);

            GameObject hitObject = hit.transform.gameObject;
            if (hitObject.GetComponent<PlayerController>())
            {
                muzzleFlash.Play();
            }
            else
                muzzleFlash.Stop();
        }

    }


}

enter image description here

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

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

Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
Debug.Log("Did Hit");
0 голосов
/ 17 октября 2018

Вы используете Physics.Spherecast, что не то, что вы ищете.Из вашего описания я думаю, что вы должны использовать Physics.Raycast

Попробуйте что-то вроде этого вместо Spherecast:

if (Physics.Raycast(transform.position, transform.forward, out hit))

Дайте ему попытку.

...