版权申明:

  • 本文原创首发于以下网站:
  1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
  2. 优梦创客的官方博客:https://91make.top
  3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
  4. 『优梦创客』的微信公众号: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 多个圆环以及圆环的变速变向的更多相关文章

  1. Unity经典案例之:Fire Balls

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  2. 经典案例:那些让人赞不绝口的创新 HTML5 网站

    在过去的10年里,网页设计师使用 Flash.JavaScript 或其他复杂的软件和技术来创建网站.但现在你可以前所未有的快速.轻松地设计或创造互动的.有趣好看的网站.如何创建?答案是 HTML5 ...

  3. javascript的理解及经典案例

    js的简介: JavaScript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言. 你可以利用JavaScript轻易的做出亲切的欢迎讯息.漂亮的数字钟.有广告效 ...

  4. jQuery基础的工厂函数以及定时器的经典案例

    1. jQuery的基本信息:  1.1 定义: jQuery是JavaScript的程序库之一,它是JavaScript对象和实用函数的封装, 1.2 作用: 许多使用JavaScript能实现的交 ...

  5. Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)

    Linux运维之道(大量经典案例.问题分析,运维案头书,红帽推荐) 丁明一 编   ISBN 978-7-121-21877-4 2014年1月出版 定价:69.00元 448页 16开 编辑推荐 1 ...

  6. Altera OpenCL用于计算机领域的13个经典案例(转)

    英文出自:Streamcomputing 转自:http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl- ...

  7. php中foreach()函数与Array数组经典案例讲解

    //php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ...

  8. 阿里云资深DBA专家罗龙九:云数据库十大经典案例分析【转载】

    阿里云资深DBA专家罗龙九:云数据库十大经典案例分析 2016-07-21 06:33 本文已获阿里云授权发布,转载具体要求见文末 摘要:本文根据阿里云资深DBA专家罗龙九在首届阿里巴巴在线峰会的&l ...

  9. 经典案例之MouseJack

    引言:在昨天的文章<无线键鼠监听与劫持>中,我们提到今天会向您介绍一个无线键鼠的监听与劫持的经典案例,<MouseJack>:MouseJack能利用无线鼠标和键盘存在的一些问 ...

随机推荐

  1. mac环境下java项目无创建文件的权限

    1.问题: 先抛问题,由于刚刚换用mac环境,之前windows上开发的代码调试完毕,还未上线.之后上线部署之前,tl直连测试本地环境(mac)环境,功能无法使用,显示java.io.IOExcept ...

  2. 【DFS练习】Pku1950 Dessert-C++

    这道题和这道题很类似. 这里还是说一下坑点,因为前一道题'等式'的加数只有9个,但是这道题目最大到了15,所以在选择不加符号的时候需要判断是用100去乘还是用10去乘就可以了. 基本代码稍微把相关的9 ...

  3. 【动态规划DP】传娃娃-C++

    传娃娃 描述 学习空闲之余,小信经常带着同学们做游戏,最近小信发明了一个好玩的新游戏:n 位同学围成一个圈,同学 A 手里拿着一个布娃娃.小信喊游戏开始,每位手里拿着娃娃的同学可以选择将娃娃传给左边或 ...

  4. linux中type 、file、stat三者的区别

    1.type 用来查看命令类型,以区别是内部命令还是外部命令 示例:[root@localhost ~]# type cd cd 是 shell 内嵌    [root@localhost ~]# t ...

  5. SQL SERVER Suspect(质疑/挂起) 状态恢复

    数据库服务器,在断电时,偶尔会出现Suspect状态,导致数据库无法使用. 解决办法如下: 数据库名带‘[]’可以避免库名中带‘.’等特殊符号的情况. USE [master]GOALTER DATA ...

  6. TreeMap 还能排序?分析下源码就明白了

    Java 中的 Map 是一种键值对映射,又被称为符号表或字典的数据结构,通常使用哈希表来实现,但也可使用二叉查找树.红黑树实现. HashMap 基于哈希表,但迭代时不是插入顺序 LinkedHas ...

  7. activeMQ_helloworld(一)

    一.activeMQ下载,直接在Linux上wget http://mirror.bit.edu.cn/apache//activemq/5.14.5/apache-activemq-5.14.5-b ...

  8. Java 添加、验证PDF 数字签名

    在设置文档内容保护的方法中,除了对文档加密.添加水印外,应用数字签名也是一种有效防伪手段.数字签名的文件比较容易验证,并且具有较高的权威性和可信度.在PDF文档中,有可直接添加或验证数字签名的功能方法 ...

  9. CDN绕过姿势小结

    公司的各业务主站都挂了CDN,总结一波CDN绕过技巧. 什么是CDN CDN的全称是Content Delivery Network,即内容分发网络. 其基本思路是尽可能避开互联网上有可能影响数据传输 ...

  10. R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//")> setwd("e:\桌面\")> s ...