需求:钟表的指针默认位置在0点,在初始化时会根据当前的时间,旋转到一定角度。然后才是在当前旋转角度下每帧继续旋转。

问题:网上搜到的关于物体的旋转,基本都是给定一个速度的持续运动,而现在需要的是一个即时的效果。

看一看文档:https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

其实还是使用Transform.Rotate,但是文档中的所有案例都是给定速度的持续运动,因为这个过程写在了Update()中,会每帧被调用,所以传参Time.deltaTime都是在指定每秒钟旋转的角度。

其实这里可以直接写在Start()里面,只在初始化时执行一次,传参为我们想要的角度,即可实现初始化就立即旋转到指定角度。

分针的运动脚本:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine; /// <summary>
/// 分针绕着轴心旋转的动画
/// </summary>
public class MPRotateAnim : MonoBehaviour { public GameObject axesObj; // 轴心物体
private float speed = 6; // 旋转速度,6度/分钟。
private float loop = 60; // 用于计算转一圈的角度。时针为24,分针秒针为60。 // Use this for initialization
void Start () {
// 初始化当前指针的位置和角度
DateTime now = DateTime.Now;
float degree = now.Minute / loop * 360;
Debug.Log("MPdegree = " + degree);
gameObject.transform.Rotate(0, 0, -degree, Space.Self);
Debug.Log("gameObject.transform.rotation = " + gameObject.transform.rotation);
} // Update is called once per frame
void Update () {
gameObject.transform.RotateAround(axesObj.transform.position, -Vector3.forward, speed / 60 * Time.deltaTime);
}
}

时针的运动脚本:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine; /// <summary>
/// 时针绕着轴心旋转的动画
/// </summary>
public class HPRotateAnim : MonoBehaviour { public GameObject axesObj; // 轴心物体
private float speed = 30; // 旋转速度,30度/小时。
private float loop = 24; // 用于计算转一圈的角度。时针为24,分针秒针为60。 // Use this for initialization
void Start () {
// 初始化当前指针的位置和角度
DateTime now = DateTime.Now;
float degree = (now.Hour * 60 + now.Minute) / (loop * 60) * 360;
Debug.Log("HPdegree = " + degree);
gameObject.transform.Rotate(0, 0, -degree, Space.Self);
Debug.Log("gameObject.transform.rotation = " + gameObject.transform.rotation);
} // Update is called once per frame
void Update () {
gameObject.transform.RotateAround(axesObj.transform.position, -Vector3.forward, speed / (60 * 60) * Time.deltaTime);
}
}

另外一些关于旋转的常见问题

根据输入每帧进行旋转、平移

public class ExampleClass : MonoBehaviour {
public float speed = 10.0F;
public float rotationSpeed = 100.0F;
void Update() {
float translation = Input.GetAxis("Vertical") * speed;
float rotation = Input.GetAxis("Horizontal") * rotationSpeed;
translation *= Time.deltaTime;
rotation *= Time.deltaTime;
transform.Translate(0, 0, translation);
transform.Rotate(0, rotation, 0);
}
}

实现物体围绕某一点进行旋转

http://blog.csdn.net/qiaoquan3/article/details/51306514


2017.05.07更新:

  • 嫌麻烦,还是用iTween和DoTween插件吧。

【Unity】初始化物体的旋转角度的更多相关文章

  1. Unity 实现物体破碎效果(转)

    感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...

  2. Unity查找物体的子物体、孙物体

    Unity查找物体下的所有物体 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...

  3. Unity CommandBuffer物体轮廓

    1.command buffer具有很高的灵活性,它的作用是预定义一些渲染指令,然后在我们想要执行的时候去执行这些指令(见图1),绿点表示可以在"Forward Rendering Path ...

  4. unity 实现物体破碎效果的一些方法 - 细雨淅淅

    游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...

  5. unity 实现物体破碎效果的一些方法

    游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...

  6. 关于Unity动态物体无法向使用使用custom shader和lightmap的物体投射阴影

    最近在做unity shader forge和marmoset的优化,TA那边遇到了一个阴影显示的问题,具体如下:   在Forward Rendering状态下,静态场景使用了是shader for ...

  7. Unity 父物体与子物体位置

         酷跑片段本来想做三条轨道,然后通过切换轨道来做,后面发现一种巧妙的方法,利用物体的父级偏移来实现轨道的切换. 比如上图,实际运动的是Car对象,通过修改MineControler的左右位置( ...

  8. Unity 3D物体的点击事件响应以及NGUI坐标和世界坐标的互相转换

    Unity 版本:4.5 NGUI版本:3.6.5 参考链接:http://game.ceeger.com/Script/Camera/Camera.ScreenPointToRay.html,Uni ...

  9. 关于Unity中物体分别在本地和世界坐标系对应方向的移动

    方向 Vector3可以定义以世界坐标轴为参考的三维矢量,Vector3.forward,Vector3.up,Vector3.right方别对应物体世界坐标系的Z,Y,X轴方向的单位向量,或者叫三维 ...

随机推荐

  1. ArchLinux安装 LXDE

    http://wiki.lxde.org/zh/index.php?title=ArchLinux&variant=zh-cn 透过 pacman 安装 LXDE 大多数的最新 LXDE 套件 ...

  2. [转载]在rhel 6 x86_64 上安装oracle 11g xe

    原文地址:在rhel 6 x86_64 上安装oracle 11g xe作者:pccom Oracle 11g xe for linux目前只有x86_64 版本,没有i386, i686 版本,如果 ...

  3. iOS与H5交互遇到的坑

    之前的博客写过使用<JavaScriptCore/JavaScriptCore.h>库来实现与H5的交互,但是在项目中还是遇到了一些不得不踩的坑.在这里将我遇到的问题以及参考网上几位大神的 ...

  4. ubuntu修改固定ip

    1.vi /etc/network/interfasces,添加红框内的内容:

  5. Python lstrip() 方法

    描述 Python lstrip() 方法用于删除字符串头部指定的字符,默认字符为所有空字符,包括空格.换行(\n).制表符(\t)等. 语法 lstrip() 方法语法: S.lstrip([cha ...

  6. python标准库介绍——20 cStringIO 模块详解

    ==cStringIO 模块== ``cStringIO`` 是一个可选的模块, 是 ``StringIO`` 的更快速实现. 它的工作方式和 ``StringIO`` 基本相同, 但是它不可以被继承 ...

  7. java与数据库交互常用到的一些方法

    下面我整理了一下java中常用的几个与数据库交互的常用方法,仅供参考: 1.执行SQL(dao层的实现类中) (1)SQL查询: //import org.hibernate.Query;//impo ...

  8. cocos2dx 3.3多相机下_transformUpdated bug

    uint32_t Node::processParentFlags(const Mat4& parentTransform, uint32_t parentFlags) { if(_using ...

  9. linux内存管理之DMA

    说起DMA我们并不陌生,但是实际编程中去用的人不多吧,最多就是网卡驱动里的环形buffer,再有就是设备的dma,下面我们就分析分析.   DMA用来在设备内存和内存之间直接数据交互.而无需cpu干预 ...

  10. t-sql的一些经验

    1.存储过程的3种传回值: 1.以return传回整数 2.以output格式传回参数 3.recordset 2.字符串类型的变量需要初始化后再使用,不然永远是空 DECLARE @FieldsSq ...