微信3D小游戏系列一:在微信小游戏中使用threejs

这篇具有很好参考价值的文章主要介绍了微信3D小游戏系列一:在微信小游戏中使用threejs。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


环境配置

下载开发者工具

下载地址: https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

微信小程序/小游戏的开发需要在专门的开发者工具中,可下载最近更新的稳定版,若之前没有使用过微信开发的话,进入 小游戏开发指南填写和提交相关的注册信息。

如图新建一个空目录,选择该目录建立自己的项目。
微信3D小游戏系列一:在微信小游戏中使用threejs
选择小游戏打开后会默认进入一个示例小游戏,在模拟器中可以将声音关闭:
微信3D小游戏系列一:在微信小游戏中使用threejs

目录结构

微信3D小游戏系列一:在微信小游戏中使用threejs
以上为小游戏的目录,红色方框里的为小程序的常规配置,具体内容见文档:微信配置文档。其它目录:

  • audio :存放音频文件
  • images: 图片资源
  • js: 游戏逻辑的具体实现,需要的工具类库等
  • databus.js:管控游戏状态
  • game.js:打包入口
  • game.json:微信小游戏配置,参考文档:小游戏配置

./js中内容如下,里面基本所有的代码我们都可以舍弃,但是有一个依赖包很重要:weapp-adapter.js这个包为微信小程序环境创建了类似与WEB浏览器的一系列 API 与 DOM,其中就包括了 canvas

./js
├── base                                   // 定义游戏开发基础类
│   ├── animatoin.js                       // 帧动画的简易实现
│   ├── pool.js                            // 对象池的简易实现
│   └── sprite.js                          // 游戏基本元素精灵类
├── libs
│   ├── symbol.js                          // ES6 Symbol简易兼容
│   └── weapp-adapter.js                   // 小游戏适配器
├── npc
│   └── enemy.js                           // 敌机类
├── player
│   ├── bullet.js                          // 子弹类
│   └── index.js                           // 玩家类
├── runtime
│   ├── background.js                      // 背景类
│   ├── gameinfo.js                        // 用于展示分数和结算界面
│   └── music.js                           // 全局音效管理器
├── databus.js                             // 管控游戏状态
└── main.js                                // 游戏入口主函数

引入Three.js

现在我们还缺少Three.js,因为我在其它项目中使用过 three ,从node_modules找到three,把编译后的文件放到libs目录下即可。
微信3D小游戏系列一:在微信小游戏中使用threejs
微信3D小游戏系列一:在微信小游戏中使用threejs

在小程序中运行 threejs

目标效果

我们的目标是把博文threejs-场景创建中的效果搬到小屏幕上,在web端运行效果如下。

微信3D小游戏系列一:在微信小游戏中使用threejs

小程序代码

代码逻辑和在web端是完全一样的,唯一的区别就是在小程序中无法使用框架(react),需要使用原生JS写法,不过问题不大。

import * as THREE from './js/libs/three.js'
import './js/libs/weapp-adapter.js'

// 创建渲染器
const renderer = new THREE.WebGLRenderer({
    canvas: canvas
})
renderer.setClearColor(new THREE.Color(0x000000)); // 设置背景颜色和透明度
renderer.shadowMap.enabled = true; // 渲染器允许渲染阴影⭐
renderer.setSize(window.innerWidth, window.innerHeight)

// 创建场景
const scene = new THREE.Scene()

// 创建相机并设置属性
const camera = new THREE.PerspectiveCamera()
camera.aspect = (window.innerWidth / window.innerHeight) // 摄像机设置屏幕宽高比
camera.fov = 45; // 摄像机的视角
camera.near = 0.01; // 近面距离
camera.far = 1001; // 远面距离
camera.position.set(30, 40, 30) // 设置摄像机在threejs坐标系中的位置
camera.lookAt(0, 0, 0) // 摄像机的指向

// 添加一个坐标轴
const axes = new THREE.AxesHelper(20);
scene.add(axes);

// 添加一个地板
const planeGeometry = new THREE.PlaneGeometry(60, 20); // 创建平面几何体
const planeMaterial = new THREE.MeshBasicMaterial({ // 一种非光泽表面的材质,没有镜面高光
    color: 0xAAAAAA
});
const plane = new THREE.Mesh(planeGeometry, planeMaterial); // 创建地板模型
plane.rotation.x = -0.5 * Math.PI; // 默认平行于xoy面,沿着X轴旋转-90°至xoz面
plane.receiveShadow = true;
scene.add(plane); // 向场景中添加创建的地板

// 添加一个球体
const sphereGeometry = new THREE.SphereGeometry(4, 20, 20); // 球状几何体
const sphereMaterial = new THREE.MeshBasicMaterial({ color: 0x7777FF, side: THREE.DoubleSide });
const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
sphere.castShadow = true; // 允许接受阴影
sphere.position.set(20, 4, 2); // 球模型在坐标系中位置
scene.add(sphere); // 向场景中添加光源

// 添加一个立方体
const cubeGeometry = new THREE.BoxGeometry(5, 5, 5);
const cubeMaterial = new THREE.MeshBasicMaterial({ color: 'blue' })
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
cube.castShadow = true;
cube.position.set(-20, 2.5, 0);
scene.add(cube)


let step = 0;
const cubrRoatetSpeed = 0.03;
const sphereRotateSpeed = 0.03

