前提・実現したいこと
現在、以下のGIFの様にPlaneオブジェクトに貼り付けたテクスチャの上をオブジェクトが通った部分だけ透明で塗るという処理を実装しています。
この処理は
https://www.wwwmaplesyrup-cs6.work/entry/2020/01/20/010704
を参考にしました。このGIFはUnityエディタ上です。
この処理をビルドすると、なぜか以下のGIFの様にオブジェクトがテクスチャに触れた瞬間に置き換わってしまいます。この現象を修正したいです。このGIFはビルド後です。
ちなみにビルド設定はプラットフォームがWindows、Architectureが64bitです。
さらにテクスチャのインポート設定は以下の画像の様になっており、フォーマットをRGBA32bitに変更しています。
ちなみにプラットフォーム事のオーバーライドはしていません。
このテクスチャから作成したマテリアルはシェーダがStandardでレンダリングモードをFadeにしています。
該当のソースコード
実際のスクリプトはかなり長いので関係ある部分以外は省略しました。
処理としてはオブジェクトから真下にRayを飛ばして、先程のPlaneにRayが衝突したらUpdate内の処理が呼び出されるという感じです。
_tex1はTexture2D型で宣言、_paintObj1はGameObject型で宣言し先程のPlaneオブジェクトをインスペクターから入れています。
C#
1ソースコード 2void Start() 3 { 4 _tex1 = new Texture2D(_paintObj1.GetComponent<Renderer>().material.mainTexture.width, _paintObj1.GetComponent<Renderer>().material.mainTexture.height,TextureFormat.RGBA32,false); 5 Graphics.CopyTexture(_paintObj1.GetComponent<Renderer>().material.mainTexture, 0, 0, _tex1, 0, 0); 6 } 7 8void Update() 9 { 10 Vector2 pixelUV1 = hit.textureCoord; 11 pixelUV1.x *= _tex1.width; 12 pixelUV1.y *= _tex1.height; 13 14 _tex1.SetPixels((int)pixelUV1.x - _brush.brushWidth / 2, (int)pixelUV1.y - _brush.brushHeight / 2, _brush.brushWidth, _brush.brushHeight, _brush.colors); 15 _tex1.Apply(); 16 renderer.material.mainTexture = _tex1; 17 }
試したこと
この処理を実装した当初にテクスチャのフォーマットをAutomaticにしていた為に、エディタ上でも今回のビルド後の様な現象が発生していました。
その問題はテクスチャのフォーマットをRGBA32bitに変更することで修正できました。そのため今回も同様の原因と考えましたが、設定を見直しても一向に改善しませんでした。
補足情報(FW/ツールのバージョンなど)
Unity 使用ver. 2019.3.9f1

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/21 07:02