从Unity到Three.js(计时器、Transform)

计时器、模型对象平移函数、枚举定义的使用

对应unity中的一些常用功能

javascript 复制代码
import * as THREE from 'three';

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 1000);

const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
camera.position.z = 50;

//枚举定义
const direction = {
    UP: '上',
    DOWN: '下',
    LEFT: '左',
    RIGHT: '右'
};

let state;
function changeState(dir) {
    console.log("dir=" + dir);
    if (state != dir) {
        state = dir;
    }
}

//计时器
const clock = new THREE.Clock();
let timer = 0;
//枚举索引,不会js的int转枚举语法
let stateIndex = 1;
function updateChangeState() {
    timer += clock.getDelta();
    if (timer >= 3) {
        timer = 0;
        stateIndex++;
        if (stateIndex == 5) {
            stateIndex = 1;
        }
        changeState(convertToEnum(stateIndex));
    }
}

//自定义int转枚举方法
function convertToEnum(value) {
    switch (value) {
        case 1:
            return direction.UP;
        case 2:
            return direction.LEFT;
        case 3:
            return direction.DOWN;
        case 4:
            return direction.RIGHT;
    }
}

//更新模型位置
function updateSetObjPosition() {
    switch (state) {
        case direction.UP:
            cube.translateY(0.1);
            break;
        case direction.DOWN:
            cube.translateY(-0.1);
            break;
        case direction.LEFT:
            cube.translateX(-0.1);
            break;
        case direction.RIGHT:
            cube.translateX(0.1);
            break;
    }
}

function animate() {
    requestAnimationFrame(animate);

    updateChangeState();
    updateSetObjPosition();

    renderer.render(scene, camera);
}

animate();
相关推荐
zttbee4 小时前
echarts图表tooltip色块失效
前端·javascript·echarts
虚无境6 小时前
如何用AI帮我写出实用的插件
前端·javascript·ai编程
zimoyin7 小时前
在 C# 里嵌入 JavaScript:用 Jint 做可热更新的自动化脚本(从入门到踩坑)
javascript·c#·自动化
FRing038 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
OpsEye9 小时前
怎么实现大模型的按用户、按应用配额限流?
javascript·ai编程
云舜言传10 小时前
Bloom 手势演示操作 · 录屏指南
javascript·深度学习·机器学习
郝学胜-神的一滴11 小时前
游戏设计:原型与开发 08:我们到底在为谁做游戏
程序人生·游戏·游戏引擎·游戏开发·游戏策划
五仁烧饼12 小时前
动手学 Shader Graph(二):溶解与边缘发光
游戏·unity·shader·shader graph
淡海水13 小时前
06-02-源码-增量标记算法实现
算法·unity·c#·gc
Highcharts.js13 小时前
BI可视化图表“维护难”问题的解决方案
开发语言·前端·javascript·编辑器·ecmascript·bi·highcharts