Unity经典案例之:Fire Balls 多个圆环以及圆环的变速变向

2023-10-09 23:50

本文主要是介绍Unity经典案例之:Fire Balls 多个圆环以及圆环的变速变向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

版权申明:

  • 本文原创首发于以下网站:
  1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
  2. 优梦创客的官方博客:https://91make.top
  3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
  4. 『优梦创客』的微信公众号:umaketop
  • 您可以自由转载,但必须加入完整的版权声明!

目标

730245-20190822091113425-1674981148.gif

  • 使用脚本创建不同大小的圆环
  • 使用脚本创建多个圆环
  • 改变其速度与方向

创建不同大小的圆环

  • 我们先在场景里面新建一个GameObject重命名为Disc,把坐标设置到原点(0,0,0),并把Platform底下的脚本去掉,加入到Disc下面,并把Platform脚本打开重命名为Disc,选中创建圆环的代码,并把它提取出来,提取方法的操作如下图所示:
    • 选中要提取方法的代码段
    • 此时会看见弹出一个方块
    • 点击方块,选择“提取方法”菜单项
      730245-20190822091127673-1174025140.png
  • 提取出来后重命名为CreatArch(方便以后打开项目看到后不会忘记),并把代码修改如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.ProBuilder;public class Disc : MonoBehaviour
{public Material mat;//圆环的材质public Transform xRig;//// Start is called before the first frame updatevoid Star(){CreatArch(8,Random.Range(20,80),0);}/// <summary>/// 创建一个任意大小的圆环/// </summary>/// <param name="radius">半径</param>/// <param name="deg">角度</param>/// <param name="rot">初始旋转(绕y轴)</param>private void CreatArch(int radius, int deg, int rot){//创建圆环ProBuilderMesh pbMesh = ShapeGenerator.GenerateArch(PivotLocation.FirstVertex,  deg, radius, 0.5f, 1, 20, true, true, true, true, true);pbMesh.GetComponent<MeshRenderer>().material = mat;//使圆环平躺pbMesh.transform.Rotate(-90, 0, 0);//设置圆环的父节点,使其绕着父节点公转(父节点默认创建在原点)xRig = new GameObject("xRig").transform;pbMesh.transform.SetParent(xRig,false);xRig.SetParent(this.transform,false);}// Update is called once per framevoid Update(){xRig.Rotate(0, 1, 0);}
}

创建多个圆环

打开Disc脚本,并编写更改代码如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.ProBuilder;public class Disc : MonoBehaviour
{public Material mat;//圆环的材质public int ArchNum = 3;// Start is called before the first frame updatevoid Star(){for(int i = 0;i<ArchNum;i++){int avgDeg = 360/ArchNum;//每个圆环占的角度CreatArch(8,Random.Range(20,80),i*avgDeg);//携程StartCoroutine(ChangeSpeed());}}IEnumerator ChangeSpeed(){while (true){yield return new WaitForSeconds(Random.Range(1f, 3f));rotSpeed = Random.Range(-120, 120);}}/// <summary>/// 创建一个任意大小的圆环/// </summary>/// <param name="radius">半径</param>/// <param name="deg">角度</param>/// <param name="rot">初始旋转(绕y轴)</param>private void CreatArch(int radius, int deg, int rot){//创建圆环ProBuilderMesh pbMesh = ShapeGenerator.GenerateArch(PivotLocation.FirstVertex,  deg, radius, 0.5f, 1, 20, true, true, true, true, true);pbMesh.GetComponent<MeshRenderer>().material = mat;//使圆环平躺pbMesh.transform.Rotate(-90, 0, 0);//设置圆环的父节点,使其绕着父节点公转(父节点默认创建在原点)Transform xRig = new GameObject("xRig").transform;pbMesh.transform.SetParent(xRig,false);//设置圆环初始在圆盘的旋转角度xRig.Rotate(0,rot,0);Transform yRig = new GameObject("yRig").transform;xRig.SetParent(yRig,false);yRig.SetParent(this.transform,false)}// Update is called once per framevoid Update(){this.transform.Rotate(0, 1, 0);}
}

这样每次启动游戏我们就能看到场景里有多个圆环了

改变圆环的旋转速度以及方向

打开我们的Disc脚本,并添加一个共有变量名为(float类型)rotSpeed = 90,并修改我们Update里面的代码,然后添加一个携程,如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.ProBuilder;public class Disc : MonoBehaviour
{public Material mat;//圆环的材质public int ArchNum = 3;public float rotSpeed = 90;// Start is called before the first frame updatevoid Star(){for(int i = 0;i<ArchNum;i++){int avgDeg = 360/ArchNum;//每个圆环占的角度CreatArch(8,Random.Range(20,80),i*avgDeg);}}/// <summary>/// 创建一个任意大小的圆环/// </summary>/// <param name="radius">半径</param>/// <param name="deg">角度</param>/// <param name="rot">初始旋转(绕y轴)</param>private void CreatArch(int radius, int deg, int rot){//创建圆环ProBuilderMesh pbMesh = ShapeGenerator.GenerateArch(PivotLocation.FirstVertex,  deg, radius, 0.5f, 1, 20, true, true, true, true, true);pbMesh.GetComponent<MeshRenderer>().material = mat;//使圆环平躺pbMesh.transform.Rotate(-90, 0, 0);//设置圆环的父节点,使其绕着父节点公转(父节点默认创建在原点)Transform xRig = new GameObject("xRig").transform;pbMesh.transform.SetParent(xRig,false);//设置圆环初始在圆盘的旋转角度xRig.Rotate(0,rot,0);Transform yRig = new GameObject("yRig").transform;xRig.SetParent(yRig,false);yRig.SetParent(this.transform,false)}// Update is called once per framevoid Update(){this.transform.Rotate(0, rotSpeed*Time.deltaTime, 0);}
}

转载于:https://www.cnblogs.com/raymondking123/p/11392431.html

这篇关于Unity经典案例之:Fire Balls 多个圆环以及圆环的变速变向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/176424

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固 通俗易懂版)

《MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固通俗易懂版)》本文主要讲解了MySQL中的多表查询,包括子查询、笛卡尔积、自连接、多表查询的实现方法以及多列子查询等,通过实际例子和操... 目录复合查询1. 回顾查询基本操作group by 分组having1. 显示部门号为10的部门名,员

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多