Open Narazaka opened 6 months ago
んー… これはNDMFの管轄外な気がするような?
どっちかというとTexTransToolなんですかね(雑にNDMFにテクスチャ参照つっこむとこうなるのかなと思ってたのでNDMFにたてたけど
Bake後にアップロードするときに警告するならNDMFにPlatform Dependantなアセットかどうかを伝えてndmf側で警告してほしい気はします。
参考までですが、生成したテクスチャをPNGで保存してTextureImporterにいい感じプラットフォーム依存を吸収してもらおうとしても、ビルド完了までPNGをインポートできません。ビルド開始時にNDMF側で AssetDatabase.StartAssetEditing()
が呼ばれてインポートが止まっているためです。
現状はPass内でテクスチャを生成する場合はTexture2Dのまま扱う(=プラットフォーム依存な形式に自分で圧縮する)必要がありました。
using nadena.dev.ndmf;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.Assertions;
[assembly: ExportsPlugin(typeof(TextureTestPlugin))]
public class TextureTestPlugin : Plugin<TextureTestPlugin>
{
protected override void Configure()
{
InPhase(BuildPhase.Resolving).Run("Generate png", (ctx) =>
{
var tex = Texture2D.redTexture;
var png = tex.EncodeToPNG();
var path = "Assets/TextureTestPlugin.png";
File.WriteAllBytes(path, png);
AssetDatabase.Refresh();
var newTex = AssetDatabase.LoadAssetAtPath<Texture2D>(path);
Assert.IsNotNull(newTex); // ここで例外
});
}
}
一応、Passの開始時に AssetDatabase.StopAssetEditing()
を、終了時に AssetDatabase.StartAssetEditing()
をそれぞれ呼ぶことでPNGをインポートできましたが、NDMFの内部実装の知識を前提にしてしまうので、プラグインの責務でこれをやるのはできれば避けたい感じです。
(開始時にStop, 終了時にStartを呼ぶという入れ替わりもややこしい)
Related?: #225
アップロードで毎回出ても鬱陶しいと思うのでマニュアルベイクの時だけ出せるといいですが、BuildContextでアップロードとマニュアルベイクの区別ってつくんでしたっけ?
PCでmanual bakeするとアセット内にDXT5などでTexture2Dアセットが生成される。 これはTexture2DアセットなのでプラットフォームをAndroidにしたときにASTCに自動でならない。 このためエディタ上では正常に動作したまま、アップロードするとテクスチャが黒色などの状態になると思われる。
挙動は仕方ない雰囲気があるので、なんか警告があると嬉しい気がする(どこに?いつ?問題があるがあまりイメージは出来ていない)。