Unity经典案例之:Fire Balls 多个圆环以及圆环的变速变向
版权申明:
- 本文原创首发于以下网站:
- 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
- 优梦创客的官方博客:https://91make.top
- 优梦创客的游戏讲堂:https://91make.ke.qq.com
- 『优梦创客』的微信公众号:umaketop
- 您可以自由转载,但必须加入完整的版权声明!
目标

- 使用脚本创建不同大小的圆环
- 使用脚本创建多个圆环
- 改变其速度与方向
创建不同大小的圆环
我们先在场景里面新建一个GameObject重命名为Disc,把坐标设置到原点(0,0,0),并把Platform底下的脚本去掉,加入到Disc下面,并把Platform脚本打开重命名为Disc,选中创建圆环的代码,并把它提取出来,提取方法的操作如下图所示:
- 选中要提取方法的代码段
- 此时会看见弹出一个方块
- 点击方块,选择“提取方法”菜单项

提取出来后重命名为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 update
void 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 frame
void 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 update
void 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 frame
void 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 update
void 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 frame
void Update()
{
this.transform.Rotate(0, rotSpeed*Time.deltaTime, 0);
}
}
Unity经典案例之:Fire Balls 多个圆环以及圆环的变速变向的更多相关文章
- Unity经典案例之:Fire Balls
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- 经典案例:那些让人赞不绝口的创新 HTML5 网站
在过去的10年里,网页设计师使用 Flash.JavaScript 或其他复杂的软件和技术来创建网站.但现在你可以前所未有的快速.轻松地设计或创造互动的.有趣好看的网站.如何创建?答案是 HTML5 ...
- javascript的理解及经典案例
js的简介: JavaScript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言. 你可以利用JavaScript轻易的做出亲切的欢迎讯息.漂亮的数字钟.有广告效 ...
- jQuery基础的工厂函数以及定时器的经典案例
1. jQuery的基本信息: 1.1 定义: jQuery是JavaScript的程序库之一,它是JavaScript对象和实用函数的封装, 1.2 作用: 许多使用JavaScript能实现的交 ...
- Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)
Linux运维之道(大量经典案例.问题分析,运维案头书,红帽推荐) 丁明一 编 ISBN 978-7-121-21877-4 2014年1月出版 定价:69.00元 448页 16开 编辑推荐 1 ...
- Altera OpenCL用于计算机领域的13个经典案例(转)
英文出自:Streamcomputing 转自:http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl- ...
- php中foreach()函数与Array数组经典案例讲解
//php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ...
- 阿里云资深DBA专家罗龙九:云数据库十大经典案例分析【转载】
阿里云资深DBA专家罗龙九:云数据库十大经典案例分析 2016-07-21 06:33 本文已获阿里云授权发布,转载具体要求见文末 摘要:本文根据阿里云资深DBA专家罗龙九在首届阿里巴巴在线峰会的&l ...
- 经典案例之MouseJack
引言:在昨天的文章<无线键鼠监听与劫持>中,我们提到今天会向您介绍一个无线键鼠的监听与劫持的经典案例,<MouseJack>:MouseJack能利用无线鼠标和键盘存在的一些问 ...
随机推荐
- 【二分讲解及例题】火车站台连锁店-C++
首先我们先来从一个小游戏理解一下二分.(摘自程序员小灰的博客) 为什么说这样效率最高呢?因为每一次选择数字,无论偏大还是偏小,都可以让剩下的选择范围缩小一半. 给定范围0到1000的整数: 第一次我们 ...
- BI之路学习笔记1--SSIS包的认识和设计
进入了新的公司,开始接触新的方向,内心激动而又兴奋,对于BI以前知道的极少,从今天开始要好好学习了~ BI的概念,功能,强大之处在此先不做赘述,BI之路先要一步一个脚印扎实做起,现在正在看的也是之前好 ...
- python面向过程编程小程序 -ATM(里面用了终端打印)
06.09自我总结 1.文件摆放 ├── xxxx │ ├── run.py │ └── fil_mode.py │ └── data_time.py │ └── loading.py │ └── d ...
- linux初学者-文件的归档和传输
1.文件归档 因为linux系统都是以文件的形式存在,所以在处理文件时有时候因为文件太多导致传输速度慢等问题,为了提高方便并且提高效率,常把文件归档,文件归档就是把多个文件变成一个归档文件. 文件 ...
- java练习---15
package cn.lyh; public class L { //斐波那契数列 public static void main(String[] args) { int []arr = new i ...
- myeclipse中更改默认jdk版本出错( Target is not a JDK root. System library was not found)
原因是我的本地jdk版本是9.0,将jdk版本更改至8.0即可导入成功. jdk9.0导入myeclipse中去会有此类问题的发生,因此没有必要使用最新的jdk版本.
- Kotlin学习快速入门(3)——类 继承 接口
类 参考链接 类定义格式 使用class关键字定义,格式如下: class T{ //属性 //构造函数 //函数 //内部类 } Java Bean类 java bean类 //java bean类 ...
- python post接口测试第一个用例日记
如下是我自己公司的一个请求,学习过程顺便记录下,都是白话语言,不那么专业,不喜勿喷! 首先看下图,post请求一般需要填写参数url, data(一般是表格类型的参数,如我们智联驾驶APP登录的参数) ...
- 真千兆路由的极限之OPENWRT MAKE, 某品牌白菜价QCA9558/QCA9880/QCA8337N纯种组合OS搭建时记
自从上次仙人梦里放了一张无字天书,解惑了WPR003N的秘诀后,渐渐的,就忘了这件这事情,连想好的评测都拖延了好多月了,毕竟路由是拿来用的,不是用来写什么陈词滥调的评测的,无意间,热爱白菜的我发现了一 ...
- Linux vim基本的使用方法
一.vim 的三种模式 (1) 插入模式 在插入模式中,才能输入文字:要进入插入模式,可以按键 “i”:如果要进入插入模式时,直接切换到下一行,可以输入“o”: (2) 命令模式 在命令模式中,主要进 ...