首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拖动-旋转一体化

拖动-旋转一体化
EN

Stack Overflow用户
提问于 2017-09-07 03:51:17
回答 1查看 3.4K关注 0票数 1

请帮助我通过拖动来旋转一个物体。物体是一只船的舵,可以用触摸屏旋转。我有一个问题,点击对象总是返回到角度0。如果我能让它旋转,但是它总是从0开始,而不是从我停留的地方开始。

代码语言:javascript
复制
public void OnClick()
{
    Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
    pos = Input.mousePosition - pos;
    baseAngle = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg;
    baseAngle -= Mathf.Atan2(transform.right.y, transform.right.x) * Mathf.Rad2Deg;
}

public void OnDrag()
{
    Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
    pos = Input.mousePosition - pos;
    float ang = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg - baseAngle;
    transform.rotation = Quaternion.AngleAxis(ang, Vector3.right);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-07 09:43:45

对不起,以前的帖子不对。问题是多维数据集的“默认”方向(您使用Vector.right,但您需要Vector.up),以及它的错误轴。你可以使用"z“和"y",而不是"y”和“z”。我现在修复它,结束完全重写我的答案。

代码语言:javascript
复制
private Vector2 GetDirectionToMouse()
{
    var mousePosition = Camera.main.WorldToScreenPoint(transform.position);
    Vector2 result = Input.mousePosition - mousePosition;
    return result;
}

float dragAngle;

public void OnBeginDrag(PointerEventData data)
{
    var directionToMouse = GetDirectionToMouse().normalized;
    var mouseAngle = Mathf.Atan2(directionToMouse.y, directionToMouse.x) * Mathf.Rad2Deg;
    var transAngle = Mathf.Atan2(transform.up.z, transform.up.y) * Mathf.Rad2Deg;
    dragAngle = mouseAngle - transAngle;
}    

public void OnDrag(PointerEventData data)
{
    var directionToMouse = GetDirectionToMouse().normalized;
    var mouseAngle = Mathf.Atan2(directionToMouse.y, directionToMouse.x) * Mathf.Rad2Deg;
    var targetAngle = mouseAngle - dragAngle;

    transform.rotation = Quaternion.AngleAxis(targetAngle, Vector3.right);
}  
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46087509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档