前言:

这一篇章会介绍如何创建最基本的射击用子弹,示例用工程进度也往后推了许多,有时间会都整理了发出来,学艺尚浅有一些东西不能讲明白,后续学习深入会慢慢补足。另外自己魔改过的版本也是花钱买了一些模型,成品游戏应该会在一段时间后放出来,有兴趣的可以关注下,我之后应该会放个网盘链接,进入正题吧。

英文翻译(重复的就不提了):

Transform:使改变           delete:删除         prefab:预制            speed:速度         power:威力      original:原始的

射击类游戏实例

作为第一个用来发布讲解的游戏,我立马就想到了射击类游戏,当然不是第一人称射击的那种,是打小飞机累计得分的那种类型,方便魔改参数以及自行制作一些敌人的模型。

游戏相关设定:

1.在游戏中,我们将操作战舰击坠敌人的飞船,游戏开始后战舰会向前推进,消灭敌人取得分数,战舰被击落游戏才会结束。

2.战舰拥有固定装甲(血量),敌人有多种并拥有独特的飞行轨迹与装甲

3.屏幕上会显示血量、得分等内容

创建子弹

介绍:

OnBecameInvisible函数是Unity的事件函数,当可渲染的物体离开可视范围,这个函数会触发并让物体自我销毁。

Rocket类中会包含飞行速度、生存时间和威力等参数并在脱离可视范围时自我销毁。

1.找到子弹模型拖入游戏界面,创建子弹的游戏体

2.创建Rocket.cs脚本,指定给子弹游戏体

3.编写代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[AddComponentMenu("MyGame/Rocket")]
public class rocket : MonoBehaviour
{
public float m_speed = 10;
public float m_power = 1.0f; private void OnTriggerEnter(Collider other)
{
if (other.tag != "Enemy")
{
return; }
else
{
Destroy(this.gameObject);
}
}
void OnBecameInvisible()
{
if (this.enabled)
{
Destroy(this.gameObject);
} }
// Start is called before the first frame update
void Start()
{ } // Update is called once per frame
void Update()
{
transform.Translate(new Vector3(0, 0, m_speed * Time.deltaTime)); }
}

代码中定义了子弹的威力与飞行速度之后也可以直接在层级界面修改数值,并添加了自我消化的功能,现在启动游戏会发现子弹向前飞行并在一段时间后消失。

Prefab的创建与子弹的发射

介绍:

prefab可以理解为可重复使用的游戏体,简单来说就是对一个游戏体的复制粘贴,方便定义多个游戏体并且可在其他unity游戏中使用。

想要使用prefabs中的游戏体直接拖入即可。

Prefab Variant 继承于一个父Prefab, 父Prefab属性修改后:如果子Prefab的某些属性不动, 则父Prefab的属性影响子Prefab的属性, 如果对子Prefab的某些属性进行修改/覆盖, 则父Prefab的属性无法影响。

1.在Assets目录新建Prefabs文件夹,将Hierachy上的rocket拖到下面来,会跳出一个提示框,选择original prefab

2.删除原场景中的子弹游戏体

3.将子弹游戏体与主角建立联系,打开Player.cs编写代码

public Transform m_rocket;

4.回到unity,选择Player游戏体,在Inspector窗口找到脚本组件将子弹prefab拖入其中的rocket选项

5.打开Player.cs,编写代码加入Update()中

if (Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0))
{
Instantiate(m_rocket, m_transform.position, m_transform.rotation);
}

这里的代码应该就很明了,判断输入是否为空格或者左键,是就发射基于游戏体发射子弹。

再说一句:

打开游戏应该就能实现子弹的射击了,不过会发现子弹可以连续无间隔射击,加个限制就行,之后想起来再修改下,不过也是因为这个现象,可以试着做出激光武器特效,一段激光射线就是一长串连续的子弹不就很有意思了,武器的设计也可以定义出一些固定的近战用武器,定义个游戏体固定在某一处,添加物理碰撞,这边提供一些个人想法。讲解用示例不适合有过多的东西,之后会慢慢介绍花一点的玩意,最近在试着实现一些喷射特效与形态转换,我们的目标是星辰大海。

4.待添加