const animate = function () {

    step += sphereRotateSpeed
    sphere.position.x = 20 + (10 * Math.cos(step)); //水平方向为余弦曲线
    sphere.position.y = 4 + (10 * Math.abs(Math.sin(step))); // 竖直方向为正弦曲线

    // // 立方体添加旋转效果
   cube.rotation.x += cubrRoatetSpeed;
   cube.rotation.y += cubrRoatetSpeed;
   cube.rotation.z += cubrRoatetSpeed;
}

const render = function () {
    animate()
    renderer.render(scene, camera)
    requestAnimationFrame(render)
}

render()

打开微信开发者工具,查看效果:

微信3D小游戏系列一:在微信小游戏中使用threejs
这里发现两个问题:

  • 使用 MeshLambertMaterial 材质时颜色没有生效,只能换成 MeshBasicMaterial
  • 原生threejs 的阴影没有生效,可能需要书写webgl来解决这个问题。

看来threejs在小程序上的适配还是有很大问题,不过也可以理解,毕竟小程序的运行环境与浏览器是完全不同的。但是目标已经完成,工程代码可下载。文章来源地址https://www.toymoban.com/news/detail-441647.html

到了这里,关于微信3D小游戏系列一:在微信小游戏中使用threejs的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WEB--3D立体魔方小游戏 (附源码)

    魔方这个学生时代常玩的游戏之一 想必大家都不怎么陌生了吧 如果感到陌生的话 那难道这就表明了时代间的层层代沟 时代变化的太快了嘛 好了言归正卷了 那么前端怎么实现魔方小游戏呢 从以下几个方面细讲 结果是最好的印证品 这毋庸置疑的了 1、先将平面上的6个DIV拼接

    2024年02月11日
    浏览(46)
  • 【Cocos 3d】从零开始自制3d出租车小游戏

    本文很长,建议收藏食用。 课程来源: 游戏开发教程 | 零基础也可以用18堂课自制一款3D小游戏 | Cocos Creator 3D 中文教程(合集)p1~p6 简介: 资源下载:https://github.com/cocos-creator/tutorial-taxi-game 适合学习人群:本教程假定你对编程有一定的了解,ts,js 学习过其中之一。 如果不

    2024年02月02日
    浏览(54)
  • Unity小游戏-惊爆游戏(PC)3D联网大逃杀游戏 项目展示+完整项目源码

    1.类似吃鸡的小游戏,但是这里没有毒圈,武器只有炸弹,没有枪。 2.游戏开始后所有人的体力会不断下降,当体力下降到0就会死亡。 3.玩家只有吃食物增加体力才能活下去,而食物只能通过空投获取或者干掉其他玩家获取。(这就意味着你必须去干人,不能躲在一边苟活)

    2023年04月20日
    浏览(55)
  • 微信、抖音小游戏使用XMLHttpRequest请求超时(request:fail timeout)readyState始终为1的解决方案

    前阵子又有小游戏挂掉了,用户登录不上,而且是微信抖音都有该现象,调试了下发现是XMLHttpRequest往后端发送请求,没有得到响应引起的,readyState正常是1234状态,但是BUG发生时readyState到1就卡住了。监听onerror事件得到了request:fail timeout的错误日志。猜测可能是数据量过大而

    2024年02月04日
    浏览(97)
  • 你的第一个微信小游戏,教你从0开始制作小游戏(一)

    微信开放文档 Cocos引擎_游戏开发引擎 发布流程就是先在cocos中编写你的游戏,然后生成对应的软件包,再到微信开发者工具上传到微信小程序平台。 Cocos是典型的组件节点式的开发,3.x版本之前的语言是js,ts都可以。3.x版本之后就只能用ts。 Introduction · Cocos Creator使用手册

    2024年02月12日
    浏览(61)
  • Unity项目转微信小游戏 微信小程序保姆教程,繁杂问题解决,及微信小游戏平台简单性能测试

    借着某人需求,做了一波简单的技术调研:将Unity项目转换为微信小游戏。 本文主要内容:Unity转换小游戏的步骤,遇到问题的解决方法,以及简单的性能测试对比 微信小游戏的限制 微信小游戏对程序包体大小有严格限制:首包必须小于2M,首包加分包(后加载)不得大于

    2024年02月05日
    浏览(67)
  • CocosCreator 微信小游戏

    问题描述: 用 cocoscreator 写的小游戏,想发布为微信小游戏,如何构建发布? 链接: https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html 依据自己的电脑配置,下载相应的文件哦。 打开 -微信开发者工具- ,用微信登陆,点击小游戏 ,点击 加号添加游戏 在 注册 -微信开发者

    2024年02月07日
    浏览(41)
  • Unity - 微信小游戏

    总参考:Unity WebGL 微信小游戏适配方案(公测)   下载 Unity插件,并导入至游戏项目中,版本更新请查看更新日志 请查阅推荐引擎版本,安装时选择 WebGL 组件 最终选择 Unity2021.2.5f1c1 InstantGame 前往Node官网安装长期稳定版 之前已安装 v16.17.0 前往微信开发者工具下载安装 Stable

    2024年02月06日
    浏览(57)
  • 现有Unity转微信小游戏

    关于微信小游戏开发的内容在《Unity WebGL 微信小游戏适配方案》中有详细,这里会忽略大部分更深入的细节,大家可以自行在下面的地址中找到答案。 此篇文章的目的是带着大家快速的把自己已有的游戏转成微信小游戏。 《Unity WebGL 微信小游戏适配方案》地址: https://gith

    2023年04月08日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包