Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 1. 数学几何计算基础

  • 2.位移、速度、加速度(向量)

  • 3.向量点乘、叉乘

  • 4.四元数、欧拉角(角度姿态)

  • 5.矩阵

  • 6.射线

  • 7.包围盒

  • 8.第一、三人称漫游

    • 1. 键盘WASD按键状态记录
    • 2. W键控制角色模型运动
    • 3. 加速度(按键给玩家加速)
    • 4. 阻尼(玩家角色逐渐减速停止)
    • 5. 按键S退后运动
    • 6. 相机跟着玩家走(第三人称漫游)
    • 7. 鼠标左右拖动改变玩家视角
      • 8. 获取玩家(相机)正前方方向
      • 9. 鼠标上下移动只改变相机视角
      • 10. 玩家角色左右运动(叉乘)
      • 11. 鼠标滑动改变视角(指针锁定模式)
      • 12. 快捷键切换第一、第三人称
      • 13. 骨骼动画与运动状态关联
    • 9.漫游-八叉树碰撞检测

    • 10.CannonJS物理引擎

    • Three.js进阶教程
    • 8.第一、三人称漫游
    郭隆邦
    2023-09-03
    目录

    7. 鼠标左右拖动改变玩家视角

    # 鼠标左右拖动改变玩家视角

    本节课给大家讲解一个新功能,就是你按住鼠标左键,左右拖动,改变玩家角色和相机的视角。

    # 了解鼠标滑动事件规则

    如果你不了解前端HTML5鼠标滑动事件的规则,可以跟着视频学习一遍,如果你非常熟悉,可以直接快进到下一步。

    // 鼠标滑动期间,会不停地多次触发鼠滑动事件,直到不再滑动
    document.addEventListener('mousemove', (event) => {
        console.log('触发1次');
    });
    

    鼠标持续滑动时候,会多次触发滑动事件。event.movementX表示本次触发事件相对上次,鼠标左右方向滑动的距离,单位是像素,往右滑动是正,往左滑动是负。

    document.addEventListener('mousemove', (event) => {
        console.log('鼠标每次x方向移动距离', event.movementX);
    });
    

    # 鼠标控制玩家转向

    通过鼠标左右滑动距离控制玩家角色模型player旋转。

    document.addEventListener('mousemove', (event) => {
        // 注意rotation.y += 与 -= 区别,左右旋转时候方向相反
        //event.movementX缩小一定倍数改变旋转控制的灵敏度
        player.rotation.y -= event.movementX / 600;
    });
    

    # 鼠标左键拖动时候,旋转玩家角色

    鼠标左键拖动定义:鼠标左键按下,不松开,左右滑动

    1. 记录鼠标左键状态
    let leftButtonBool = false;//记录鼠标左键状态
    document.addEventListener('mousedown', () => {
        leftButtonBool = true;
    });
    document.addEventListener('mouseup', () => {
        leftButtonBool = false;
    });
    
    1. 判断鼠标左键状态,决定是否旋转玩家角色
    document.addEventListener('mousemove', (event) => {
        //鼠标左键按下时候,才旋转玩家角色
        if(leftButtonBool){
            player.rotation.y -= event.movementX / 600;
        } 
    });
    

    # 测试上节课代码:相机随着player旋转

    上节课,给大家讲解过,相机对象是玩家角色模型的子对象,玩家角色player旋转的时候,子对象相机自然跟着同步旋转,你可以测试下执行player.add(camera)与不执行的区别。

    //相机作为player子对象,会跟着player平移或旋转
    player.add(camera);
    camera.position.set(0, 1.6, -5.5);
    camera.lookAt(0, 1.6, 0);
    

    第三人称漫游相机位置

    6. 相机跟着玩家走(第三人称漫游)
    8. 获取玩家(相机)正前方方向

    ← 6. 相机跟着玩家走(第三人称漫游) 8. 获取玩家(相机)正前方方向→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式