[Unity学习笔记:FPS游戏制作] 发射子弹————(2021.6.20学习笔记)

Posted 曾胖神父

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Unity学习笔记:FPS游戏制作] 发射子弹————(2021.6.20学习笔记)相关的知识,希望对你有一定的参考价值。

往期博客 [Unity学习笔记:FPS游戏制作(1)]角色的移动,旋转与推进上升————(2021.6.13学习笔记)

一,实现思路

制作子弹的预制体,然后在脚本的Update()中进行监听用户是否点击鼠标左键,如果用户点击鼠标左键,则加载之前制作的子弹预制体,并在枪口的附近位置生成子弹。而且考虑到枪口位置随用户视角变化,非固定,所以子弹生成位置不能为绝对位置,而是相对位置。但这里有个问题出现了,那就是子弹发射出去的时候为绝对位置(如果为相对位置的话,发射出去的子弹会随着枪口位置变化,发生变化。错误演示如下图)
在这里插入图片描述
为了解决以上的问题,一个解决办法就是,在枪口附近新建一个空物体集(Bullets),并将子弹生成为该物体集的子对象,然后因为该物体集本身也为枪口的子物体,所以保证子弹处于枪口的相对位置,最后在发射的时候调用该物体集的DetachChildren(),解除该物体集跟子弹的父子关系,让子弹发射之后为绝对位置。
解决完子弹发射的位置问题之后,只要通过Destroy()将发射后的子弹物体销毁,整个子弹发射功能就完成了。

二,实现代码

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

public class FireScript : MonoBehaviour
{
    public GameObject BulletPrefab;//子弹预制体
    public GameObject Bullets;//子弹物体集
    public Camera PlayerCamera;//玩家摄像头
    public int BulletSpeed = 800;//子弹速度
    private int index=0;//子弹计数
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Mouse0))//监测鼠标左键是否被点击
        {
            index++;//子弹计数
            GameObject BulletGameObject = Instantiate(BulletPrefab);//加载预制体
            BulletGameObject.name = "Bullet"+index;
            BulletGameObject.transform.parent = Bullets.transform;//设置子弹父对象
            BulletGameObject.transform.localPosition = new Vector3((float)(-1),0,(float)(-0.02));//在指定坐标生成子弹
            BulletGameObject.transform.rotation = PlayerCamera.transform.rotation;
            Bullets.transform.DetachChildren();//解除父子关系
            BulletGameObject.GetComponent<Rigidbody>().AddForce(PlayerCamera.transform.forward * BulletSpeed);//给予子弹一个向前的推进力
            Destroy(BulletGameObject,2);//销毁子弹物体
        }
    }
}

三,脚本的使用方法

在枪口物体下新建物体集,并将物体集和子弹预制体,玩家摄像头绑定在脚本上(如下图)。
在这里插入图片描述

四,最终效果

在这里插入图片描述

以上是关于[Unity学习笔记:FPS游戏制作] 发射子弹————(2021.6.20学习笔记)的主要内容,如果未能解决你的问题,请参考以下文章

Ruby‘s Adventrue游戏制作笔记Unity角色攻击——发射子弹

Ruby‘s Adventrue游戏制作笔记Unity角色攻击——发射子弹

Ruby‘s Adventrue游戏制作笔记Unity角色攻击——发射子弹

Ruby‘s Adventrue游戏制作笔记(十六)Unity子弹数量及其UI

Ruby‘s Adventrue游戏制作笔记(十六)Unity子弹数量及其UI

Ruby‘s Adventrue游戏制作笔记(十六)Unity子弹数量及其UI