繁体   English   中英

统一旋转后如何将对象恢复到其原始位置?

[英]How to bringback an object to its original position after rotation in unity?

我创建了一个项目,当我们触摸它时,立方体会旋转。 当用户停止触摸立方体时,我希望立方体返回到其原始位置。 下面我添加了旋转立方体的源代码:

using UnityEngine;

using System.Collections;

[RequireComponent(typeof(MeshRenderer))]

public class dr : MonoBehaviour 
{

    #region ROTATE
    private float _sensitivity = 1f;
    private Vector3 _mouseReference;
    private Vector3 _mouseOffset;
    private Vector3 _rotation = Vector3.zero;
    private bool _isRotating;


    #endregion

    void Update()
    {
        if(_isRotating)
        {
            // offset
            _mouseOffset = (Input.mousePosition - _mouseReference); // apply rotation
            _rotation.y = -(_mouseOffset.x + _mouseOffset.y) * _sensitivity; // rotate
            gameObject.transform.Rotate(_rotation); // store new mouse position
            _mouseReference = Input.mousePosition;
        }

    }

    void OnMouseDown()
    {
        // rotating flag
        _isRotating = true;

        // store mouse position
        _mouseReference = Input.mousePosition;
    }

    void OnMouseUp()
    {
        // rotating flag
        _isRotating = false;
    }

}

编辑代码:- 使用 UnityEngine; 使用 System.Collections;

[RequireComponent(typeof(MeshRenderer))]

公共类 pt : MonoBehaviour {

#region ROTATE
private float _sensitivity = 1f;
private Vector3 _mouseReference;
private Vector3 _mouseOffset;
private Vector3 _rotation = Vector3.zero;
private bool _isRotating;
private Quaternion original;


#endregion
void start(){
    original = transform.rotation;
}

void Update()
{
    if(_isRotating)
    {
        // offset
        _mouseOffset = (Input.mousePosition - _mouseReference); // apply rotation
        _rotation.y = -(_mouseOffset.x + _mouseOffset.y) * _sensitivity; // rotate
        gameObject.transform.Rotate(_rotation); // store new mouse position
        _mouseReference = Input.mousePosition;
    }

}

public void OnMouseDown()
{
    // rotating flag
    _isRotating = true;

    // store mouse position
    _mouseReference = Input.mousePosition;
}

public void OnMouseUp()
{
    // rotating flag
    _isRotating = false;
    transform.rotation = original;
}

}

“我试图旋转沙发的 3d 模型并返回到它的起始旋转。但是如果我使用了这个代码”每当我停止触摸沙发时,它就会变成 **沙发的背面“**我希望它返回到初始旋转。您最初可以看到这就是沙发的样子,如果我停止触摸它,它会返回沙发的背面。如果我停止旋转,我希望它再次返回其正面

当用户停止触摸立方体时,我希望立方体返回到其原始位置

我无法确切地说出您正在努力解决的问题的哪一部分,但您可以简单地在StartAwake函数中获取 GameObject 的位置,然后在调用OnMouseUp时将transform.position设置为该值。

private Vector3 originalPos;

void Start()
{
  //Get the original position
  originalPos = transform.position;
}

void OnMouseUp()
{
    _isRotating = false;
    //Reset GameObject to the original position
    transform.position = originalPos;
}

编辑:

对于旋转,也是一样的。 只需使用Quaterniontransform.rotation而不是Vector3transform.position

private Quaternion originalPos;

void Start()
{
  //Get the original rotation
  originalPos = transform.rotation;
}

void OnMouseUp()
{
    _isRotating = false;
    //Reset GameObject to the original rotation
    transform.rotation = originalPos;
}

您仍然必须将其合并到您的答案中的原始代码中。 如果这是您做不到的事情,请考虑在此处观看 Unity 的脚本编写教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM