Unity3D游戏开发--基础游戏 SpaceShooter学习笔记(运动、销毁相关脚本)

2023-11-01


陨石移动分为直线运动和旋转
因为子弹的发射也是直线运动,所以直线运动和旋转分开,写两个脚本,子弹和陨石的直线运动公用一个脚本。

角速度脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AngleRate : MonoBehaviour {
    Rigidbody rd;
    public float Mulity=10;
    // Use this for initialization
    void Start () {
        rd = this.GetComponent<Rigidbody>();
        rd.angularVelocity = Random.insideUnitSphere * Mulity;//一个随机的初始的角速度

    }
	
	// Update is called once per frame
	void Update () {
      //如果角速度写在这里,就会出现不停变换角速度的情况——摇摇晃晃的运动而不是滚动
    }
}

直线运动脚本

注意陨石是从上往下直线运动,所以在陨石的Inspector面板中要将speed赋负值。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move: MonoBehaviour {
    Rigidbody rd;

    public float speed= 10f;
    void Start () {
        rd = this.GetComponent<Rigidbody>();
        rd.velocity = transform.forward*speed;//向前运动
    }

}

陨石子弹回收脚本

未被子弹击中的陨石和没有击中陨石的子弹,不能让它们一直存活着。创建一个cube,大小与背景相符,取消它的渲染(Mesh Filter和Mesh Render),留下刚体rigidbody和盒子碰撞器Box Collider。设置当物体与cube碰撞销毁该物体。销毁的脚本如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Destroy : MonoBehaviour {

    private void OnTriggerExit(Collider other)
    {
        Destroy(other.gameObject);
    }

}

这个脚本是添加在cube上的,碰到cube的物体销毁。做的时候为了观察触发器的触发时间所以用了OnTriggerExit方法,逻辑上用OnTriggerEnter比较合适。不过在这个项目里面没什么,我也就没有改了。

击中销毁脚本

GameController 是控制游戏流程的脚本。在另外一篇博客中会写到。
这段代码涉及到的碰撞有两种,陨石撞到子弹、陨石撞到飞机。
陨石撞到飞机游戏结束。所以调用了GameOver方法。
同样的,这里两个爆炸效果设置为public,从unity那边直接拖拉赋值引用。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DestroyByCollision : MonoBehaviour {
    public GameObject asExprosion;
    public GameObject plExprosion;
    private GameController gameController;
    public int perScore=10;
    private void Start()
    {
        GameObject gameObject = GameObject.FindWithTag("GameController");
        if (gameObject != null)
        {
            gameController = gameObject.GetComponent<GameController>();
        }
        if (gameController == null)
            Debug.Log("gameController==null");
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Boundary")
        {
            return;//这是判断如果碰到的是边界就不进行操作
        }

        if (other.gameObject.tag == "Player")
        {//撞到飞机
         
            Instantiate(plExprosion, other.transform.position, other.transform.rotation);//实例化一个飞机爆炸效果
            gameController.GameOver();
        }
        Destroy(other.gameObject);
        gameController.AddScore(perScore);//击中陨石,加分
        Destroy(this.gameObject);
        Instantiate(asExprosion, transform.position, transform.rotation);
		//实例化一个陨石爆炸效果

    }
}

爆炸效果的回收

