[Unity3D]最简单最详细的第一人称射击教程

自学Unity3D一段时间,看到在网上有很多有关于Unity3D第一人称射击教程,但是大多数教程都比较复杂难懂,在这里我介绍一个比较简单实用的方法供大家参考,如有什么地方不对,还请大家指正。

话不多说,先来一张效果图最有意思的是这个枪能够随着人物一起动,接下来让我们一起实现这个功能吧

简要说明一下,在实现设计功能之前,这个工程已经具备了基本的行走和跳跃功能,如果对这方面有不懂的同学可以看一下我写的这个教程,简单实用,链接在这里[Unity3D]最简单最详细的第一人称角色控制器

1.在原有的基础上我们创建一个Cylinder当做枪,在这之前我们要适当调整这个Cylinder的形状,让它有枪的样子
(1)创建Cylinder,在hierarchy面板空白处单击右键,选择3D Object——Cylinder。

(2)调整大小和方向,记住要使这个Cylinder的Z轴(蓝色轴)作为枪的枪口 要Z轴的正方向,这个在后面会有相关说明,调整好了大概就是这个样子

下面这个键可以快速调整


(3)调整好后把这个Cylinder的名字改为Gun,可以单机Cylinder,右键rename,也可以单机Cylinder,然后按F2快速改名,改完名后将它拖拽至Player下,使其成为Player的一个子物体,大概就是这样。

2.接下来我们来创建子弹发射的地方
(1)首先我们要创建一个空对象,用来创造子弹并让它发射出去,在Hierarchy面板下单机右键,选择Create Empty,将它重命名为Bullet,然后在Scene里面拖动它的位置,使其位于Gun的枪口上,然后再将Bullet拖拽至Player下,使其成为Player的一个子物体。记住空对象的Z轴一定要对准外面 就是蓝色那个 因为我这个方法子弹是从这个方向出来的 不然等会就会出现一些奇怪的现象 下面这个就是Z轴对准里面 与枪口对齐后 子弹反方向射出来了 大家可不要犯这样的错啊
大概就是这样的一个效果

3.接下来我们制作一个子弹的预制体
(1)右键单击Hierarchy面板空白处,选择3D Object——Sphere创建一个球体,然后在其Transform组建下修改其大小,让它更小一点

弄好之后大概就是这样

(2)将Sphere拖拽至Project下的Asset下使其成为一个预制体,我们可以将它的名字改为Bullet
然后再删除Hierarchy面板下的Bullet。

到这一步,一个子弹的预制体就做完了,接下来我们来制作设计脚本

4.单击Player,在其下面新建一个Shoot脚本

双击Shoot,进入脚本编写

    //定义子弹预制体public GameObject BulletPrefab;//定义一个公有类型的Transform 用来实例化一个要跟随的对象public Transform BulletSpawn;//定义一个子弹发射的速度public float BulletSpeed = 20;//Update里面的语句每一帧都会执行void Update(){//判断是否按下了鼠标左键    if (Input.GetMouseButtonDown(0)){//创建一个游戏对象bullet //Instantitate(一个游戏对象,游戏对象的位置,游戏对象的角度)//我们会在外面把我们制作的子弹预制体赋值给BulletPrefab  然后用bullet来获取子弹预制体的一系列值,这个后面有图片展示//这个语句就相当于把子弹预制体的位置和角度参数给了bullet  经过编写bullet来控制子弹的一系列功能GameObject bullet = Instantiate(BulletPrefab, BulletSpawn.position, BulletSpawn.rotation) as GameObject;//我们要给子弹添加刚体属性 添加刚体属性后才会有力学特征 才会动//bullet.GetComponent<Rigidbody>().velocity代表着获取刚体的速度矢量,表示刚体的位置变化率//简单来说 这条语句代表着把一个向前的速度给这个球bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * BulletSpeed;//子弹发射后如果不销毁的话就会一直堆积  毕竟不可能百发百中//Destroy(销毁对象,多少时间后)Destroy(bullet, 2);}}

