You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
5.2 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MU3.Sys;
using System.IO;
using System;
public class Main : MonoBehaviour
{
private GameObject model;
private GameObject weapon;
private List<string> modelList = new List<string>();
private int idx = 15;
private int count = 1;
private string basePath = "F:/Ongeki_Unity/ab/";
private string[] textureSuffixes = { "_body_no", "_body_sp", "_body_di", "_body_bl",
"_face_di", "_head_no", "_head_sp" };
// Start is called before the first frame update
void Start()
{
AssetBundle.LoadFromFile(basePath + "preloadshaders");
DirectoryInfo TheFolder = new DirectoryInfo(basePath);
foreach (FileInfo NextFile in TheFolder.GetFiles())
{
// Debug.Log(NextFile.Name);
bool flag = false;
if (NextFile.Name == "preloadshaders")
{
flag = true;
}
if (!NextFile.Name.StartsWith("ch_", StringComparison.OrdinalIgnoreCase))
{
flag = true;
}
foreach (string suffix in textureSuffixes)
{
if (NextFile.Name.EndsWith(suffix, StringComparison.OrdinalIgnoreCase))
{
flag = true;
}
}
if (!flag) modelList.Add(NextFile.Name);
}
count = modelList.Count;
loadModel(modelList[idx % count]);
}
void loadModel(string modelName)
{
List<AssetBundle> abs = new List<AssetBundle>();
if (modelName == "ch_001008")
{
abs.Add(AssetBundle.LoadFromFile(basePath + "we_001008_bl"));
abs.Add(AssetBundle.LoadFromFile(basePath + "we_001008_di"));
abs.Add(AssetBundle.LoadFromFile(basePath + "we_001008_no"));
abs.Add(AssetBundle.LoadFromFile(basePath + "we_001008_sp"));
}
if (modelName == "ch_001008_201")
{
abs.Add(AssetBundle.LoadFromFile(basePath + "we_001008_201_bl"));
abs.Add(AssetBundle.LoadFromFile(basePath + "we_001008_201_di"));
}
if (modelName == "ch_001008_202")
{
abs.Add(AssetBundle.LoadFromFile(basePath + "we_001008_202_bl"));
abs.Add(AssetBundle.LoadFromFile(basePath + "we_001008_202_di"));
}
AssetBundle.LoadFromFile(basePath + "000000/ch_000000_101_body_no");
AssetBundle.LoadFromFile(basePath + "000000/ch_000000_101_body_sp");
foreach (string suffix in textureSuffixes)
{
string texturePath = basePath + modelName.Substring(0, 9) + suffix;
if (File.Exists(texturePath))
{
abs.Add(AssetBundle.LoadFromFile(texturePath));
}
}
var bundle = AssetBundle.LoadFromFile(basePath + modelName);
abs.Add(bundle);
foreach (var name in bundle.GetAllAssetNames())
{
model = (GameObject)Instantiate(bundle.LoadAsset(name));
}
foreach (AssetBundle ab in abs)
{
ab.Unload(false);
}
Renderer[] renderers = model.GetComponentsInChildren<Renderer>();
for (int i = 0; i < renderers.Length; i++)
{
for (int j = 0; j < renderers[i].materials.Length; j++)
{
Material material = renderers[i].materials[j];
if (material.shader.name == "MU3/ToonEdge/Skin" ||
material.shader.name == "MU3/ToonEdge/Face" ||
material.shader.name == "MU3/ToonEdge/Face Prior")
{
material.SetColor(Const.ShaderPropertyID_ModifiedColor, Color.white);
material.SetFloat(Const.ShaderPropertyID_ModifiedBlendRate, 0.1f);
material.SetFloat(Const.ShaderPropertyID_ModifiedBrightness, 2.0f);
}
}
}
loadWeapon(modelName.Substring(3, modelName.Length - 3));
}
void loadWeapon(string weaponId)
{
List<AssetBundle> abs = new List<AssetBundle>();
var weaponPath = basePath + "we_" + weaponId;
if (File.Exists(weaponPath))
{
var bundle = AssetBundle.LoadFromFile(weaponPath);
abs.Add(bundle);
foreach (var name in bundle.GetAllAssetNames())
{
weapon = (GameObject)Instantiate(bundle.LoadAsset(name));
}
Animator animator = weapon.GetComponent<Animator>();
if (animator)
{
animator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
}
}
foreach (string suffix in textureSuffixes)
{
string texturePath = weaponPath + suffix;
if (File.Exists(texturePath))
{
abs.Add(AssetBundle.LoadFromFile(texturePath));
}
}
foreach (AssetBundle ab in abs)
{
ab.Unload(false);
}
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
idx++;
Destroy(model);
Destroy(weapon);
loadModel(modelList[idx % count]);
}
}
}