Unity射击实例讲解—子弹创建的更多相关文章

  1. Unity射击实例讲解—主角创建

    前言: 经过三分钟的思考决定换个标题,这两天其实游戏制作进度推了大半了,加入了许多自我创作的素材,不过想一想用来讲解的实例不该这么花哨,决定还是参照我的一些教材做一些简单的示例不然要说的东西太多,本人 ...

  2. yii2.0增删改查实例讲解

    yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ...

  3. 实例讲解Linux系统中硬链接与软链接的创建

    导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说 ...

  4. (转)使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

    使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解   本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创 ...

  5. 学习《Oracle PL/SQL 实例讲解 原书第5版》----创建账户

    通过readme.pdf创建student账户. 以下用sys账户登录时都是sysdba. 一.PL/SQL 登录oracle. SYS/123  AS SYSDBA 账户名:sys:密码:123:作 ...

  6. 源于《Unity官方实例教程 “Space Shooter”》思路分析及相应扩展

    教程来源于:Unity官方实例教程 Space Shooter(一)-(五)       http://www.jianshu.com/p/8cc3a2109d3b 一.经验总结 教程中步骤清晰,并且 ...

  7. 实例讲解Oracle数据库设置默认表空间问题

    实例讲解Oracle数据库设置默认表空间问题   实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在O ...

  8. makefile基础实例讲解 分类: C/C++ 2015-03-16 10:11 66人阅读 评论(0) 收藏

    一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Li ...

  9. 对《[Unity官方实例教程 秘密行动] Unity官方教程《秘密行动》(十二) 角色移动》的一些笔记和个人补充,解决角色在地形上移动时穿透问题。

    这里素材全是网上找的. 教程看这里: [Unity官方实例教程 秘密行动] Unity官方教程<秘密行动>(九) 角色初始设定 一.模型设置: 1.首先设置模型的动作无限循环. 不设置的话 ...

随机推荐

  1. Mac系统应该用什么软件进行清理?

    作为一枚资深的Windows系统使用者,小编刚刚转向Mac系统的怀抱时,各种不适应,Windows系统中普遍使用的360清理软件目前暂时没有Mac版本的,这就让小编很是头疼了,大家的Mac都是用的什么 ...

  2. js实现长按显示全部内容

    js实现文字超出省略号显示时长按显示全部 元素内容超出省略号显示时长按该元素,生成toast弹窗(id:toolkitContainer),以显示全部内容 #toolkitContainer { ma ...

  3. 聊聊ReentrantLock实现原理

    ReentrantLock 是常用的锁,相对于Synchronized ,lock锁更人性化,阅读性更强 从LOCK切入 考虑下面的场景如果有A,B线程,同时去执行lock.lock(Lock loc ...

  4. CSUST 4019 听党指挥(思维+模拟)

    题目链接 题目大意 给你一个长度为n的序列(n为偶数),序列为[1,2,3,....n],操作m次,进行m次操作后输出这个序列 有三种操作 1:每次将最左边的元素移到最右边,重复x次 2:每次将最右边 ...

  5. 精尽MyBatis源码分析 - Spring-Boot-Starter 源码分析

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  6. for循环与while循环

    1.两中循环的语法结构 for循环结构: for(表达式1;表达式2;表达式3) { 执行语句; } while循环结构: while(表达式1) { 执行语句; } 2.两者区别: 应用场景:由于f ...

  7. Django----Modelviewset继承

    1.modelviewset 认证.权限.限流.序列化.分页.过滤.排序 modelviewset的应用场景是: 1.主要应用于数据接口 2.对数据库的增删改查 3.在视图函数中没有很多业务逻辑需要来 ...

  8. Jmeter介绍、下载及配置

    Jmeter介绍: Apache JMeter是Apache组织开发的基于Java的压力测试工具.最初被设计用于Web应用测试,后来扩展到其他测试领域. 它可以用于测试静态和动态资源,例如静态文件.J ...

  9. 老猿学5G随笔:5G核心网中与用户数据相关的NF功能体UDM、AUSF、PCF、UDR

    在业务支撑工作中,与核心网主要的交互包括用户数据管理(含签约关系.策略数据),5G核心网中与用户数据相关的NF功能体包括UDM.AUSF和PCR以及UDR,在此只简单介绍这些NF的功能: UDM:统一 ...

  10. 第11.18节 Python 中re模块的匹配对象

    匹配对象是Python中re模块正则表达式匹配处理的返回结果,用于存放匹配的情况.老猿认为匹配对象更多的应该是与组匹配模式的功能对应的,只是没有使用组匹配模式的正则表达式整体作为组0. 为了说明下面的 ...