上面一个脚本实例化的爆炸效果,如果没有回收的话会一直停留在原地,尽管我们看不见。所以还要写一个回收爆炸效果的脚本。只要生命周期到了就销毁,爆炸效果本身是素材,Inspector面板中可以设置生存周期。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DestroyExplosion : MonoBehaviour {

    // Use this for initialization
    public int life;
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        Destroy(this.gameObject, life);
      
	}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3D游戏开发--基础游戏 SpaceShooter学习笔记(运动、销毁相关脚本) 的相关文章

  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • (const T v) 在 C 中从来都不是必需的,对吗?

    例如 void func const int i 在这里 const是不必要的 因为所有参数都是按值传递的 包括指针 真的吗 C 中的所有参数确实都是按值传递 这意味着无论您是否包含该参数 实际参数都不会改变const or not 然而
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 如何生成 appsettings..json 文件?

    我有一个 ASP NET Core 2 WebAPI 它将部署在以下环境中 INT QA STAGE 生产环境 基于上述 我需要有appsettings
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • OpenCV-图像梯度与边缘提取

    文章目录 图像梯度与边缘提取 Sobel和Scharr算子 cv2 Sobel cv2 convertScaleAbs cv2 Scharr 示例 Laplacian算子 cv2 Laplacian 示例 canny边缘提取 cv2 can
  • “互联网从此没有 BAT”

    燃财经 ID rancaijing 原创 作者 黎明 编辑 魏佳 长期被唱衰的百度 终于到了正式告别BAT的关键时刻 过去30天 受业绩下滑和高管离职等因素影响 百度的股价跌去30 市值蒸发200亿美金 美团趁势赶上 市值一举超越百度 正式
  • 华为OD机试 - 报文回路(Java & JS & Python)

    题目描述IGMP 协议中响应报文和查询报文 是维系组播通路的两个重要报文 在一条已经建立的组播通路中两个相邻的 HOST 和 ROUTER ROUTER 会给 HOST 发送查询报文 HOST 收到查询报文后给 ROUTER 回复一个响应报
  • Incorrect string value: ‘\xE7\x94\x9F\xE4\xBA\xA7...‘ for column ‘ylname‘ at row 1

    1 修改数据库字符集 alter database db new 数据库名 charset utf8mb4 2 修改表字符集 alter table tb 表名 charset utf8mb4 3 修改表字符集和校验规则 alter tab
  • 【第四章:OpenCv阈值分割/二值化(单通道、多通道图片)总结】

    第四章 OpenCv阈值分割 二值化 单通道 多通道图片 总结 0 前言 1 基础知识 1 1 什么是算子 1 2 图像处理中的图像分割技术 1 3 单通道图片的阈值分割 1 4 推荐文章链接 2 灰度图分割 2 1 灰度直方图 2 2 简
  • 在Linux中利用Service命令添加系统服务及开机自启动

    近期由于做嵌入式项目需要 要求将编写的程序在板载系统开机时自启动 这里做个笔记 备忘 1 概念 通过查资料发现linux启动服务是用SERVICE COMMAND 这里的command命令本身也是一个脚本 比如说 service netwo
  • arduino控制RFID门禁卡

    一 实物连接 二 代码实现 include rfid h include
  • NOIp2003 传染病控制

    题目描述 给出一棵树 其中1为根 1号有病 每天向下传染一代 每天可以断一条边 求最小传染数 代码 include
  • IDEA2020.1启动SpringBoot项目出现java程序包:xxx不存在

    Error 3 38 java 程序包org springframework stereotype不存在 Error 4 47 java 程序包org springframework web bind annotation不存在 Error
  • 如何更新anaconda中的所有库(包含自定义环境更新)

    更新base环境下的所有库直接按照以下代码 以管理员身份启动 Anaconda Prompt 升级conda 升级Anaconda前需要先升级conda conda update conda 升级anaconda conda update
  • GBDT模型原理及Python案例分析

    GBDT模型原理及Python案例分析 Gradient Boosting Decision Trees GBDT 是一种常用的机器学习方法 它可以应用于回归和分类问题 相比于其他机器学习模型 GBDT模型具有更高的精确度和更好的泛化能力
  • STM32 进阶教程 12 - M4的硬件乘法器使用

    前言 Cortex M4支持硬件浮点运算单元 有些厂商直接说成DSP模块 本节将给大家介绍STM32F407芯片中硬件浮点运算单元中的使用及带来的性能对比 示例详解 基于硬件平台 正点源子的stm32f4 探索者开发板 MCU 的型号是 S
  • 华为OD机试真题-挑选字符串【2023.Q1】

    题目描述 给定a z 26个英文字母小写字符串组成的字符串A和B 其中A可能存在重复字母 B不会存在重复字母 现从字符串A中按规则挑选一些字母可以组成字符串B挑选规则如下 1 同一个位置的字母只能挑选一次 2 被挑选字母的相对先后顺序不能被
  • Unity中两种播放器

    一 Animator动画播放器 1 简单搭建UI 通过Slider来控制Cube当前状态动画的播放 2 给Cube加上Animator组件 做两个简单的动画 随便做个来回移动的动画就行 注意要关闭动画的循环播放 3 给摄像机挂在脚本 并拖拽
  • sql注入漏洞测试2(初级篇)--为了女神小芳^o^

    今天的的靶场是来自封神台的一个sql注入靶场 图片如下 点击进入传送门 结果如下图所示 先观察网站的url 查看是否有sql注入特征的信息 结果发现没有什么有用信息 但是图片下面有一个超链接 点进去看看 进去之后看到了网站的url有我们想要
  • C++ 数组详解

    C 支持数组数据结构 它可以存储一个固定大小的相同类型元素的顺序集合 数组是用来存储一系列数据 但它往往被认为是一系列相同类型的变量 1 数组初始化 2 char 数组 3 指针 动态数组 1 数组初始化 在 C 中要声明一个数组 需要指定
  • ENVI汉化教程

    ENVI 5 3汉化教程 向上兼容 提示 此教程用的是官方的方法 非第三方的插件 此办法仅适用于ENVI5 3以上的版本 前言 ENVI The Environment for Visualizing Images 是一个完整的遥感图像处理
  • 欧科云链OKLink全新推出Onchain AML服务 助力新金融合规健康发展

    据香港大公报报道 为期两天的全球高端经济峰会2023格林威治经济论坛 GreenwichEconomicForum 下称GEF论坛 于6月15日在香港交易所举办 欧科云链控股有限公司 下称 欧科云链 股票代码 01499 HK 受邀出席 并
  • Object slicing(对象切片)

    关于对象切片Thinking in C 中有这么一段话 If you upcast to an object instead of a pointer or reference something will happen that may
  • Unity3D游戏开发--基础游戏 SpaceShooter学习笔记(运动、销毁相关脚本)

    运动 销毁相关脚本 角速度脚本 直线运动脚本 陨石子弹回收脚本 击中销毁脚本 爆炸效果的回收 陨石移动分为直线运动和旋转 因为子弹的发射也是直线运动 所以直线运动和旋转分开 写两个脚本 子弹和陨石的直线运动公用一个脚本 角速度脚本 usin