unity,欧拉角

介绍

在Unity中,欧拉角(Euler Angles)用于描述物体的旋转状态,它由三个角度组成,通常是俯仰角(Pitch)、偏航角(Yaw)和翻滚角(Roll)。在Transform组件中,可以通过eulerAngles属性获取或设置物体的欧拉角。例如,当物体绕X轴旋转时,它的欧拉角表示为(X,0,0),当物体绕Y轴旋转时,它的欧拉角表示为(0,Y,0),当物体绕Z轴旋转时,它的欧拉角表示为(0,0,Z)。欧拉角在游戏开发中非常常用,可以用于控制物体的旋转状态,实现各种动态效果。但需要注意的是,欧拉角存在万向锁问题,需要注意避免出现异常情况。

万向锁:万向锁(Gimbal Lock)是欧拉角旋转中的一种异常情况,当物体的俯仰角接近90度或-90度时,会导致旋转出现异常。具体来说,当物体的俯仰角接近90度时,物体绕Y轴旋转和绕Z轴旋转的角度将会重叠,导致物体无法自由旋转,而是出现了旋转的“卡顿”现象。


方法

在Unity中,可以通过Transform组件的eulerAngles属性获取或设置物体的欧拉角。例如,可以使用以下代码获取物体的欧拉角:

Vector3 euler = transform.eulerAngles;
也可以使用以下代码设置物体的欧拉角:

transform.eulerAngles = new Vector3(x, y, z);
其中,x、y、z分别代表物体绕X轴、Y轴和Z轴的旋转角度。

除了使用eulerAngles属性,还可以使用Quaternion.Euler()方法将欧拉角转换为四元数。例如,可以使用以下代码将欧拉角转换为四元数:

Quaternion rotation = Quaternion.Euler(x, y, z);
其中,x、y、z分别代表物体绕X轴、Y轴和Z轴的旋转角度。


举例子

鼠标控制旋转视角

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseLook : MonoBehaviour
{
// 鼠标灵敏度
public float mouseSensitivity = 100f;
// 角度限制
public float clampAngle = 80f;

// 鼠标移动距离
private float mouseX;
private float mouseY;// 角度
private float rotX = 0f;
private float rotY = 0f;void Start()
{// 获取初始角度Vector3 rot = transform.localRotation.eulerAngles;rotX = rot.x;rotY = rot.y;
}void Update()
{// 获取鼠标移动距离mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;// 旋转视角rotX -= mouseY;rotY += mouseX;// 角度限制rotX = Mathf.Clamp(rotX, -clampAngle, clampAngle);// 更新旋转Quaternion localRotation = Quaternion.Euler(rotX, rotY, 0f);transform.rotation = localRotation;
}

}


查看全文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2232705.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章:

unity,欧拉角

介绍
在Unity中,欧拉角(Euler Angles)用于描述物体的旋转状态,它由三个角度组成,通常是俯仰角(Pitch)、偏航角(Yaw)和翻滚角(Roll)。在Transform……

集成学习算法梯度提升(gradient boosting)的直观看法

reference: Intuitive Ensemble Learning Guide with Gradient Boosting 文章目录几句话总结全文IntroductionEnsemble LearningGradient Boosting (GB)梯度提升的总结几句话总结全文
梯度提升算法的核心思想:使用前一个模型的残差作为下一个模型的目标……

upload-labs pass6-pass10

1.pass-6黑名单 空格绕过
直接上传肯定不可以 这个地方配置文件虽然只过滤了.htaccess,.user.ini也是不可用的,因为这里进行了重命名,通过代码审计可以发现空格没有过滤,这是利用windows的一个特性,后缀后面有空格和……

探索高尔夫的魅力:一场初学者的模拟高尔夫之旅

在这个阳光明媚的周末早晨,我来到了一家位于郊外的高尔夫俱乐部,准备进行一场模拟高尔夫之旅。模拟高尔夫是一种通过计算机模拟的方式,在室内环境中进行的高尔夫运动,让人们能够在任何天气条件下都能体验到高尔夫的乐趣。     ……

DALL·E:OpenAI第一代文本生成图片模型

1 简介
本文根据openAI 2021年2月的《Zero-Shot Text-to-Image Generation》翻译总结的。原文详见https://arxiv.org/pdf/2102.12092v1.pdf。
DALLE : 论文中没看到这个名字,可能是后起的吧。
DALLE有120亿参数,基于自回归transformer,在2……

用队列实现栈(力扣刷题)

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int ……

【Unity Shader Graph URP渲染管线下的自定义半透明效果_半透明案例分享】

