因此,我对C#的随机数学知识有些陌生,我学会了制作步枪,手枪等的方法。但是我想学习如何使用射线投射而不是弹丸来制造a弹枪。使用raycast时,我累了要完成1多个raycast,但是我不知道如何使它们随机化,所以现在我只能使用1个raycast。我想在拍摄时随机散布。这是脚本:

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

public class ShotGun : MonoBehaviour {
    private int pellets = 9;

    private float spreadAngle = 10f;

    private float damage = 10f;

    private float range = 1000f;

    private Camera fpsCam;

    // Use this for initialization
    void Start ()
    {
    }

    // Update is called once per frame
    void Update ()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            ShotgunRay();
        }

    }

    private void ShotgunRay()
    {
        RaycastHit hit;
        if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
        {
            Health_Armor target = hit.transform.GetComponent<Health_Armor>();

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

最佳答案

好吧,这将取决于相关the弹枪的规格。我假设您有12口径shot弹枪,通常有8枚子弹。为此,您将需要8个单独的射线广播和8个不同的“命中”对象。在大约25码处,一个标准的12号标准炮弹的直径大约为40英寸,有效范围(在减慢速度以免伤害任何物体之前的范围)大约为125码。这不是绝对的,但可以使您大致了解目标。

因此,用伪代码,我将创建8个射线广播,每个射线广播都有自己的“命中”对象。所有射线广播的长度应为114.3单位(单位使用米为度量单位,因此125码为114.3米),然后您要做的是在筒的中心开始每个射线广播,并创建一个“随机”旋转,将模拟每25码(或22.86单位)散布的40英寸(1.016单位)。您可以通过将Random()Quaternion.AngleAxis()组合在一起来实现此目的,直到获得良好的(现实的,但仍然是非常随机的)传播。

另外,我想指出一点。这些值是基于从步枪枪管中射出子弹壳而得出的。使用带有子弹的步枪枪管可以用a弹枪提供最大的制动力。因此,您可以考虑这些MAX值以及最少的武器处理量(因为a弹几乎会炸死您的手臂)。如果您在游戏中想要使用过多的shot弹枪和炮弹,并且想要最大程度的逼真度,则需要考虑当前所发射的炮弹是大头照,大头照还是子弹,并且您还需要考虑桶的类型。 Buck / birdshot可能不会在更远的范围内发挥作用,但是它们的处理有了很大的改善。

关于c# - Unity shot弹枪制作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47889977/

10-09 17:47