返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Unity之绕轴进行旋转的操作
  • 541
分享到

Unity之绕轴进行旋转的操作

2024-04-02 19:04:59 541人浏览 八月长安
摘要

先上一张效果图 using UnityEngine; using System.Collections; public class TestRotateRound : Mono

先上一张效果图


using UnityEngine;
using System.Collections;
public class TestRotateRound : MonoBehaviour
{
    public GameObject Sphere;
    private float curtTime = 0.0f;
    void Update()
    {
        //使用C#封装好的代码RotateAround
        gameObject.transfORM.RotateAround(Sphere.transform.position, Sphere.transform.up, 72 * Time.deltaTime);
        //自己封装代码,功能和上面的相同
        //RotateAround(Sphere.transform.position,Vector3.up, 72 * Time.deltaTime);
    }
    private void RotateAround(Vector3 center, Vector3 axis, float angle)
    {
        //绕axis轴旋转angle角度
        QuaterNIOn rotation = Quaternion.AngleAxis(angle, axis);
        //旋转之前,以center为起点,transform.position当前物体位置为终点的向量.
        Vector3 beforeVector = transform.position - center;
        //四元数 * 向量(不能调换位置, 否则发生编译错误)
        Vector3 afterVector = rotation * beforeVector;//旋转后的向量
        //向量的终点 = 向量的起点 + 向量
        transform.position = afterVector + center;
        //看向Sphere,使Z轴指向Sphere
        transform.LookAt(Sphere.transform.position);
    }
}

补充:Unity绕x轴旋转并限制角度的陷阱

在制作FPS相机时,遇到了需要限制角度的需求,视角只能查看到-60到60度的范围,而在Unity的Transform组件中,绕x轴逆时针旋转,Transform组件的localEulerAngle会在0~360范围内递增(如图)

关键在于其中的角度转换,直接上代码


        public static void RotateClampX(this Transform t, float degree, float min, float max)
        {
            degree = (t.localEulerAngles.x - degree);
            if (degree > 180f)
            {
                degree -= 360f;
            }
            degree = Mathf.Clamp(degree, min, max);
            t.localEulerAngles = t.localEulerAngles.SetX(degree);
        }

补充:Unity3D 实现物体始终面向另一个物体(绕轴旋转、四元数旋转)

一开始本人纠结于在VR中,怎么利用手柄来控制物体的旋转,物体位置不变。

相当于:地球仪。更通俗点来说,就是一个棍子插到地球仪上,然后拿着棍子就可以控制地球仪转。手柄相当于那根棍子。

代码如下:


myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);

这句代码实现了 myTransform 始终可以根据 target 旋转,rotationSpeed控制速度。

当然上面这句话仅仅只是始终面向,还没有加上一开始记录下target的初始旋转。不然一开始就要跟着手柄转,而不是自己随意控制。对于上句的理解,我理解完便贴上。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: Unity之绕轴进行旋转的操作

