前言:

这一篇章实现物理碰撞,就是游戏体碰撞减装甲,这几天想要试着做出兼具装甲与血量的模式,可自动回复的装甲与永久损伤的血量,在一些平台上找到了不少有意思的模型,有兴趣的可以自己找找模型替换一下。

射击类游戏实例

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

游戏相关设定:

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射击游戏实例—物理碰撞的实现的更多相关文章

  1. Unity射击实例讲解—子弹创建

    前言: 这一篇章会介绍如何创建最基本的射击用子弹,示例用工程进度也往后推了许多,有时间会都整理了发出来,学艺尚浅有一些东西不能讲明白,后续学习深入会慢慢补足.另外自己魔改过的版本也是花钱买了一些模型, ...

  2. 【Unity探究】物理碰撞实验

    这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就是物理碰撞.以前没有好好研究过,一直模糊不清,到底什么条件下才可以产生物理碰撞呢?只要其中一个有Rigidbody就可以了吗?所以进 ...

  3. 【Unity】物理碰撞实验

    http://www.cnblogs.com/javawebsoa/archive/2013/05/18/3085818.html 这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就 ...

  4. 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析

    自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  5. cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检測(1)

    说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

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

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

  7. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结

    8.弹幕系统 弹幕系统概述: 弹幕系统的设计体现了射击游戏的基本要素,玩家要在敌人放出的大量子弹(弹幕)的细小空隙间闪避,能在玩家闪躲弹幕的时候给玩家带来快感,接近满屏的子弹,增加了对玩家的视觉冲击力 ...

  8. Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界

    这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...

  9. Unity3D-第一视角射击游戏

    一.新建关卡 File,Save Scene,File,New Scene,File,Save Scene as... ,Level02.unity 1.建立场景 从Assets中拖放场景模型到Hie ...

随机推荐

  1. css万能清除原理

    如果现在能有清理浮动的办法,但不至于在文档中多一个没有用的空标记,这时的效果是最好的!引入:after伪元素选择器,可以在指定的元素的内容添加最后一个子元素 .container:after{ } 如 ...

  2. DFS序专题

    牛客专题之DFS序 简介 dfs序: 每个节点在dfs深度优先遍历中的进出栈的时间序列,也就是tarjan算法中的dfn数组. 画个图理解一下: 这棵树的dfs序:1 3 2 4 2 5 6 7 6 ...

  3. Java中CLASS_PATH与注释的使用

    一.CLASS_PATH的使用 我们在安装jdk的时候,通常情况下只是在电脑的环境变量中新建一个系统变量JAVA_HOME,这个变量用于储存jdk的/bin文件夹之前路径,然后在path中使用这个系统 ...

  4. 好端端的数据结构,为什么叫它SB树呢?

    大家好,今天给大家介绍一个很厉害的数据结构,它的名字就很厉害,叫SB树,业内大佬往往叫做傻叉树.这个真不是我框你们,而是它的英文缩写就叫SBT. SBT其实是英文Size balanced tree的 ...

  5. Java基础教程——抽象类

    抽象类 抽象类是介于普通类(class)和接口(interface)之间的一种特殊类. 接口的方法都不实现,类的方法都必须实现,抽象类里的方法可以实现,可以不实现. Java 8之后接口中可以实现方法 ...

  6. java Base64算法

    Base64算法并不是加密算法,他的出现是为了解决ASCII码在传输过程中可能出现乱码的问题.Base64是网络上最常见的用于传输8bit字节码的可读性编码算法之一.可读性编码算法不是为了保护数据的安 ...

  7. 【mq读书笔记】消息消费队列和索引文件的更新

    ConsumeQueue,IndexFile需要及时更新,否则无法及时被消费,根据消息属性查找消息也会出现较大延迟. mq通过开启一个线程ReputMessageService来准时转发commitL ...

  8. eclipse 老坑巨滑之内存溢出OOM

    绪:今天接手一个古老项目,tomcat6+jdk6.被   java.lang.OutOfMemoryError: PermGen space  啪啪打脸, 网上确实有很多解决方法,主要有三种类型:一 ...

  9. WriteFile,CreateFile,ReadFile

    原文链接:https://blog.csdn.net/Jeanphorn/article/details/44982273 将数据写入一个文件.该函数比fwrite函数要灵活的多.也可将这个函数应用于 ...

  10. 【NOIP2017提高A组模拟9.17】猫

    [NOIP2017提高A组模拟9.17]猫 题目 Description 信息组最近猫成灾了! 隔壁物理组也拿猫没办法. 信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数) ...