往期博客 [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游戏制作(2)] 发射子弹————(2021.6.20学习笔记)相关推荐

  1. [Unity学习笔记:FPS游戏制作(3)]子弹拖尾,碰撞与枪口火焰效果

    往期博客[Unity学习笔记:FPS游戏制作(2)] 发射子弹----(2021.6.20学习笔记) 文章目录 一,实现思路 二,粒子效果的实现 (1)子弹拖尾特效的实现 (2)枪口火焰特效的实现 ( ...

  2. 【Unity】U3D TD游戏制作实例(一)创建敌人、加载预制件

    文章目录 前言 本章实现效果 场景和敌人 文件目录结构 场景层次结构(Hierarchy) 处理模型 指定GameScript脚本 运行游戏 前言 TD(炮台防守)类游戏是比较经典的游戏类型,当年在 ...

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

    文章目录 一,什么是FPS游戏 二,功能实现思路与过程 (1)新建角色 (2)实现移动功能的思路 (3)实现旋转功能的思路 (4)实现推进上升功能的思路 (5)具体代码 (5)脚本的使用方法 (6)最 ...

  4. 【笔记】游戏制作技巧——3

    自动瞄准机制 准星辅助 准星接近的时候自动瞄准 或者是接近后进行标记 标记后一定时间范围内自动追踪 通过显示一部分的身体动作特征来表达动作 更加准确直观 如跑步时枪支的晃动幅度 滑动时镜头中出现脚 要 ...

  5. Python_从零开始学习_(52) 飞机大战_发射子弹

    1.  设计 英雄 和 子弹 类 英雄需求 游戏启动后,  英雄 出现在屏幕的 水平中间 位置,  距离 屏幕底部 120 像素 英雄 每隔 0.5 秒发射一次子弹,  每次 连发三枚子弹 英雄 默认 ...

  6. 笔记-【游戏制作教程】30分钟制作一款游戏 (1)【Unity】

    本文只记录重要知识点以及涉及到的脚本 API,详细教学过程:视频链接 . 本文中大量关于 API 的描述来自 Unity 官方文档 . 另:学完之后发现这个教程非常非常像这个 Unity 官方教程 . ...

  7. 【Unity】U3D TD游戏制作实例(三)相机管理器、生成敌人优化、敌人血槽小组件

    文章目录 相机管理器 调整相机 敌人类优化 融合导航测试代码 敌人移动速度 销毁对象 加载敌人配置 敌人生成方式优化 血槽组件 相机管理器 调整相机 首先将主相机调整为正交镜头,这样可以防止模型畸变. ...

  8. 【unity】快速了解游戏制作流程-制作九宫格简单游戏demo

    前言 hi~大家好呀!欢迎来到我的unity学习笔记系列~,本篇我会简单的记录一下游戏流程并且简单上手一个通过九宫格移动到指定位置的小游戏,话不多说,我们直接开始吧~ 本篇源自我看B站一位up主的视频 ...

  9. 【Unity】U3D TD游戏制作实例(四)建造防御塔:防御塔生成器、一个int代表多选框,圆上任意点位的坐标计算、制作防御塔预制件

    文章目录 本章内容介绍 制作生成器 生成器Hierarchy 高亮显示生成器 制作箭塔菜单 将创建菜单对齐到选中的生成器 动态生成按钮 动态计算按钮坐标 制作预制件 最终运行效果 本章内容介绍 由于目 ...

最新文章

  1. 测试驱动开发与行为驱动开发中的测试先行方法
  2. 华为路由器静态路由配置
  3. flowable更换数据源与连接池
  4. mysql 共享表空间存储_MySQL InnoDB共享表空间
  5. python怎么做软件界面_python – 如何自定义桌面应用程序的标题栏和窗口
  6. Web SCADA 电力接线图工控组态编辑器 1
  7. Oracle的重做日志
  8. matlab frontier,使用Matlab计算Efficient frontier
  9. Vue3.0 项目创建
  10. C#调用报表生成器成功案例示例研究
  11. 邮件群发系统 php,QQ邮箱群发PHP源码
  12. 产权登记在未成年子女名下,离婚时应如何处理
  13. paixiao-App技术支持
  14. WiFi大师专业版4.1.4独立源码
  15. python word 插入转下页及接上页(win32com)
  16. oracle中正则表达式规则,Oracle SQL 正则表达式
  17. 福布斯:美国Top 50金融科技公司简介
  18. SQL数据库的组合查询和统计查询
  19. 微软C#中的CHART图表控件
  20. 中国的股市值得价值投资吗?

热门文章

  1. 海天酱油为美味而战,引领调味行业不断向前
  2. libevent使用教程
  3. 【web前端】JavaScript DOM元素(节点的创建appendChild(),删除removeChild(),修改replaceChild())
  4. vue3 + vite + ts + pinia + yarn
  5. P3628 [APIO2010]特别行动队
  6. 设置input只能输入数字
  7. 【flash】连连看小游戏
  8. 使用kubeadm部署一个K8s集群
  9. 数据中心基础设施管理 (DCIM)
  10. 1.3.1 python解析excel格式文件