AI 解析方法

  • 下面是一个unity 工程的方法,请解析    :IEnumerator DragManyTimesjijiao(Transform t, float moveRange, int n)
        {
    
            float curDis = 0;
            Vector3 initPos = t.position;
            Vector2 mousePos = Vector2.zero;
            GameObject.Find("我是菜刀").transform.GetChild(0).gameObject.SetActive(true);
            while (curDis < moveRange * n)
            {
                if (Input.GetMouseButton(0))
                {
                    if (mousePos == Vector2.zero) mousePos = Input.mousePosition;
                    else
                    {
                        float offsetY = Input.mousePosition.y - mousePos.y;
                        t.Translate(t.up * offsetY * 0.02f, Space.World); 
                        if (Vector3.Distance(t.position, initPos) > moveRange)
                        {
                            if (Vector3.Dot(t.position - initPos, t.up) > 0) t.position = initPos + t.up * moveRange;
                            else t.position = initPos - t.up * moveRange;
                        }
                        else curDis += Mathf.Abs(offsetY * 0.01f);
                        
                        mousePos = Input.mousePosition;
                    }
                }
                else mousePos = Vector2.zero;
    
                yield return null;
            }
        }
    
  • 这是一个在Unity中实现拖拽功能的协程方法。该方法接受三个参数:Transform类型的t,float类型的moveRange和int类型的n。

    在方法中,首先定义了三个变量:float类型的curDis,Vector3类型的initPos和Vector2类型的mousePos。然后通过GameObject.Find方法找到名为“我是菜刀”的游戏对象,并将其子对象的第一个物体设置为激活状态。

    接下来,使用while循环来实现拖拽功能。在循环中,首先判断当前拖拽的距离是否小于moveRange * n,如果是,则继续执行拖拽操作。在拖拽操作中,首先判断鼠标左键是否按下,如果是,则获取当前鼠标位置,并计算鼠标位置的偏移量。然后使用Transform的Translate方法来实现物体的移动,并判断物体是否超出了移动范围。如果超出了移动范围,则将物体的位置设置为移动范围的边界位置。最后,将当前拖拽的距离加上偏移量的绝对值乘以0.01f,并将当前鼠标位置赋值给mousePos。如果鼠标左键没有按下,则将mousePos设置为Vector2.zero。

    最后,使用yield return null来暂停协程的执行,等待下一帧的更新。

  • 为什么是t.up   不是t.right
  • 在这个方法中,使用了t.up来移动物体,而不是t.right,是因为t.up表示物体的上方向,而t.right表示物体的右方向。在这个方法中,可能是因为物体需要在垂直方向上进行拖拽,所以使用了t.up来移动物体。如果需要在水平方向上进行拖拽,可以使用t.right来移动物体。

  • 计算鼠标偏移量修改成t.right 会怎么样
    
  • 如果将计算鼠标偏移量的代码修改为t.right,则物体将会在水平方向上进行拖拽,而不是垂直方向上进行拖拽。这意味着,当鼠标向左或向右移动时,物体将会沿着其右方向移动,而不是沿着其上方向移动。因此,如果需要在水平方向上进行拖拽,可以将计算偏移量的代码修改为t.right

  • 具体要在哪里改
    
  • 要将计算鼠标偏移量的代码修改为t.right,需要将以下代码:

    复制float offsetY = Input.mousePosition.y - mousePos.y;
    t.Translate(t.up * offsetY * 0.02f, Space.World);
    

    修改为:

    复制float offsetX = Input.mousePosition.x - mousePos.x;
    t.Translate(t.right * offsetX * 0.02f, Space.World);
    

    这样就可以在水平方向上进行拖拽了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值