Unityはどのようにデプスバッファを直接取得するか

1)Unityはどのようにデプスバッファを直接取得するか

2)UnityEditorでのSpriteAtlasの読み込みの問題

3)GameObjectをProjectウィンドウからSceneViewウィンドウにドラッグできない

4)UGUIのイベント応答の問題

5)iOS設定Texture2DのmipMapBiasが無効です


 

Rendering

Q:いくつかの情報を確認したところ、Unityは深度テクスチャを取得するために各オブジェクトをもう1回レンダリングする必要があるようですが、このレンダリングを省略して深度バッファに直接取得する方法はありますか?または、深度バッファを直接コピーします。

 

A:できますよ。主な手順は次のとおりです。

  1. Camera.SetTargetBuffersを介してカメラの色と深度のBufferを新しいRT(ColorBufferRT、DepthBufferRT)に再ポイントします。
  2. AfterForwardOpaqueイベントをCommandBufferに追加し、ColorBufferRTとDepthBufferRT Blitを新しいRTにレンダリングします(後者のレンダリングは直接使用できます)。
  3. CommandBufferを介してAfterEverythingイベントとBlitColorBufferRTをCameraTargetに追加します(画面が正しくようにするため)。

詳細については、

https://blog.csdn.net/linjf520/article/details/104964803を参照してください。


 

Texture

Q:使用されているバージョンはUnity 2018.3.6f1です。Unity EditorモードでPrefabを編集すると、画像がメモリに読み込まれます。その結果、ゲームの開始時に関連するアトラスSpriteAtlasManager.atlasRequestedが事前にコールされ、アトラスの読み込みエラーが発生します。

 

上図は、早すぎたアトラスのロードで、失敗時に検出したメモリにロードされた画像です。ゲームの実行中に、プレハブを編集するときにメモリ内の画像アトラス、をクリアする方法はありますか?

補足:ゲームを実行せずにメモリ表示のインターフェイスを呼び出し、メモリにまだ多くの画像がロードされていることを確認します。

 

A:この問題の本質は、Atlasに参照したSpriteをロードするときに、メモリにAtlasがない場合、アトラスをロードするための「リクエスト」(atlasRequested)がトリガーされることです。EditorでPrefabを編集すると、このリクエストが生成されます。ゲームの最初のフレームで、このリクエスト関数がコールされ、このリクエストはNativeレイヤーによって発するため([RequiredByNativeCode])、これを制御する方法はありません。メモリにあるアセットをアンロードすることと関係ありません。

このリクエストはランタイムの最初のフレームでのみコールするため、最初のフレームでatlasRequestedイベントを登録しないでください。最初のフレームの後、対応するPrefabをロードする必要があるときに関数を登録したりしないでください。このようにすると、ゲームを起動時にこの関数をコールすることが避けられます。


 

Editor

Q:最近、Unityは会社のプロジェクトを開いたときにGameObjectをProjectウィンドウからSceneViewウィンドウにドラッグできないことがわかりましたが、新しいプロジェクトを作成したらドラッグすることはできるようになりました。特定のツールによるものなのか、プラグインによるものなのかを推測しますが、プラグインやツールが多すぎるので、ひとつひとつチェックするのは時間の無駄です。使用されているUnityのバージョンは2019.4です。

 

通常のプロジェクトでは、GameObjectをプロジェクトウィンドウからSceneViewウィンドウにドラッグしたら、アイコンは次のようになります。

 

異常な時、以下のようになってしまいました:

 

現在、外部ツールまたはプラグインのSceneView.duringSceneGuiおよびDragAndDropの関連コードはコメント化されており、問題は依然として存在します。

 

A:この問題の理由は、GameObjectのEditorを書き直し、OnSceneDrag関数を実装しなかったためです。この関数が実装されていない場合、オブジェクトをProjectWindowからSceneViewにドラッグできません。


 

UGUI

 

Q:UGUI RayCastのNoDrawRayCastはPCでは問題なくクリックできますが、Androidスマホになったら浸透(penetration)し、クリックして応答することはできません。透明チャンネルが0であるImageを使用する時は問題ありません。

 

スクリプトは次のとおりです。

 

A:Imageの半透明度を0に設定し、CanvasRendererでのCullTransparent Meshを選択して、描画せずにクリックイベントに応答できるようにすることができます。(さらに、問題主のコードをテストしました結果、Xiaomi 9では問題ありません。)


 

Texture

Q:iOSデバイスでTextureMipmapStreamingを使用すると、Texture2DのmipMapBiasの設定が無効になります。このTextureはMaterialから取得したmainTextureですが、Editorで有効になります(画像がぼやけになったり鮮明になたっりできます)。

バージョンはUnity2018.4.13です。関連する設定を次の図に示します。

 

 

A:これにつき、Texture.streamingTextureDiscardUnusedMips = trueを有効にする必要があります。そうしないと、メモリが十分である場合、高精度のテクスチャは破棄されません。


UWA公式サイト:https://jp.uwa4d.com

UWA公式ブログ:https://blog.jp.uwa4d.com

UWA公式Q&Aコミュニティ(中国語注意):https://answer.uwa4d.com