Unity射击游戏实例—物理碰撞的实现
前言:
这一篇章实现物理碰撞,就是游戏体碰撞减装甲,这几天想要试着做出兼具装甲与血量的模式,可自动回复的装甲与永久损伤的血量,在一些平台上找到了不少有意思的模型,有兴趣的可以自己找找模型替换一下。
射击类游戏实例
作为第一个用来发布讲解的游戏,我立马就想到了射击类游戏,当然不是第一人称射击的那种,是打小飞机累计得分的那种类型,方便魔改参数以及自行制作一些敌人的模型。
游戏相关设定:
1.在游戏中,我们将操作战舰击坠敌人的飞船,游戏开始后战舰会向前推进,消灭敌人取得分数,战舰被击落游戏才会结束。
2.战舰拥有固定装甲(血量),敌人有多种并拥有独特的飞行轨迹与装甲
3.屏幕上会显示血量、得分等内容
4.待添加
涉及的英文:
enemy:敌人 box collider:盒碰撞器 physics:物理 Gravity: 重力 Rigidbody:刚体 Kinematic:运动学的 Trigger: 触发
介绍:
1.UpdaMove函数用来执行敌人的移动,使用了Sin函数使数值在-1~1之间循环往复实现往复运动。
2.Time.time是游戏的进行时间。
3.other.tag=="PlayerRocket"比较字符串判断碰撞体是否为主角子弹。
4.Rocket rocket=other.GetComponent<Rocket>()语句获得了对方碰撞体的Rocket脚本组件。
5.m_life-=rocket.m_power语句会逐步减少装甲,到0时使用Destory消除游戏体。
操作:
1.创建Enemy.cs脚本,编写代码实现敌人游戏体的移动
protected virtual void UpdateMove()
{
float rx = Mathf.Sin(Time.time) * Time.deltaTime; transform.Translate(new Vector3(rx, 0, -m_speed * Time.deltaTime)); }
2.建立敌人游戏体的prefab,并将Enemy脚本指定给它
3.给敌人游戏体添加碰撞体,【Component】—【Physics】—【Box Collider】,在Inspector窗口找到【Is Trigger】,勾选上

4.添加刚体组件,【Component】—【Physics】—【Rigidbody】,取消【Use Gravity】,勾选【Is Kinematic】

5.给主角重复上述操作
6.【Edit】—【Project Settings】—【Tags and Layers】,新建新的Tag,PlayerRocket和Enemy,选中敌人的prefab修改tag为Enemy,子弹的tag为PlayerRocket,主角的tag为Player(内置的没有就自己创建)

