鼠标控制物体旋转之后发现点小BUG,代码奉上

鼠标控制物体旋转之后发现点小BUG,代码奉上

当鼠标拖动时游戏评测,执行对象旋转功能。 当鼠标位置没有变化时,不执行对象旋转功能。 也就是说,当鼠标按下时,还需要额外一层判断来判断当前鼠标位置是否发生了移动。 如果有的话,证明当前物体正在旋转。 如果不能证明是当前角度查看的对象游戏运营,基于这个思想,完整的代码如下:


    Vector3 v3;
    bool isRotate;
    Vector2 beforMousePos;
    Vector2 currentMousePos;
    
    public void Start()
    {
        beforMousePos = Input.mousePosition;
        currentMousePos = Input.mousePosition;
    }
    private void OnMouseDrag()
    {
        isRotate = true;
        v3 = new Vector3(Time.deltaTime * 200 * Input.GetAxis("Mouse Y"), -Time.deltaTime * 200 * Input.GetAxis("Mouse X"), RobotDemoModel.Robot.transform.rotation.z);
        
    }
    private void OnMouseUp()
    {
        isRotate = false;
    }
   
    private void Update()
    {
        currentMousePos = Input.mousePosition;
        if (Vector2.Distance(currentMousePos,beforMousePos)>10.0f)
        {
            beforMousePos = currentMousePos;
            //print("Mouse Move");
            if (isRotate)
            {
                RobotDemoModel.Robot.transform.Rotate(v3, Space.World);
            }
        }
        //print("Mouse Stop");
        
        
    }

超过!

开发时使用上面的脚本时,发现基本的要求都满足了,但是还是有一些不太舒服的地方。 如果继续旋转就会感觉不舒服。 简单来说,旋转很容易,但是如果想继续旋转,原来的样子和位置就会很不舒服unity 旋转物体,所以,要改变想法,不如直接把物体旋转到相机上unity 旋转物体,让相机围绕物体旋转。 这执行起来会更舒服。 话不多说,代码如下:


    float mouse_x = Input.GetAxis("Mouse X");
    float mouse_y = Input.GetAxis("Mouse Y");
    
    //核心脚本是下面这两句
    //围绕旋转的话和Z轴是无关的,只是围绕物体的X和Y轴进行旋转所以
    //这里有个小点,围绕物体左右旋转使用的是Vector3.up,但是上下旋转使用的是transform.      
    //right,也就是摄像机本身的左右。这样的旋转效果比较好
    transform.RotateAround(tarObj.transform.position,Vector3.up,mouse_x * speed);
    transform.RotateAround(tarObj.transform.position,transform.right,mouse_y * speed);
    //这个是移动摄像机位置,也就是视角的变换
    //因为这个移动和z轴也没有关系,所以选定的就是Up和Left,这里要使用Vector3,用transform的话移动起来就是根据摄像机的XY移动并不是屏幕的XY
    transform.Translate(Vector3.left * (mouse_x * moveSpeed) * Time.deltaTime);  
    transform.Translate(Vector3.up * (mouse_y * moveSpeed) * Time.deltaTime);
    //这个就是摄像机的缩放了
    //Mouse ScrollWheel的取值范围是在+0.3f - -0.3f之间
    if(Input.GetAxis("Mouse ScrollWheel") > 0)
        transform.Translate(Vector3.forward * scrollSpeed);
    if(Input.GetAxis("Mouse ScrollWheel") < 0)
        transform.Translate(Vector3.forward * -scrollSpeed);    

超过!

文章来源:https://blog.csdn.net/qq_38186269/article/details/88741965