5.脚本写完后记得Ctrl+S保存一下,我们回到Unity中,给子弹添加刚体属性(这个应该在制作子弹预制体的时候就要加上的,忘记加了),添加刚体属性后才会有力学特征 才会动

同时记得把重力过勾选去掉 不然的话就会像这样 子弹会在发射的途中下落
当然了 你把BulletSpeed设置快一点的话 还是可以运动的 但是它还是会下落 类似于平抛运动 还是把它刚体里面的重力给勾掉
接着要做下面的步骤 还没弄完呢 别急着运行 这时候还运行不了啊 上面就给你们演示一下

接下来我们要将对象实例化,将预制体Bullet拖拽给bulletprefab,将Hierarchy面板下Player下的Bullet拖拽给Transform
这样大家就应该能够理解 BulletPrefab在代码里面就相当于这个拖拽进来的物体 Bullet Spawn在代码里就相当于拖拽进来的这个物体的位置 换成其它物体也一样 在Player下 Bullet是枪口 所以要获取枪口的位置 子弹从枪口里面发射出去的嘛

接下来在游戏里面按运行按钮 我们就可以运行了 效果如下但是我们会发现 随着我们屏幕摄像机的移动 枪并没有随着一起移动 还是在原来的位置没有变化 子弹也是一样

6.所以我们接下来要实现枪跟着屏幕摄像机一起动的功能 让枪口跟着枪 枪跟着摄像机 以达到三者旋转角度相同的功能 这样就能够实现文章开头的功能 所以我们写一个跟随脚本就行了 在这里 我用了一个很简单的方法 如下

(1)首先为枪口Bullet添加一个跟随相机转动的脚本 单击Player下的Bullet 添加一个脚本 我这里命名为 Follow Gun
由于我是做教程 已经写好了 它直接就有 大家还需要自己编辑 代码如下

    //创建一个公有的用于实例化的物体Follow  到时候要跟着谁转动  就把谁赋值给这个public GameObject Follow;//在脚本里面创建一个游戏对象 bullet  用于获取Follow的信息GameObject bullet;void Update(){//获取要实例化对象的信息  bullet就相当于游戏外面拖拽进来的物体了bullet = Follow;//transform.rotation也可以写成This.transform.rotation  也就是当前脚本所挂物体的角度//等于外面拖拽进来物体的角度 由于在Update方法里面  所以每帧都会更新  达到一个同步的现象transform.rotation = bullet.transform.rotation;}

接下来Ctrl+S保存,回到Unity中,将Gun拖入到Follow中(2)再给Gun添加Follow Gun脚本(名字就不要介意了 功能都一样 就不用再写一个一模一样的脚本了)

并将Main Camera拖入到Follow中

接下来我们运行Unity看看效果

如果觉得可以的话就点个赞 关注一下吧 后面还会更新很多有关于Unity3D的教程哦 o(∩_∩)o

更新文章:
[Unity3D]自动寻路/智能寻路链接

