Unity制作一把可以发射子弹的枪

1.制作一个简易人物(player)与枪模型(gun),把摄像头和枪拖到人物模型下让他们成为人物的子对象。然后给摄像机加一个可以用鼠标控制的代码(如下)这样就可以控制视角与枪了。

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

public class Dyuan : MonoBehaviour
{
    private Transform head;
    private Transform body;
    // Start is called before the first frame update
    void Start()
    {
        head = transform;
        body = transform.parent;
        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame
    void Update()
    {
        float mousex = Input.GetAxis("Mouse X");

        if (mousex != 0)
        {
            body.Rotate(Vector3.up, mousex * 200 * Time.deltaTime);
        }
        float mousey = Input.GetAxis("Mouse Y");
        if (mousey != 0)
        {
            head.Rotate(Vector3.left, mousey * 200 * Time.deltaTime);
        }
        if (Vector3.Angle(body.forward, head.forward) > 60)
        {
            head.Rotate(Vector3.left, mousey * -100 * Time.deltaTime);
        }

        if (Input.GetKey(KeyCode.W))
        {

            body.Translate(Vector3.forward * 5.0f * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.S))
        {

            body.Translate(Vector3.back * 5.0f * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.A))
        {

            body.Translate(Vector3.left * 5.0f * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.D))
        {

            body.Translate(Vector3.right * 5.0f * Time.deltaTime);
        }
    }
}

2.制作一枚子弹。将Sphere拖拽至Project下的Asset下使其成为一个预制体,我们可以将它的名字改为Bullet,然后再删除Hierarchy面板下的子弹。记得给子弹添加刚体属性添加刚体属性后才会有力学特征才会动。

3..接下来制作枪口,要创建一个空对象,用来发射子弹,在Hierarchy面板下单机右键,选择Create Empty,将它重命名为Bullet,然后在Scene里面拖动它的位置,使其位于枪口上,然后再将Bullet拖拽至人物下,使其成为人物的一个子物体。

4.然后制作子弹的代码,给它一个发射速度。

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

public class bullet : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        GetComponent<Rigidbody>().AddForce(transform.forward * 1800);
    }

    // Update is called once per frame
    void Update()
    {

    }
    private void OnCollisionEnter(Collision collision)
    {
        Destroy(gameObject);
    }
}

5.用UI制作界面子弹数显示和准心

6.之后用代码给枪加上换弹的动作和开枪时的火花,持续开火,射速,子弹数,之类的属性。然后把代码给枪

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

public class guncontral : MonoBehaviour
{   
    //枪口火焰生成位置
    public Transform firepoint;
    //枪口火焰物体
    public GameObject fireper;
    //子弹生成位置
    public Transform bulletpoint;
    //子弹物体
    public GameObject bulletper;
    //子弹个数
    private int bulletCount = 30;
    // 开火间隔
    private float cd = 0.07f;
    //实际开火的时间 计时器
    private float timer = 0;
    private AudioSource gunvoice;
    public AudioClip clip;
    public Text bulletcount;

    // Start is called before the first frame update
    void Start()
    {
        gunvoice = GetComponent<AudioSource>();
    }

    // Update is called once per frame
    void Update()
    {

        //计算实际开火间隔
        timer = timer + Time.deltaTime;
        if (Input.GetMouseButton(0) && bulletCount > 0 && timer > cd)
        {
            //开枪
            timer = 0;
            //火焰生成
            Instantiate(fireper, firepoint.position, firepoint.rotation);
            //子弹生成
            Instantiate(bulletper, bulletpoint.position, bulletpoint.rotation);
            bulletCount--;//bulletcount=bulletcount-1
            gunvoice.PlayOneShot(clip);
            bulletcount.text = "子弹数:" + bulletCount;//  100 "100"
        }
        if (bulletCount == 0)
        {
            timer = -1.5f;//换弹时间
            //Invoke("Reload", 2.0f);
            GetComponent<Animator>().SetTrigger("Reload");
            Reload();
        }
        
            if (Input.GetKeyDown(KeyCode.R ) && bulletCount != 30)
            {
                timer = -1.5f;
                GetComponent<Animator>().SetTrigger("Reload");
                Reload();
             }
    }
    void Reload()
    {//换弹

        bulletCount = 30;
        bulletcount.text = "子弹数:" + bulletCount;
        
    }
}

之后把对应的材料文件与代码绑定。

7.这样就可以射击了,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值