C# 附加脚本,使用光线投射到一个空的游戏对象,现在它不工作,为什么?

C# 附加脚本,使用光线投射到一个空的游戏对象,现在它不工作,为什么?,c#,unity3d,raycasting,C#,Unity3d,Raycasting,我想从敌人的枪尖射出一个光线投射器,看看它是否击中玩家。为了做到这一点,我创建了一个空的游戏对象,放置在层次结构中的枪内,并移动了空的游戏对象,我称之为TipOfGun,不是我将脚本附加到TipOfGun,称为gun with rayCast,但就我而言,它不起任何作用,而且在我完成所有测试之后。我不明白为什么raycast什么都打不到。下面是我的代码,我也张贴了我的层次结构的图片 using System.Collections; using System.Collections.Generi

我想从敌人的枪尖射出一个光线投射器,看看它是否击中玩家。为了做到这一点,我创建了一个空的游戏对象,放置在层次结构中的枪内,并移动了空的游戏对象,我称之为TipOfGun,不是我将脚本附加到TipOfGun,称为gun with 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();
        }

    }


}
你使用的是物理。Spherecast,这不是你想要的。 根据你的描述,我认为你应该使用物理学

请尝试以下操作,而不是Spherecast:

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

试一试。

在两天之间的几个小时里,我打破了头,我决定看看是否能看到实际的光线投射,以确定为什么它没有击中我的播放器。我以前应该考虑过这种方法,对于那些遇到类似问题的人来说,你总是可以画出实际的光线并在场景中查看它,使用类似的东西

Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
Debug.Log("Did Hit");

我尝试了你的建议,但没有解决问题。我找到了raycast从未击中玩家的真正原因。TipoGun没有旋转到枪的前部。