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

相关文章

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

C++11中的包装器实战案例

《C++11中的包装器实战案例》本文给大家介绍C++11中的包装器实战案例,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录引言1.std::function1.1.什么是std::function1.2.核心用法1.2.1.包装普通函数1.2.

Redis 命令详解与实战案例

《Redis命令详解与实战案例》本文详细介绍了Redis的基础知识、核心数据结构与命令、高级功能与命令、最佳实践与性能优化,以及实战应用场景,通过实战案例,展示了如何使用Redis构建高性能应用系统... 目录Redis 命令详解与实战案例一、Redis 基础介绍二、Redis 核心数据结构与命令1. 字符

通过DBeaver连接GaussDB数据库的实战案例

《通过DBeaver连接GaussDB数据库的实战案例》DBeaver是一个通用的数据库客户端,可以通过配置不同驱动连接各种不同的数据库,:本文主要介绍通过DBeaver连接GaussDB数据库的... 目录​一、前置条件​二、连接步骤​三、常见问题与解决方案​1. 驱动未找到​2. 连接超时​3. 权限不

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随