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