icon预览和自动生成

This commit is contained in:
Bob.Song
2025-10-28 17:46:08 +08:00
parent af4dbc5cde
commit 7b8c6d5cec
204 changed files with 8454 additions and 174 deletions

View File

@@ -1,5 +1,6 @@
// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖
using System.IO;
using UnityEngine;
using FairyGUI;
using NBC;
@@ -11,9 +12,14 @@ namespace NBF
{
ModelViewRenderImage _renderImage;
public ModelViewRenderImage RenderImage => _renderImage;
private Transform ModelRoot => _renderImage?.modelRoot;
private Camera ViewCamera => _renderImage.Camera;
public ModelViewerSettings ViewerSettings => _renderImage.ViewerSettings;
private ItemConfig _itemConfig;
private void OnInited()
{
_renderImage = new ModelViewRenderImage(ModelHolder.asGraph);
@@ -38,16 +44,22 @@ namespace NBF
public void SetData(ItemConfig itemConfig)
{
_renderImage.LoadModel("gfx/" + itemConfig.Model);
_itemConfig = itemConfig;
_renderImage.LoadModel(itemConfig.GetModelPath(), ModelViewerSettings.Load(itemConfig.Id));
}
public void ReSetSetting(ItemConfig itemConfig)
{
_renderImage.LoadModel(itemConfig.GetModelPath(), null);
}
#region ()
private bool _focus;
private float _minFOV = 10f;
private float _maxFOV = 120f;
private void SetRotateListening()
{
var dragObj = TouchHolder;
@@ -104,10 +116,63 @@ namespace NBF
float delta = context.inputEvent.mouseWheelDelta / Stage.devicePixelRatio;
SetZoom(delta);
}
private void SetZoom(float delta)
{
ViewCamera.fieldOfView = Mathf.Clamp(ViewCamera.fieldOfView + delta, _minFOV, _maxFOV);
}
#endregion
#region png
public void SaveRenderTextureToPNG()
{
#if UNITY_EDITOR
RenderTexture rt = RenderImage.RT;
if (rt == null)
{
Debug.LogWarning("RenderTexture 为 null无法保存。");
return;
}
RenderTexture current = RenderTexture.active;
RenderTexture.active = rt;
Texture2D tex = new Texture2D(rt.width, rt.height, TextureFormat.RGBA32, false);
tex.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
tex.Apply();
Texture2D resizedTex = new Texture2D(256, 256, TextureFormat.RGBA32, false);
// 使用双线性滤波进行缩放
for (int y = 0; y < 256; y++)
{
for (int x = 0; x < 256; x++)
{
// 计算在原始纹理中的对应坐标
float u = (float)x / 255f;
float v = (float)y / 255f;
// 获取插值后的颜色
Color color = tex.GetPixelBilinear(u, v);
resizedTex.SetPixel(x, y, color);
}
}
resizedTex.Apply();
byte[] bytes = resizedTex.EncodeToPNG();
var path = Path.Combine(Application.dataPath, $"Resources/Icons/{_itemConfig.Id}.png");
File.WriteAllBytes(path, bytes);
Debug.Log($"✅ RenderTexture 已保存到: {path}");
Notices.Info($"生成:{_itemConfig.Id}");
Object.Destroy(tex);
RenderTexture.active = current;
#endif
}
#endregion
}
}