Unity实现大转盘的简单笔记

本文实例为大家分享了Unity实现大转盘展示的具体代码,供大家参考,具体内容如下

1、unity中要实现旋转一个gameobject,我们需要改变它的transform下对应的Rotation,由于我们的大转盘是2D的视角,所以我们首先需要明确大转盘旋转的方向是旋转Rotation的Z。

2、如何实现大转盘由旋转快到慢,再到旋转指定为位置停下。查看了unity的脚本可以找到如下方法实现旋转大转盘如下:

public void Rotate(Vector3 eulerAngles, Space relativeTo = Space.Self);

应用一个欧拉角的旋转角度,eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴(这样的顺序)。

public void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);

按照angle度围绕axis轴旋转变换。

public void RotateAround(Vector3 point, Vector3 axis, float angle);

简单的说,按照多少度在世界坐标的某位置轴旋转物体

3、对于旋转查看unity脚本知道以上方法都是需要在void Update();方法先实现的。所以我们在void Update()方法实现:

//是否点击开始按钮

if (m_isStart == true)

{

    m_cStartButton.m_CurState = CGUIAdvancedButton.AdvancedButtonState.Disable;//当前开始按钮状态为禁用

    m_fTime += Time.deltaTime;//时间计时器累加
    m_fVelocity = k / m_fTime;//播放速度(我们使用反比例函数可以实现速度的由快到慢的效果)
    if (m_fVelocity<=1)
    {

     float value = (m_iID*36.0f);//此处为我的项目指定的停止的地方
     float diff = m_gRatePin.transform.eulerAngles.z - value;//当前旋转gameobject的欧拉角
     if (Mathf.Abs(diff)<=50)//如果旋转的gameobject和指定的停止位置小于50度则开始缓慢的减速
     {

      //使用球形插值可以让旋转的gameobject缓慢的转到制定位置
      Quaternion quaternion = m_gRatePin.transform.rotation;
      m_gRatePin.transform.rotation = Quaternion.Slerp(quaternion, Quaternion.Euler(0, 0, value), Time.deltaTime);

      if (m_gRatePin.transform.rotation == Quaternion.Euler(0, 0, value))
      {
      m_isStart = false;
      m_cStartButton.m_CurState = CGUIAdvancedButton.AdvancedButtonState.Normal;
      m_fTime = 0;
      m_fVelocity = 36.0f;
      }
     }
     else
     { 

     //旋转(-1表示方向为右)

      m_gRatePin.transform.Rotate(Vector3.forward, (-1) * m_fVelocity);
     }
    }
    else
    { //旋转(-1表示方向为右)
     m_gRatePin.transform.Rotate(Vector3.forward, (-1) * m_fVelocity);
    }

}

4、除了使用旋转gameobject达到实现大转盘旋转的我们还可以使用动画实现如下:

if (m_isStart == true)       //是否点击开始抽奖按钮
  {
   m_cStartButton.m_CurState = CGUIAdvancedButton.AdvancedButtonState.Disable;
   m_fTime += Time.deltaTime;     //计时器
   if (m_fTime > 1 / m_fVelocity)    //判断当前时间是否到达了播放一帧的时间
   {
    m_fTime -= 1 / m_fVelocity;
    if (m_fVelocity<=8f)     //判断速度是否小于某个值(根据自己的需要设定)
    {
     if (index == m_iID)    //判断当前播放的帧是否为后台控制数据,如果是则停止播放并且清空数据
     {
      m_gRatePin.GetComponent<SpriteRenderer>().sprite = m_sSprites[m_iID];
      m_isStart = false;
      m_fVelocity = 60.0f;
      m_fTime = 0.0f;
      m_fTimeMeter = 0.0f;
      m_iCount = 0;
      m_cStartButton.m_CurState = CGUIAdvancedButton.AdvancedButtonState.Normal;
     }
     else
     {
      //1 / m_fVelocity表示播放一帧需要多少时间
      if (index == m_sSprites.Length - 1)    //如果当前帧数索引为最后一帧,说明播放的下一帧为第一帧
      {
       m_gRatePin.GetComponent<SpriteRenderer>().sprite = m_sSprites[0];
       index = 0;         //重置索引
       m_iCount++;         //统计圈数
       m_fVelocity /= 2;       //减缓播放帧速度
      }
      else
      {
       //如果不是的话就继续播放下一帧
       m_gRatePin.GetComponent<SpriteRenderer>().sprite = m_sSprites[++index];
      }
     }
    }
    else//没有达到指定圈则继续播放下一帧
    {

     if (index == m_sSprites.Length - 1)
     {
      m_gRatePin.GetComponent<SpriteRenderer>().sprite = m_sSprites[0];
      index = 0;
      m_iCount++;
      m_fVelocity /= 2;
     }
     else
     {
      m_gRatePin.GetComponent<SpriteRenderer>().sprite = m_sSprites[++index];
     }

    }
   }
  }