7.打开Rocket.cs编写代码实现子弹的碰撞消失
private void OnTriggerEnter(Collider other)
{
if (other.tag != "Enemy")
{
return; }
else
{
Destroy(this.gameObject);
}
}
8.打开Player.cs编写代码实现主角的碰撞消失
private void OnTriggerEnter(Collider other)
{
if (other.tag != "PlayerRocket"){
m_life -= 1;
if (m_life <= 0)
{
Destroy(this.gameObject);
} }
}
9.打开Enemy.cs编写代码实现敌人的碰撞消失与飞出屏幕外自我消失
using System.Collections;
using System.Collections.Generic;
using UnityEngine; [AddComponentMenu("MyGame/Enemy")]
public class Enemy : MonoBehaviour
{
public float m_speed = 1;
public float m_life = 10;
protected float m_rotspeed = 30; public Renderer m_renderer;
internal bool m_isActiv = false; void OnTriggerEnter(Collider other)
{
if (other.tag == "PlayerRocket")
{
rocket rocket = other.GetComponent<rocket>();
if (rocket != null)
{
m_life -= rocket.m_power;
if (m_life <= 0)
{
Destroy(this.gameObject);
} }
}
else if (other.tag == "Player")
{
m_life = 0;
Destroy(this.gameObject);
}
}
// Start is called before the first frame update
void Start()
{ m_renderer = this.GetComponent<Renderer>(); } private void OnBecameVisible()
{
m_isActiv = true;
} // Update is called once per frame
void Update()
{
UpdateMove(); if (m_isActiv && !this.m_renderer.isVisible) // 如果移动到屏幕外
{
Destroy(this.gameObject); // 自我销毁
}
} protected virtual void UpdateMove()
{
float rx = Mathf.Sin(Time.time) * Time.deltaTime; transform.Translate(new Vector3(rx, 0, -m_speed * Time.deltaTime)); } }
再说一句:
突然发现很多简单预置函数没有说明,比如说Vector3,之后涉及多了另说明吧,另外像创建碰撞体时候涉及到重力之类的,后面有用到的具体实例说起来应该会很简单,
Unity射击游戏实例—物理碰撞的实现的更多相关文章
- Unity射击实例讲解—子弹创建
前言: 这一篇章会介绍如何创建最基本的射击用子弹,示例用工程进度也往后推了许多,有时间会都整理了发出来,学艺尚浅有一些东西不能讲明白,后续学习深入会慢慢补足.另外自己魔改过的版本也是花钱买了一些模型, ...
- 【Unity探究】物理碰撞实验
这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就是物理碰撞.以前没有好好研究过,一直模糊不清,到底什么条件下才可以产生物理碰撞呢?只要其中一个有Rigidbody就可以了吗?所以进 ...
- 【Unity】物理碰撞实验
http://www.cnblogs.com/javawebsoa/archive/2013/05/18/3085818.html 这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就 ...
- 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析
自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检測(1)
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- Unity射击实例讲解—主角创建
前言: 经过三分钟的思考决定换个标题,这两天其实游戏制作进度推了大半了,加入了许多自我创作的素材,不过想一想用来讲解的实例不该这么花哨,决定还是参照我的一些教材做一些简单的示例不然要说的东西太多,本人 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结
8.弹幕系统 弹幕系统概述: 弹幕系统的设计体现了射击游戏的基本要素,玩家要在敌人放出的大量子弹(弹幕)的细小空隙间闪避,能在玩家闪躲弹幕的时候给玩家带来快感,接近满屏的子弹,增加了对玩家的视觉冲击力 ...
- Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界
这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...
- Unity3D-第一视角射击游戏
一.新建关卡 File,Save Scene,File,New Scene,File,Save Scene as... ,Level02.unity 1.建立场景 从Assets中拖放场景模型到Hie ...
随机推荐
- ssh命令的常用使用场景
目录 一.最简单的登陆 二.登陆+执行命令 三.端口转发 四.参考 一.最简单的登陆 就是简单登陆一下主机,默认端口22 ssh {hostname}@{host_ip} ➜ Charles ssh ...
- CollectionUtils和StringUtils
1.StringUtils(常用-用来操作String的字符串)1.1 判断某字符串是否为空isEmpty StringUtils.isEmpty(null) = true StringUtils.i ...
- C构造类型 数组
一.数组是什么 一组有个固定大小.相同数据类型的数据的集合. 数组可以分为:一维数组.二维数组.三维数组....(维数不止一维:多维数组) 表格 : 行和列(二维数组) 二.一维数组 1.一般形式 类 ...
- http 文件上传
参考https://www.cnblogs.com/yuwei0911/p/8601542.html
- redis-cli 持久化,复制,哨兵,事务,流水线
一.持久化: 快照文件RDB 保存"开始"创建新快照一刻的内存快照,创建过程的内存变化不会被记录 创建快照的办法有几种 1.客户端可以通过想Redis发送BGSAVE来创建一个快照 ...
- 【Java】Java socket通信使用read,readline函数的阻塞问题
Socket通信是Java网络编程中比较基础的部分,其原理其实就是源ip,源端口和目的ip,目的端口组成的套接字通信.其底层还设及到了TCP协议的通信. Java中的Socket通信可以通过客户端的S ...
- MIT-6.005软件构建
L01 Static Typing 主要对比Java和Python Java:静态语言,运行之前所有变量都要声明.traps:整型相除还是整型,5/2=2.数值溢出,20亿*2结果是负数,这个bug不 ...
- 第9.11节 Python中IO模块文件打开读写操作实例
为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...
- bugkuctf 这 是 一 个 神 奇 的 登 录 界 面
首先结合源码可以看出这是一道sql注入题. 然后开始萌新的日常操作,尝试单引号闭合,可是并没有用,而且因为单引号注入的题太多,导致并没有立刻开始尝试双引号,之后想起双引号(对,双引号木得牌面)得到如下 ...
- clion2020最新安装破解版教程 内含激活码、破解补丁、无限重置时间插件
clion是一款开发C.C++等相关程序的利器,到目前为止已经更新到2020.3版本啦!还没有升级的小伙伴们赶紧升级啦,本文教大家如何安装clion2020.3版本并且破解,此方法亲测100%可以永久 ...