如何将立方体变成脸[重复]

Posted

技术标签:

【中文标题】如何将立方体变成脸[重复]【英文标题】:How to turn a cube to a face [duplicate] 【发布时间】:2021-12-19 14:13:18 【问题描述】:

不管立方体旋转,按下按钮,立方体应该旋转到面。

例子:

我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class CubeDoTweenController : MonoBehaviour

    private Quaternion targetRotation;


    private void Awake()
    
        targetRotation = transform.rotation;
    

    private void Update()
    
        if (Input.GetKeyDown(KeyCode.D))
        
            targetRotation *= Quaternion.FromToRotation(Vector3.up, Vector3.right);
            transform.DORotateQuaternion(targetRotation, 1f);
        
        else if (Input.GetKeyDown(KeyCode.W))
        
            targetRotation *= Quaternion.FromToRotation(Vector3.up, Vector3.forward);
            transform.DORotateQuaternion(targetRotation, 1f);
        
    

几圈后,旧立方体开始旋转。在此先感谢您的帮助

【问题讨论】:

为什么不简单地使用 *= Quaternion.Euler(90, 0, 0);*= Quaternion.Euler(0,0,90); 呢?你也想像图中一样移动它吗? 没有补间代码是否可以工作?我的意思是,立即轮换调试 我使用了*= Quaternion.Euler(90, 0, 0);*= Quaternion.Euler(0,0,90);,它也不起作用。不,我不想移动盒子,只是旋转。我也尝试在不使用 DoTween 的情况下旋转框,但决定使用 DoTween 进行测试,结果结果并没有改变 另外一个很重要的就是立方体的每个面都有自己的颜色!!! 所以如果我总结一下,你开始游戏,按下一个键,你的立方体就会转动。在你的立方体旋转了一些之后,看起来旋转有一个奇怪的偏移量,这是它还是我错过了什么? 【参考方案1】:

好的,我有解决您问题的方法...不要使用 Vectro3 轴,而是尝试使用您的 transform 轴,如下所示:

transform.rotation *= Quaternion.FromToRotation(transform.up, transform.forward);

问题是Quaternion.FromToRotation(Vector3 from, Vector3 to) 是计算fromto 之间的角度。然后将此旋转应用于本地变换。

例如 Quaternion.FromToRotation(Vector3.up, Vector3.right); 生成绕 z 轴 90 度的旋转。

在你的游戏对象上应用两次,x 轴等于 -x 轴

Quaternion.FromToRotation(Vector3.up, Vector3.forward); 生成绕 x 轴 90 度的旋转。

但是现在,当你的 x 轴等于 -x 轴时,这就像是围绕 x 的旋转已经被反转了,但是如果你跟随立方体的旋转,一切都很好。

然后使用局部轴将跟随你的立方体的旋转,并随着你的立方体在世界空间中旋转

【讨论】:

Quaternion.FromToRotation(Vector3.up, Vector3.right) 生成围绕 z 轴的旋转。 另外,transform.rotation *= Quaternion.FromToRotation(transform.up, transform.forward); 不会在世界空间中旋转。这是transform 的本地轮换。 感谢您的检查【参考方案2】:

我认为this 是你想要的。

【讨论】:

我已经找到了这个解决方案,但对我来说似乎很奇怪,原因如下: 1. 我需要最终旋转,为此,使用此解决方案,我首先必须旋转对象,缓存旋转并将对象返回到其原始状态 2. 需要最后的旋转,以便您可以在转弯过程中改变转弯的方向(立方体将同时向两个方向旋转),在这个解决方案中,转弯是被阻止并且在回合中的任何输入都不会被视为@gipsnichmeer 虽然此链接可能会回答问题,但有关堆栈溢出的答案应在答案正文中包含相关信息 我可能不称职,但我认为这是一个很好的答案,但我不会将其标记为我的问题@Ruzihm 的答案

以上是关于如何将立方体变成脸[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenGL 中更改视角?

cad三维图形透明

遗留 opengl - 渲染立方体地图布局,了解 glTexCoord3f 参数

如何将 BufferedImage 放入 ByteBuffer?

pyspark 数据框立方体方法返回重复的空值

如何将犰狳矩阵转换为立方体?