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
C# 如何在unity2D中制作枪支射击场?_C#_Unity3d - Fatal编程技术网

C# 如何在unity2D中制作枪支射击场?

C# 如何在unity2D中制作枪支射击场?,c#,unity3d,C#,Unity3d,我希望我的wepons在我的2D游戏中有一个射击场。例如,如果子弹超出射程,则销毁子弹。如果我不使用RayCast,是否有问题? 我的Wepon脚本: //Initialization public GameObject Bullet; public Transform FirePoint; //WeponStats public float BulletSpeed; public int Damage; public float Range; private float TimeBtwShot

我希望我的wepons在我的2D游戏中有一个射击场。例如,如果子弹超出射程,则销毁子弹。如果我不使用RayCast,是否有问题? 我的Wepon脚本:

//Initialization
public GameObject Bullet;
public Transform FirePoint;
//WeponStats
public float BulletSpeed;
public int Damage;
public float Range;
private float TimeBtwShots;
public float StartTimeBtwShots;

private void Start()
{

}
private void Update()
{

    if (TimeBtwShots <= 0)
    {
        if (Input.GetButton("Fire1"))
        {
            Shoot();
            TimeBtwShots = StartTimeBtwShots;

        }
    }
    else
    {
        TimeBtwShots -= Time.deltaTime;
    }

}
void Shoot()
{
    GameObject bullet2 = Instantiate(Bullet, FirePoint.position, FirePoint.rotation);
    Rigidbody2D rb = bullet2.GetComponent<Rigidbody2D>();
    rb.AddForce(FirePoint.right * BulletSpeed, ForceMode2D.Impulse); 
}
//初始化
公共游戏对象子弹;
公共转换点;
//韦蓬斯塔斯
公共交通速度;
公共财产损害;
公众浮动范围;
私人浮动时间;
公众浮标StartTimeBtwShots;
私有void Start()
{
}
私有void更新()
{

如果(TimeBtwShots延迟后,您似乎已经在销毁子弹:

Destroy(gameObject, Delay);
如果你想让子弹在经过一段距离后被摧毁,你可以用速度除以距离

Destroy(gameObject, Range / BulletSpeed);
如果你想测量动态行驶距离,你可以在子弹内记录它

void FixedUpdate()
{
    var distanceDelta = (transform.position - lastPos).magnitude;
    distanceTravelled += distanceDelta;
    lastPos = transform.position;

    if (distanceTravelled > Range) Destroy(gameObject);
}

你对你目前在一定时间后销毁子弹的方法不满意吗?如果是,为什么不?谢谢你帮助我
void FixedUpdate()
{
    var distanceDelta = (transform.position - lastPos).magnitude;
    distanceTravelled += distanceDelta;
    lastPos = transform.position;

    if (distanceTravelled > Range) Destroy(gameObject);
}