前言:

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

射击类游戏实例

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

游戏相关设定:

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. 通过PHPExcel将Excel表文件中数据导入数据库

    1 <?php 2 header("Content-Type:text/html;charset=utf-8"); 3 include_once 'PHPExcel.php' ...

  2. 体育成绩统计/ Score

    偏水向,请部分学术控谅解 题目过长,不再描述. 很显然就是一道大模拟对吧,我在这里贡献一下我打此题的思路与过程. 或许有些奇淫巧技可以供一些没有过掉的神犇借鉴一下. 2020.11.26 中午: 昨天 ...

  3. Java基础教程——继承

    继承 一个类 可以 继承自 另一个类: 派生的类(子类)继承父类的方法和数据成员: 关键字:子类 extends 父类. public class 继承 { public static void ma ...

  4. canal部署

    转载: https://blog.csdn.net/qq_30043755/article/details/83539116 最后的binlog最后被封装为这样的一个对象: com.alibaba.o ...

  5. .net core3.1开始页面实时编译

    安装NuGet包 Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation  startup.cs 中的ConfigureSe ...

  6. 微信小程序 下拉刷新

    <scroll-view class='scroll-view-container' scroll-y="true" bindscrolltolower='scrollToL ...

  7. 文艺splay,占坑等着填

    昨天CF上去就A了前三道题,然后自闭罚坐一个小时什么也没写出来23333.似乎D题人均wa3发就很烦.还是肤浅了 今天精神状态不太好,可能是晚睡的缘故,那不如明天一起写了算了 蹲一波大选结果,蹲一波s ...

  8. iNeuOS工业互联平台,WEB组态(iNeuView)图元和数据点组合及生成新图元复用,实现拖业务

    目       录 1.      概述... 1 2.      平台演示... 2 3.      应用过程... 2 1.   概述 iNeuView视图建模Web组态平台实现图元和数据点组合及 ...

  9. 老猿学5G扫盲贴:中移动的5G计费架构中Nchf'服务化接口以及CHF中的AGF

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.关于Nchf' 在中移动企标中出现了在3GPP ...

  10. 被老猿误解的Python匿名函数lambda

    在<第2.3节 Python运算符大全>老猿这样描述lambda:"上述运算符中有个lambda,这是个lambda就是用来定义一个匿名函数的.老猿认为用处不大,具体内容大家可以 ...