本文链接: https://www.lsjlt.com/news/123409.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Unity之绕轴进行旋转的操作
    先上一张效果图 using UnityEngine; using System.Collections; public class TestRotateRound : Mono...
    99+
    2024-04-02
  • JavaScript数组操作之旋转二维数组
    目录一、题目描述二、思路与实现三、总结一、题目描述 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90...
    99+
    2024-04-02
  • Unity C#执行bat脚本的操作
    我们先封装一下接口,如下,把EdtUtil.cs放置在Assets/Editor目录中 // EdtUtil.cs using System; using UnityEdito...
    99+
    2024-04-02
  • OpenCV+Imutils实现图像的旋转操作
    目录前言 使用 OpenCV 旋转图像使用 OpenCV 顺时针旋转图像围绕任意点旋转图像使用 Imutils 旋转图像总结前言  本文,将描述使用 OpenC...
    99+
    2024-04-02
  • Android实现中轴旋转特效 Android制作别样的图片浏览器
    Android API Demos中有很多非常Nice的例子,这些例子的代码都写的很出色,如果大家把API Demos中的每个例子研究透了,那么恭喜你已经成为一个真正的Android高手了。这也算是给一些比较迷茫的Android开发者一个指...
    99+
    2023-05-30
  • C#操作Byte数组和十六进制进行互转
    一、Byte 数组转十六进制字符串 /// <summary> /// Byte 数组转十六进制字符串 /// </summa...
    99+
    2024-04-02
  • JS实现简单的操作杆旋转示例详解
    目录一、实现效果二、组成部分目标三、代码实现1、操作控制2、dom对象操作类3、用法总结与思考一、实现效果 JS 简单的操作杆旋转实现 首先说明一下,请直接忽略背景图,这里主要实...
    99+
    2023-01-15
    JS操作杆旋转 JS 旋转
  • Unity 通过LineRenderer绘制两点之间的直线操作
    我就废话不多说了,大家还是直接看代码吧~ private LineRenderer line; //画线 line = this.gameObject.AddComponent&...
    99+
    2024-04-02
  • C++对string进行大小写转换操作方法
    目录补充:C++ string大小写转换1、通过单个字符转换,使用C的toupper、tolower函数实现2、通过STL的transform实现C++对string进行大小写转换操...
    99+
    2023-02-06
    C++ string大小写转换 C++ string
  • R语言怎么对数组进行转置操作
    在R语言中,可以使用transpose()函数对数组进行转置操作。下面是一个简单的示例: # 创建一个矩阵 mat <- ma...
    99+
    2024-03-06
    R语言
  • JavaScript和PHP间如何进行时间戳的转换操作
    今天小编给大家分享一下JavaScript和PHP间如何进行时间戳的转换操作的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。J...
    99+
    2023-07-05
  • C#怎么操作Byte数组和十六进制进行互转
    本篇内容主要讲解“C#怎么操作Byte数组和十六进制进行互转”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么操作Byte数组和十六进制进行互转”吧!一、Byte 数组转十六进制字符串&nb...
    99+
    2023-06-30
  • 如何将RDD或者MLLib矩阵进行转置操作
    如何将RDD或者MLLib矩阵进行转置操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如何将Spark Mllib的矩阵或者将一个RDD进行转置操作。Spar...
    99+
    2023-06-19
  • 怎么在小程序页面内进行转发操作
    这篇文章给大家分享的是有关怎么在小程序页面内进行转发操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我们先来看看官方文档上的内容:官方文档上说通过给 button 组件设置属性 open-type="...
    99+
    2023-06-06
  • php如何进行页面跳转和提示信息的操作
    PHP是一种以网页为环境的脚本语言,它具有高效、易于学习和使用的优点。然而,在开发过程中,我们经常需要进行页面跳转和提示信息的操作。本文将介绍如何在PHP中实现这些功能。一、跳转页面在PHP中,可以使用header函数来实现页面跳转。hea...
    99+
    2023-05-14
    php
  • 如何才能对PHP中的浮点数进行转正操作
    这篇“如何才能对PHP中的浮点数进行转正操作”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何才能对PHP中的浮点数进行转正...
    99+
    2023-07-05
  • 如何使用CSS制作旋转进度条的实现步骤
    CSS是一种用于设计和布局网页的样式表语言,它提供了丰富的属性和功能。其中之一是可以使用CSS制作旋转进度条。这个特效可以用于展示页面加载或任务进度等情况。以下是具体的实现步骤和代码示例:第一步:HTML结构首先,我们需要在HTML中创建一...
    99+
    2023-10-21
    CSS 制作 旋转进度条
  • SpringBoot 进行限流的操作方法
    目录为什么要进行限流?什么是限流?有哪些限流算法?1. 计数器限流2. 漏桶算法3. 令牌桶算法基于Guava工具类实现限流基于AOP实现接口限流小结大家好,我是飘渺。SpringB...
    99+
    2024-04-02
  • 如何进行Python文件的操作
    本篇内容主要讲解“如何进行Python文件的操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何进行Python文件的操作”吧!1. 文件的读写原理:文件的读写称为I/O操作。操作原理:.py...
    99+
    2023-06-14
  • 使用Python对IP进行转换的一些操作技巧小结
    Python Socket模块中包含一些有用IP转换函数,说明如下: socket.ntohl(x) // 类似于C语言的ntohl(x) 把32位正整数从网络序转换成主机字节序。 s...
    99+
    2022-06-04
    小结 操作技巧 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作