5、其实还有蛮多的方法例如使用unity自己带的动画系统也是可以实现的,笔记总结到此。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity幸运转盘实战项目

    幸运转盘主要是由两部分组成--转盘.指针,实现的方式也分两种,转盘动或者指针动,不过两者的原理都是一样的,这里就以指针动做了一个项目级的demo(由于后面的圆盘中间的那条竖线有点往左偏,所以导致那些圣诞老人的显示有些偏移).< Demo 下载> 在项目开发中,一般这个功能的实现过程是: 1.当点击开始的时候,转盘开始动, 同时向服务端发送协议: 2.服务端返回数据(前端计算好对应的角度),当转盘旋转一定时间后开始减速直至对应角度 当然也可以等服务端返回数据后再开始模拟旋转过程,但是由于受网络的

  • Unity 2017使用UGUI实现大转盘抽奖

    本文实例为大家分享了Unity 2017实现大转盘抽奖的具体代码,供大家参考,具体内容如下 涉及到的插件:Dotween 在"Hierarchy"面板创建一个Image,这个Image用来显示大转盘的那个圆盘,我用的UGUI里默认的那个圆圆的图片,放大后很模糊,不过不打紧 接着创建一个Panel名字改成"奖品组",这个是奖品的父物体,记得吧Panel里的Image,Canvas Renderer组件删了 然后在创建一个Panel名字改成"Awar"

  • Unity3D实现鼠标控制旋转转盘

    在培训模拟考试软件中,我们经常会遇到类似用鼠标旋转转盘打开开关的需求.让用户更加真实的操作设备仪器.接下来说下我的解决方案. 因为鼠标操作是在UI平面上,所以我们要先将被操作的模型的世界坐标转换到屏幕坐标上.代码如下: ModelScreenPos = camera.WorldToScreenPoint(Model.transform.position); 这里有个声明,这个模型代表的是转盘,而且要保证模型的中心点在转盘中心.然后我们就要计算鼠标以模型在屏幕坐标为中心点的旋转偏移量.我们开始以鼠

  • Unity实现大转盘的简单笔记

    本文实例为大家分享了Unity实现大转盘展示的具体代码,供大家参考,具体内容如下 1.unity中要实现旋转一个gameobject,我们需要改变它的transform下对应的Rotation,由于我们的大转盘是2D的视角,所以我们首先需要明确大转盘旋转的方向是旋转Rotation的Z. 2.如何实现大转盘由旋转快到慢,再到旋转指定为位置停下.查看了unity的脚本可以找到如下方法实现旋转大转盘如下: public void Rotate(Vector3 eulerAngles, Space r

  • 一文教你用JavaScript制作个简单的大转盘游戏

    目录 背景 一.开始前的准备 二.画出大转盘 三.把奖励放上去 四.让大转盘滚起来 个人总结 背景 日常生活中,我们经常会见到形形色色的抽奖活动,例如九宫格.大转盘等等……以前都没去深入考虑过,如果让我去做这些小游戏,有哪些需要注意的事项,不试不知道,一试全是坑.正好最近有需求让我做一个大转盘游戏,那我也总结一下我的一些感想和经验. 一.开始前的准备 首先就是确定产品需求,仔细一看,emmm,就是正常的一个大转盘该有的东西,也没啥特殊要求,唯一需要注意的是大转盘的转盘个数需要动态变化,即用户设置

  • 基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法

    大转盘中奖概率算法在我们的日常生活中,经常遇到,那么基于php代码是如何实现中奖概率算法的,下面通过一段代码实例给大家介绍php中奖概率算法,代码简单易懂,并且附有注释,具体代码如下所示: <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间, * 在本例

  • PHP大转盘中奖概率算法实例

    本文实例讲述了PHP大转盘中奖概率算法的实现方法,分享给大家供大家参考.具体如下: 大转盘是最近很多线上网动中一个比较有意思的东西了,下面我们就来看看这个大转盘中奖概率算法与例子,希望对各位有所帮助. 这是一个APP客户端有大转盘抽奖算法,具体如何抽奖当然在我们服务端实现了.下面和大家简单分享一下实现代码: 复制代码 代码如下: header("Content-type: text/html; charset=utf-8"); $prize_arr = array( '0' =>

  • php抽奖概率算法(刮刮卡,大转盘)

    本文实例为大家分享了php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法,用法很简单,代码里有详细注释说明,供大家参考,具体内容如下 <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间, * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围

  • Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)

    前一篇总结了Core Animation的一些基础知识,这一篇主要是Core Animation 的一些应用,涉及到CAShapeLayer.CAReplicatorLayer等图层的知识. 先看效果图: 1.切换图片: 2.彩票转盘 3.图片折叠 4.进度条旋转 5.粒子效果 一.切换图片 看起来很复杂的动画,通过少量的计算和编码就可以简单的实现.要做到这一步,必须是需要研究iOS开发中的Core Animation和Core Graphics框架的.日常工作中,对于很多东西不求甚解,只是拿过

  • 大转盘抽奖小程序版 转盘抽奖网页版

    今天整理了下以前写的小demo,把大转盘抽奖的代码,整合下,列了网页版和小程序两个版本,这个转盘抽奖的核心是H5的canvas和Css3的translate属性,非常简单,写了网页版和小程序版供大家参考,主要核心代码就是利用canvas画图,完整代码见大转盘抽奖,下载可用 希望给大家带来帮助 //转盘内部绘制 lottery.prototype.getCanvasI=function(){ let itemsArc=360/this.itemsNum //获取大转盘每等分的角度 this.ite

  • VUE实现大转盘抽奖

    UI 老规矩,先看下静态UI,以便于有个图像概念 初始参考各值参考图 方案分析-参数配置 核心思路: 将指针和中奖区域划分两部分,目前常规的效果,控制中奖区域旋转,然后停在指针处,当然控制指针也可以,一套思路,dom结构也比较简单,唯一算是复杂点的就是中奖区域,但是如果你足够懒,像我一样,你可以传递一张图也可以,完全依赖远端数据: 关于旋转位置 每个移动位置应均分,360/个数 === 每个奖品所占据的位置,以本文为例8个奖品位置,每个区域应为45deg,每个指针中心位置应为±22.5deg(±

  • Android 美食大转盘详解流程

    目录 效果视频 前言 美食大转盘 初始化SurfaceView 测量 绘制 绘制盘块 开始旋转转盘 停止旋转转盘 自定义转盘等份 控件引用 沉浸式体验 效果图 Reveal Animator 效果视频 自定义转盘代码 XML布局代码 Activity代码 代码下载地址 效果视频 前言 你还在为明天吃什么而烦恼嘛 美食大赏帮你解决选择困难症 帮你做出最佳的选择 做吃货,我们是认真的 美食大转盘 本示例使用SurfaceView绘制而成,接下来逐步分析, 文末会贴出全部代码``文末会贴出全部代码``

随机推荐