Unity Shader Graph URP渲染管线下的自定义半透明着色效果
URP的渲染管线下 在项目设置里找到“Graphic”找到URP Asset文件索引到Renderer List文件——“ForwardRenderer” 在这个“ForwardRenderer”文件里找到“Add Renderer Feature” 添加一个渲染对象,类似下图:Rend……

guava eventbus

EventBus 是 Guava 的事件处理机制,是观察者模式(生产/消费模型)的一种实现。根据发送对象的类型,查找所有匹配的订阅处理器进行处理。
1. 默认当前线程直接调用
1.1.简单使用示例
package org.example.model.guava;import com……

rust基础之并发和面向对象

并发编程
多线程可能导致的问题
竞争状态(Race conditions),多个线程以不一致的顺序访问数据或资源死锁(Deadlocks),两个线程相互等待对方停止使用其所拥有的资源,阻止程序继续运行只会发生在……

【调试】kprobes(二)使用方法

前言
上一节介绍了kprobe的基本概念,下面我们将使用几个具体的例子,看下kprobe在实际使用中有那些应用场景。
kprobe
内核的samples/kprobe目录下有kprobe相关的例子,我们以这些例子为基础,简单修改下。
查看函数的入参
我们……

Mybatis03学习笔记

目录 使用注解开发
设置事务自动提交
mybatis运行原理
注解CRUD
lombok使用(偷懒神器,大神都不建议使用)
复杂查询环境(多对一)
复杂查询环境(一对多)
动态sql环境搭建
动态sql常用标签……

设置或取得c# NumericUpDown 编辑框值的方法,(注意:不是Value值)

本人在C#开发中使用到了NumericUpDown控件,但是发现该控件不能直接控制显示值,经研究得到下面的解决办法
NumericUpDown由于是由多个控件组合而来的控件,其中包含一个类似TextBox的控件,若想取得或改变其中的值要使用如下方法
N……

使用NPOI 技术 的SetColumnWidth 精确控制列宽不能成功的解决办法(C#)

在使用NPOI技术开发自动操作EXCEL软件时遇到不能精确设置列宽的问题。

ISheet sheet1 hssfworkbook.CreateSheet("Sheet1");
sheet1.SetColumnWidth(0, 50 * 256); // 在EXCEL文档中实际列宽为49.29
sheet1.SetColumnWidth(1, 100 * 256); // 在EXCEL文……

Mysql 数据库zip版安装时basedir datadir 路径设置问题,避免转义符的影响

本人在开发Mysql数据库自动安装程序时遇到个很奇怪的问题,其中my.ini的basedir 的路径设置是下面这样的:
basedir d:\测试\test\mysql
但是在使用mysqld安装mysql服务时老是启动不了,报1067错误,后来查看window事件发现一个独特……

java stream sorted排序 考虑null值

项目里使用到排序, java里没有像C# 里的linq,只有stream,查找stream.sorted源码看到有个
Comparator.nullsLast
然后看了一下实现,果然是能够处理null值的排序,如:minPriceList.stream().sorted(Comparator.comparing(l -> l.g……

spring @EnableConfigurationProperties 实现原理

查看DataSourceAutoConfiguration源码,发现如下代码: Configuration ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) EnableConfigurationProperties(DataSourceProperties.class) Import({ DataSourcePoolMetadataProvidersCon……

postman请求https网址没有响应,但是用浏览器有响应,解决办法

遇到个问题:同一个get请求的url,postman请求https网址没有响应,但是用浏览器有响应
url是https开头的,查看错误描述里有一个SSL的选项: 然后根据描述关掉这个选项: 然后就没问题了,能正常请求及……

java @Inherited注解的作用

看到很多注解都被Inherited进行了修饰,但是这个Inherited有什么作用呢?
查看Inherited代码描述:
Indicates that an annotation type is automatically inherited. If an Inherited meta-annotation is present on an annotation type decl……

spring mvc的两种部署到Servlet容器的方式:web.xml 、WebApplicationInitializer 以及WebApplicationInitializer原理分析

方式一、编写web.xml
通常我们将一个spring mvc程序部署到Servlet容器(例如Tomcat)时,会使用该方式,示例如下:
<web-app><listener><listener-class>org.springframework.web.context.ContextLoad……

Spring @AliasFor 的三种用法,亲测可用,包含测试代码

查看Spring中的AliasFor的文档,英文描述如下:
Usage ScenariosExplicit aliases within an annotation: within a single annotation, AliasFor can be declared on a pair of attributes to signal that they are interchangeable aliases for each ot……

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注