栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity 实现圆圈调节

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity 实现圆圈调节

需求:旋钮调节,用鼠标操作

 

思路:鼠标屏幕上位置,求出当前的旋转角度,求出旋转方向。

public class DragAngleTest : MonoBehaviour
{
    [SerializeField] private Transform operationTrans;
    [SerializeField] private Transform onTouchPoint;

    private Vector3 current_pos;
    private Vector3 old_pos;
    private Vector3 startPos;


    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);


            RaycastHit raycastHit;
            if (Physics.Raycast(ray, out raycastHit))
            {
                operationTrans = raycastHit.transform;

                var screenPos = Input.mousePosition;
                screenPos = new Vector3(screenPos.x, screenPos.y, Mathf.Abs(Camera.main.transform.position.z));
                startPos = Camera.main.ScreenToWorldPoint(screenPos);

                //TODO:测试小球
                onTouchPoint.position = raycastHit.point;

                //Debug.DrawRay(Camera.main.transform.position, raycastHit.point, Color.red);
                GetAngle();
            }
        }
    }


    private void GetAngle()
    {
        current_pos = operationTrans.position - startPos;
        var normalDirection = Vector3.Cross(current_pos, old_pos);
        var angle = Vector2.Angle(current_pos, old_pos);
        if (normalDirection.z > 0)
        {
            operationTrans.Rotate(Vector3.forward, angle);//顺时针
        }
        else
        if (normalDirection.z < 0)
        {
            operationTrans.Rotate(Vector3.forward, -angle);//逆时针
        }
        old_pos = current_pos;
    }
}

效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900467.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号