[unity3D]简单实现FPS中的射击功能相关推荐

  1. 简单的(第一人称射击)FPS游戏

    本篇文章基于上一篇文章: 使用unity3d搭建简单的场景以及第一人称角色的控制 1.给角色添加射击功能 通过射线射击,新建RayShooter.cs脚本,将该脚本添加到角色所包含的摄像机对象上,编辑 ...

  2. fps射击HTML网页游戏,关于Unity中FPS第一人称射击类游戏制作(专题十)

    当前Unity最新版本5.6.3f1,我使用的是5.5.1f1 FPS第一人称射击类游戏实例 场景搭建 1.创建Unity项目工程和文件目录,保存场景 2.导入人物模型和子弹碎片的资源包charact ...

  3. drx功能开启后_简单实用!小米手机中这些新功能真香

    小米手机作为国产机热销品牌之一,它除了有好看的外观,还有很多隐藏的实用功能,今天小编就来和大家分享5个小米手机里你不知道的功能. Al电话助理 看到陌生号码时,很多人第一反应就是挂掉,不想接听,但又担 ...

  4. C#6中的新增功能 【Unity3D亲测】

    随着Unity2017的普及,使用.NET 4X的开发者也越来越多了,下面笔者给大家介绍一下在C# 6中的新功能主要是怕自己忘记,2333,有些功能还是很实用的~ 使用Unity版本2018.2.9f ...

  5. html中怎么写一个简单的tab,html中的tab功能如何实现?

    word中的制表符tab功能,是一种与表格对齐功能类似的好用的符号,在设定字符格式时相当有用.但是在网页设计的html代码中,视乎没有tab功能,网上找的几种功能,好像都不太理想.于是就想到了一种新的 ...

  6. unity3D期末大作业,坦克射击游戏

    unity3D期末大作业,坦克射击游戏 坦克射击游戏,可以发射子弹打击物体,坦克可以撞碎墙壁,树木,有背景音效详情如下动态图:(下载链接在文章末) 制作过程: 首先,从Asset Store中下载并i ...

  7. 视频教程-Unity3D实战入门之第三人称射击游戏(TPS)-Unity3D

    Unity3D实战入门之第三人称射击游戏(TPS) 6年程序开发经验,精通C/C++/C#编程. 曾担任过Unity3d游戏开发主程和Unity3d游戏开发讲师,熟悉Unity3d的UI系统.物理引擎 ...

  8. Unity3D实战入门之第三人称射击游戏(TPS)-伍晓波-专题视频课程

    Unity3D实战入门之第三人称射击游戏(TPS)-327人已学习 课程介绍         这是一套第三人称射击游戏开发的入门基础课程. 本课程以一款小型的第三人称射击游戏为案例,手把手教你如何搭建 ...

  9. 教你学会虚幻引擎中的光线追踪功能使用,此教程必看

    在本教程中将展示虚幻引擎中的光线追踪功能.为了比较光线追踪引入的变化,我从头开始构建了一个独特的环境,其中包括各种材料和模块化资产.光线追踪是一个很棒的工具,可以让你更好地控制场景的视觉方面. 启用光 ...

最新文章

  1. Android多线程死锁定位,Java---多线程之死锁
  2. live555 源码分析: SETUP 的处理
  3. oracle知识博客链接
  4. 在wince中添加微软的雅黑字体
  5. 如何检查python是否安装了pip_如何检测和删除通过pip安装的Python包?
  6. ffdshow 源代码分析1 : 整体结构
  7. CodeVS 1576 最长严格上升子序列 (DP)
  8. java+构造函数+native_java中native的用法
  9. 怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)
  10. 论文中定性分析与定量分析的写作手法
  11. 将Android手机无线连接到Ubuntu实现唱跳Rap
  12. 什么是混合移动App开发【重点学习系列---干货十足--一文详解】
  13. win server 2008r2 相关设置
  14. 数组之concat注意事项-不更改原数组
  15. 哈!他们的“自我修养” 穆穆-movno1
  16. 通俗的讲,网络爬虫到底是什么?
  17. A nice speech——王强 at 36 Kr
  18. 设备树学习(二、设备树dts/dtsi格式)
  19. 计算机组成原理笔试,农村信用社招聘笔试--计算机组成原理重点总结.doc
  20. lenet5实现手写数字识别---python

热门文章

  1. Python课程大全(0基础就该这样学)
  2. error:无法解析的外部符号 “public: __thiscall ···该符号在函数···中被引用”
  3. 饥荒联机版Mod开发——两种帽子(十)
  4. java 文件路径怎么写_java本地文件路径怎么写
  5. Dim To Warm调色温LED灯恒流芯片NU403 NU501
  6. 基于ANSYS 2019R1全解一款双吸泵的双向流固耦合方法
  7. 位运算符之无符号右移(十进制整数)
  8. hough函数 matlab,在不使用hough函数的情况下在MATLAB中进行Hough变换
  9. MyEclise2016安装activiti插件
  10. QT + msvc2017编译器