Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 为什么我的光线投射有时会朝着错误的方向拍摄_Unity3d_Virtual Reality_Raycasting - Fatal编程技术网

Unity3d 为什么我的光线投射有时会朝着错误的方向拍摄

Unity3d 为什么我的光线投射有时会朝着错误的方向拍摄,unity3d,virtual-reality,raycasting,Unity3d,Virtual Reality,Raycasting,我试着用XR手拿着一把枪,从枪前的一个游戏物体上拍摄光线投射。这把枪大部分时间都拍得很好,但有时,由于一些我脆弱的小脑袋无法理解的原因,它朝着错误的方向拍摄。它朝着随机的方向拍摄,但从来不会超过它应该在的位置的90度。这s是我的代码。[我附上了它发生的视频。][1]每次我认为我找到了一个模式,它就会改变。我所能说的就是我有理由相信它与网格碰撞器有关。但原因非常模糊。编辑:https://youtu.be/JxC4wq9nVRw 这是一个更新的视频,它更清楚地显示了问题。我还更改了冗余的if语句

我试着用XR手拿着一把枪,从枪前的一个游戏物体上拍摄光线投射。这把枪大部分时间都拍得很好,但有时,由于一些我脆弱的小脑袋无法理解的原因,它朝着错误的方向拍摄。它朝着随机的方向拍摄,但从来不会超过它应该在的位置的90度。这s是我的代码。[我附上了它发生的视频。][1]每次我认为我找到了一个模式,它就会改变。我所能说的就是我有理由相信它与网格碰撞器有关。但原因非常模糊。编辑:https://youtu.be/JxC4wq9nVRw 这是一个更新的视频,它更清楚地显示了问题。我还更改了冗余的if语句

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class GunBasic : MonoBehaviour
{   
    public Transform BulletShootPoint;
    public ParticleSystem muzzleFlash;
    public GameObject impactEffect;
    public AudioSource audioSource;
    public AudioClip audioClip;
    public float Ammo;
    public  TextMeshPro text;

    public void Fire()
    {if (Ammo > 0)
        {
            muzzleFlash.Play();
            audioSource.PlayOneShot(audioClip);


            RaycastHit hit;
            if (Physics.Raycast(BulletShootPoint.transform.position, BulletShootPoint.transform.forward, out hit) && Ammo > 0)
            {
                Debug.Log(hit.transform.name);

                GameObject impactDestroy = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));

                Destroy(impactDestroy, 2f);

            }
            Ammo -= 1f;


        }
    }
    private void Update()
    {
        text.text = Ammo.ToString();
  

    }
    public void Reload()
    {
        Ammo = 10;
    }
    public void OnTriggerEnter(Collider other)
    {
       if(other.tag == "ReloadTag")
        {

            Ammo = 10f;
        }
    }


}

这是xr interaction toolkit中的一个错误。它已被更新修复。很抱歉,我没有尽快尝试,感谢所有的帮助。

我有点不确定我到底应该在视频中看到什么^^^^,而且一般来说,你为什么要检查
Ammo>0
三次?@derHugo谢谢你的评论,在视频中你可以看到raycast sh从枪中射出错误的方向。它从门外的一个位置移动到枪的右前方它应该在的位置。枪一直没有移动,至少不足以证明光线投射发生如此巨大的变化。这可能很难看到,但位于错误位置的冲击效果就在枪的左侧外面的门。可能应该让平行光更亮。另外,我检查了三次弹药,因为我是个白痴。我会解决的,谢谢你指出。很可能是其他东西在移动/旋转你的子弹射击点,这个脚本不会在任何地方改变它。顺便说一句@derHugo是对的,你不需要检查子弹射击点mmo在任何时候,你都可以删除检查,只需将
Fire()
方法的第一行添加为
if(ammo<1)return;
@Nikaas谢谢,我也是这么想的,但我在玩的时候暂停了它,它看起来非常好。我会在早上再试一次,也许我会看到一些不同的东西,因为它有时会工作。似乎你的
BulletShootPoint
旋转与此
的旋转没有正确对齐GunBasic
对象本身…似乎随着您的观察方向而不是相机的观察方向移动