工具更新了,国服的提取应该是没问题了(有一些bind的报错,不用管),链接还是上面的回复里面
我自己也导了一份国服的live2d(89个),还有立绘,内存不够的或者是不想自己导的可以下我这个。链接也在这里面,cg,bg感兴趣的可以自己提(主要是好大,加起来都有2g了)
工具更新了,国服的提取应该是没问题了(有一些bind的报错,不用管),链接还是上面的回复里面
我自己也导了一份国服的live2d(89个),还有立绘,内存不够的或者是不想自己导的可以下我这个。链接也在这里面,cg,bg感兴趣的可以自己提(主要是好大,加起来都有2g了)
爱你大佬
话说所现在还有没有什么反和谐的方法,用未和谐的文件直接直接替换,游戏里贴图直接显示不出来
导出的好像没动作耶
rt,国服的motions放包里了,国际服的是在一起的
哦哦
想问问大佬,主线和活动结束后的视频怎么解呀
大佬,请问可不可以把这个as的解密代码以及还原容器路径的代码移到unitylive2dextractor上么,全部数据丢as里的话,我电脑就炸了
谁能帮我处理一下 “MonoBehaviour” 文件?我该如何处理 "MonoBehaviour "文件? 或者,如果有人有黛伦和澈的新皮肤 live2d 文件,能否发给我,谢谢。
大佬好,根据上面的回复我得到了moc文件,能够加载出l2d了,但是没有动作。请问这些.fade.json怎么转成motion3.json?我看到别的帖子里提过转换脚本,但是找了一圈都没找到
const fs = require('fs');
const path = require('path');
function processFadeFiles(dirPath) {
const files = fs.readdirSync(dirPath);
for (const file of files) {
const filePath = path.join(dirPath, file);
const stat = fs.statSync(filePath);
if (stat.isDirectory()) {
processFadeFiles(filePath);
} else if (file.endsWith('.fade.json')) {
const fileName = path.basename(file, '.fade.json');
const data = fs.readFileSync(filePath, 'utf8');
const obj = JSON.parse(data);
const motion3Json = {
'Version': 3,
"Meta": {
"Duration": 0.000,
"Fps": 60.0,
"Loop": true,
"AreBeziersRestricted": true,
"CurveCount": 0,
"TotalSegmentCount": 0,
"TotalPointCount": 0,
"UserDataCount": 1,
"TotalUserDataSize": 0
},
"Curves": [],
"UserData": [
{
"Time": 0.0,
"Value": ""
}
]
};
// motion3Json.Meta.TotalSegmentCount = obj.ParameterIds * 10
// motion3Json.Meta.TotalSegmentCount = obj.ParameterIds * 15
let TotalSegmentCount = 0
let maxTime = 0.0
for (let i = 0; i < obj.ParameterCurves.length; i++) {
let Segments = []
for (let j = 0; j < obj.ParameterCurves[i].m_Curve.length; j++) {
TotalSegmentCount++;
Segments.push(obj.ParameterCurves[i].m_Curve[j].time ?? 0)
Segments.push(obj.ParameterCurves[i].m_Curve[j].value ?? 0)
Segments.push(obj.ParameterCurves[i].m_Curve[j].weightedMode ?? 0)
maxTime = maxTime > obj.ParameterCurves[i].m_Curve[j].time ? maxTime : obj.ParameterCurves[i].m_Curve[j].time
}
Segments.pop()
motion3Json.Curves.push({
"Target": "Parameter",
"Id": obj.ParameterIds[i],
"Segments": Segments
})
}
motion3Json.Meta.CurveCount = obj.ParameterIds.length
motion3Json.Meta.Duration = maxTime
motion3Json.Meta.TotalSegmentCount = TotalSegmentCount
motion3Json.Meta.TotalPointCount = obj.ParameterIds.length + TotalSegmentCount
fs.writeFileSync(path.join(dirPath, `${fileName}.motion3.json`), JSON.stringify(motion3Json, '\t'));
console.log(path.join(dirPath, `${fileName}.motion3.json`) + "已生成");
} else if (file.endsWith('CubismPhysicsController.json')) {
const data = fs.readFileSync(filePath, 'utf8');
const obj = JSON.parse(data);
let physicsJson = {
"Version": 3,
"Meta": {
"PhysicsSettingCount": 0,
"TotalInputCount": 0,
"TotalOutputCount": 0,
"VertexCount": 0,
"Fps": 0,
"EffectiveForces": {
},
"PhysicsDictionary": [
]
},
"PhysicsSettings": []
}
physicsJson.Meta.EffectiveForces.Gravity = obj?._rig?.Gravity
physicsJson.Meta.EffectiveForces.Wind = obj?._rig?.Wind
physicsJson.Meta.Fps = obj._rig.Fps ?? 60
for (let i = 0; i < obj._rig?.SubRigs?.length ?? 0; i++) {
let physicsSetting = {
"Id": "PhysicsSetting",
"Input": [
],
"Output": [
],
"Vertices": [
],
"Normalization": {
}
}
let rig = obj._rig.SubRigs[i]
physicsSetting.Id = physicsSetting.Id + (i + 1)
physicsJson.Meta.PhysicsDictionary.push({
"Id": physicsSetting.Id,
"Name": i + 1 + ""
})
for (let j = 0; j < rig?.Input.length ?? 0; j++) {
physicsSetting.Input.push({
"Source": {
"Target": "Parameter",
"Id": rig.Input[j].SourceId
},
"Weight": rig.Input[j].Weight,
"Type": rig.Input[j].AngleScale || rig.Input[j].AngleScale === 0 ? "Angle" : "X",
"Reflect": false
})
}
for (let j = 0; j < rig?.Output.length ?? 0; j++) {
physicsSetting.Output.push({
"Destination": {
"Target": "Parameter",
"Id": rig.Output[j].DestinationId
},
"VertexIndex": 1,
"Scale": rig.Output[j].AngleScale ?? 1,
"Weight": rig.Output[j].Weight,
"Type": rig.Output[j].AngleScale || rig.Output[j].AngleScale === 0 ? "Angle" : "X",
"Reflect": false
})
}
for(let j = 0; j < rig?.Particles?.length; j++) {
physicsSetting.Vertices.push( {
"Position": rig?.Particles[j].InitialPosition,
"Mobility": rig?.Particles[j].Mobility,
"Delay": rig?.Particles[j].Delay,
"Acceleration": rig?.Particles[j].Acceleration,
"Radius": rig?.Particles[j].Radius
})
}
physicsSetting.Normalization = rig.Normalization
physicsJson.PhysicsSettings.push(physicsSetting)
}
fs.writeFileSync(path.join(dirPath, `l2d.physics3.json`), JSON.stringify(physicsJson, '\t'));
console.log(path.join(dirPath, `l2d.physics3.json`) + "已生成");
}
}
}
processFadeFiles("character");
谢谢。motion3.json里面的ParameterIds被哈希过还是用不了,大佬当时导出是怎么处理的啊?
export-liv2d model
感谢大佬,原来盘里的是专用版本啊,从解密到hash都搞定了,牛牛牛。我一开始用通用版死活整不出来
有的