物体旋转后缓慢停在指定角度的实现

可指定物体的旋转时间速度停下角度,可以参考来实现转盘抽奖或图片翻转打开等效果。

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 public class Rotate : MonoBehaviour
 5 {
 6     public float targetAngle = 180f;
 7     public float spinSpeed = 6f;
 8     public float stopSpeed = 2f;
 9     public float duration = 3f;
10     float tmpAngle;
11     Vector3 tmpLocalEulerAngles;
12
13     float countdown;
14     float _targetAngle;
15
16     public enum State
17     {
18         Stopped,
19         Spinning,
20         Stopping
21     }
22
23     public State state
24     {
25         get
26         {
27             return _state;
28         }
29     }
30
31     State _state = State.Stopped;
32
33     public void StartSpin ()
34     {
35         transform.localEulerAngles = Vector3.zero;
36         _targetAngle = targetAngle % 360f;
37         countdown = duration;
38         _state = State.Spinning;
39         enabled = true;
40     }
41
42     void OnGUI ()
43     {
44         if (GUI.Button (new Rect (0f, 0f, 100f, 100f), "Rotate")) {
45             StartSpin ();
46         }
47     }
48
49     void Update ()
50     {
51         switch (_state) {
52             case State.Spinning:
53                 transform.Rotate (0f, spinSpeed, 0f);
54                 countdown -= Time.deltaTime;
55                 if (countdown < 0f) {
56                     if (transform.localEulerAngles.y > _targetAngle)
57                         _targetAngle = 360f - (transform.localEulerAngles.y - _targetAngle) + transform.localEulerAngles.y;
58                     tmpAngle = transform.localEulerAngles.y;
59                     _state = State.Stopping;
60                 }
61                 break;
62             case State.Stopping:
63                 tmpAngle = Mathf.Lerp (tmpAngle, _targetAngle, Time.deltaTime * stopSpeed);
64                 tmpLocalEulerAngles = transform.localEulerAngles;
65                 tmpLocalEulerAngles.y = tmpAngle;
66                 transform.localEulerAngles = tmpLocalEulerAngles;
67                 if (tmpAngle < targetAngle + 0.5f && tmpAngle > targetAngle - 0.5f) {
68                     _state = State.Stopped;
69                 }
70                 break;
71             default:
72 //                enabled = false;
73                 break;
74         }
75     }
76 }
时间: 2024-09-30 11:41:14

物体旋转后缓慢停在指定角度的实现的相关文章

css控制div元素旋转指定角度代码实例

css控制div元素旋转指定角度代码实例:本章节介绍一下如何利用css3实现控制元素旋转指定角度的效果.在这里咱们就不考虑低版本的浏览器,因为随着时间的推移,低版本的浏览器会被逐渐淘汰,就算是当前,低版本浏览器的用户的占比也是很少了,下面直接看代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" conten

在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度,求旋转后的角坐标.

在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度,求旋转后的角坐标.也就是已知半径,求每个点旋转后的坐标. 把旋转前和旋转后的点加上中心点看成一个等腰三角形就好解决了,不用扇形公式,而是用三角形公式.假设矩形的左上角为(left, top),右下角为(right, bottom),则矩形上任意点(x0, y0)绕其中心(xcenter,ycenter)逆时针旋转angle角度后,新的坐标位置(x′, y′)的计算公式为: xcenter = (right - left + 1) /

[计算机图形学 with OpenGL] Chapter8 习题8.6 线段旋转后使用Cohen-Sutherland算法裁剪

习题8.6 生成一条比观察窗口对角线还长的线段动画,线段重点位于观察窗口中心,每一帧的线段在上一帧基础上顺时针旋转一点,旋转后用Cohen-Sutherland线段裁剪算法进行裁剪. 步骤: 1 视口范围:(-100, -100)到(100, 100): 2 裁剪窗口区域:winMin(-50, -50) 到 winMax(50, 50),原始端点:p0(-100, 0)到 p1(100, 0) 3 使用Bresenham算法画原始线段,使用Cohen-Sutherland算法画裁剪线段: 4

Android canvas rotate():平移旋转坐标系至任意原点任意角度-------附:android反三角函数小结

自然状态下,坐标系以屏幕左上角为原点,向右是x正轴,向下是y正轴.现在要使坐标系的原点平移至任一点O(x,y),且旋转a角度,如何实现? 交待下我的问题背景,已知屏幕上有两点p1和p2,构成直线l.我要以两点的中点mid(x,y)为坐标原点,线段l的中垂线为一个轴,l为另外一个轴,做一个坐标系.切割出一个边长为d的正方形.示意图如下所示: double d = Math.sqrt((p2.x-p1.x)*(p2.x - p1.x)+(p2.y-p1.y)*(p2.y-p1.y)); //p1.p

关于图像旋转以及旋转后对应像素的位置

参考链接:http://www.echojb.com/image/2016/11/14/258268.html 一.首先来说一下关于像素旋转一定角度后的对应位置: (1)旋转中心为左上角原点: 旋转有一个绕什么转的问题.我们先来看最简单的,绕第一个像素转,则旋转的情况会像这样: 令旋转前有 旋转a角度后有 以矩阵形式表示为 (2)旋转中心为图像中心: 当图片较大时,计算会很慢.主要是判断和计算太多了这里只讨论图像处理,程序的优化暂时放一边运行结果如下: 我们能看到,旋转后的图像有很多“蜂窝煤”.

两步解决:PDF旋转后怎么保存?

在我心中曾经有一个梦,那就是所有的事情都如我意,但是事与愿违,总有事情不称心,就比如PDF文件,方向总是搞不对,别担心,小编教你PDF旋转后怎么保存准备:电脑,PDF文件 借助工具:PDF转换器 方法一[PDF转换器] 作为一款专门为PDF格式文件的工具来讲,PDF转换器可谓是简洁而不简单,低调有内涵,强大又小巧,干练却又显得精致 步骤如下: 第一步:打开PDF转换器,然后选择PDF操作中的PDF旋转 第二步:添加文件,可批量添加 第三步:选择旋转角度,顺时针90°.逆时针90°或者是旋转180

图像旋转后出现黑点 - (二) - 填坑

前接:图像旋转后出现黑点 - (一) - 入坑 这是填坑篇,之前写的图片旋转程序把图片变成了桌布,几个世纪后,在一个月黑风高的夜晚,我灵光乍现,何不试试双线性插值? 先上代码和效果图. 1 # !/usr/bin/env python3 2 # -*-coding:utf-8-*- 3 """ 4 双线性插值参考资料: 双线性插值原理及Python实现 - Jinglever https://www.jianshu.com/p/29e5c84ea539 5 6 如果出现错误:

js实现域名判断后跳转到指定网址

js实现域名判断后跳转到指定网址,也适用于同一虚拟空间放多个网站: <script>       try           {               if(self.location == "http://apple.ya37.com/")               {                   top.location.href = "http://ya37.com/apple/";               }         

【LeetCode】Find Minimum in Rotated Sorted Array 找到旋转后有序数组中的最小值

本文原作者:大便一箩筐 文章原地址:http://www.cnblogs.com/dbylk/p/4032570.html 原题: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exist