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能利用无线鼠标和键盘存在的一些问 ...
随机推荐
- Python 爬虫:豆瓣电影Top250,包括电影导演、类型、年份、主演
结果输出到文本文件中. import codecs import requests from bs4 import BeautifulSoup headers={'User-Agent': 'Mozi ...
- .NET Core CSharp初级篇 1-5 接口、枚举、抽象
.NET Core CSharp初级篇 1-5 本节内容类的接口.枚举.抽象 简介 问题 如果你需要表示星期或者是某些状态,使用字符串或者数字是否不直观? 你是否发现,无论何种电脑,它的USB口的设计 ...
- C#3.0新增功能09 LINQ 标准查询运算符 02 查询表达式语法
连载目录 [已更新最新开发文章,点击查看详细] 某些使用更频繁的标准查询运算符具有专用的 C# 语言关键字语法,使用这些语法可以在查询表达式中调用这些运算符. 查询表达式是比基于方法的等效项更具 ...
- 2-1. 基于OpenSSL的传输子系统实现
一. 基本传输子系统程序设计 客户端可上传文件至服务器,或下载服务器上的文件 系统程序构架: 客户端 服务器 TCP建立连接 menu()-> 上传命令.下载命令 close(socket) T ...
- [剑指offer] 23. 二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路: 解法一:递归 二叉搜索树,后序遍历的数组中 ...
- hdu6395 Sequence(分段矩阵快速幂)
Sequence 题目传送门 解题思路 可以比较容易的推出矩阵方程,但是由于p/i向下取整的值在变,所以要根据p/i的变化将矩阵分段快速幂.p/i一共有sqrt(p)种结果,所以最多可以分为sqrt( ...
- hdu6396 Swordsman(贪心)
Swordsman 题目传送门 解题思路 先将每种属性排序,因为打倒怪兽会使属性增强,所以肯定是能打就打,用cnt[i]记录怪兽i已经被超过的属性数量,如果被超过的属性数为k了,则打倒此怪兽,将获得的 ...
- Mybatis generator生成工具简单介绍
Mybatis generator 其主要的功能就是方便,快捷的创建好Dao,entry,xml 加快了开发速度,使用方面根据其提供的规则配置好就OK 这里还有一个重要的开发场景,开发过程中,对数据 ...
- visionpro和halcon这两款机器视觉软件区别
很多朋友会问到visionpro和halcon这两款机器视觉软件,到底学哪个好呢,今天重码网就给大家讲一讲: 首先比较下两者的优缺点: halcon: 提供的图像算法要比Visionpro多,也就是说 ...
- netty使用EmbeddedChannel对channel的出入站进行单元测试
一种特殊的Channel实现----EmbeddedChannel,它是Netty专门为改进针对ChannelHandler的单元测试而提供的. 名称 职责 writeInbound 将入站消息写到E ...