[Unity学习笔记:FPS游戏制作(2)] 发射子弹 您所在的位置:网站首页 unity发射子弹往下掉 [Unity学习笔记:FPS游戏制作(2)] 发射子弹

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

#[Unity学习笔记:FPS游戏制作(2)] 发射子弹| 来源: 网络整理| 查看: 265

往期博客 [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().AddForce(PlayerCamera.transform.forward * BulletSpeed);//给予子弹一个向前的推进力 Destroy(BulletGameObject,2);//销毁子弹物体 } } } 三,脚本的使用方法

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

四,最终效果

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有