Skip to content

SkinViewer 皮肤展示

64×64 / 64×32(旧版)/ 128×128(HD) 的 Minecraft 皮肤图折叠成一个可旋转的 3D 小人。 纯 CSS 3D transforms 实现,无第三方依赖,支持自动旋转 / 拖拽 / 行走姿势 / 第二层。

皮肤参数
拖拽小人或调节下方参数
皮肤Steve(默认)
Slim(Alex 体型,3px 手臂)
显示第二层(帽子 / 夹克 / 袖子 / 裤腿)
自动旋转
姿势
缩放
Selected: 6.00
vue
<script setup>
import { ref } from 'vue'
const skin = ref('/path/to/your-skin.png')
</script>

<template>
  <!-- 标准 64×64 -->
  <mc-skin-viewer :skin="skin" />

  <!-- Slim 体型(Alex,3px 手臂) -->
  <mc-skin-viewer :skin="skin" slim />

  <!-- HD 皮肤(128×128)自动识别 -->
  <mc-skin-viewer :skin="skinHd" :scale="8" />

  <!-- 旧版 64×32(自动镜像左半身) -->
  <mc-skin-viewer :skin="skinLegacy" />

  <!-- 行走姿势 + 关闭第二层 -->
  <mc-skin-viewer :skin="skin" pose="walk" :show-second-layer="false" />
</template>

皮肤来源

  • 本地文件:用 <input type="file"> + URL.createObjectURL(file) 转成 blob URL 直接传给 skin
  • 远程 URL:直接传图片地址;跨域加载只是 <img> 标签读取,不需要 CORS(仅作为 background-image 使用)。
  • DataURLdata:image/png;base64,... 同样支持。

支持的皮肤格式

尺寸说明
64×64标准现代皮肤,包含双臂 / 双腿独立 UV,以及完整第二层
64×64(Slim)Alex 体型,3px 手臂;通过 slim prop 切换
64×32旧版 1.7- 皮肤,自动检测:仅有右半身数据,左半身会镜像;第二层仅帽子可用
128×128HD 皮肤,UV 布局与 64×64 等比放大;组件按 64×64 处理,浏览器自动缩放

Props

名称类型默认说明
skinstring必填,皮肤图地址(URL / blob URL / dataURL)
slimbooleanfalse是否 Slim(Alex)体型,手臂宽 3px
scalenumber61 个皮肤像素对应多少 CSS 像素;整体大小由它决定
showSecondLayerbooleantrue是否显示帽子 / 夹克 / 袖子 / 裤腿外层
pose'idle' | 'walk' | 'none''idle'站立微浮动 / 行走摆动 / 完全静止
autoRotatebooleantrue自动绕 Y 轴旋转
pitchnumber8视角俯仰角(度),>0 从上往下看
yawnumber-20初始 Y 旋转角(度)
interactivebooleantrue是否允许鼠标 / 触摸拖拽旋转;按住时自动旋转暂停
backgroundstring'transparent'容器背景,可填任意 CSS 颜色

Events

事件参数说明
load{ width: number; height: number; legacy: boolean }皮肤图加载完成,legacy=true 表示识别为 64×32 旧版
errorEvent | string皮肤图加载失败

实现说明

  • 6 个基础部位(头 / 身 / 双臂 / 双腿)+ 6 个外层,全部用 6 个 <div> 当 cube 面, 通过 background-position 在皮肤图上裁出 UV 区域,再用 CSS transform 推到立方体表面。
  • 关节摆动用 4 层 wrapper:pivot → swing → center → faces, 保证肩 / 髋绕关节点旋转而不是绕几何中心旋转。
  • image-rendering: pixelated 保持像素质感;HD 皮肤同样按 64×64 UV,浏览器自动做近邻缩放。
  • 旧版 64×32 皮肤自动检测(宽:高 = 2:1),左半身镜像右半身。

MIT Licensed · 设计语言移植自 Spectrollay-McUI