Airtestツールを使用する時のスタック問題

今回の主な話題:Airtestツールを使用する時の動作が重い問題、Overdrawのビュー問題、ModelImporterTangents.CalculateMikk、ASTC形式のビットマップ変換、AnimatorControlleがハンギングクリップを動的管理する方法。


Airtest

テストでは、戦闘が終わるまで待つ必要があります。コードにはpoco(‘UIRoot’).child(‘BattleEnd’).wait_for_appearance(100000)で実現されていますが、毎回この部分のコードを実行始めると、1、2秒ごとに画面の動きが重いことが見つけました。そして、「Poco補助ウィンドウ」を「Stop」に変更し、Deviceウィンドウも閉じましたが、動作はまた重いです。原因は何ですか? それを解決する方法はありますか?

(テスト用設備はHuawei Honour 10です)

自分が回答します。

プロジェクトにはUIを管理する管理ツールがありますから、PocoManagerにRPC方法を追加しました。

[RPC]
private object IsModuleVisible(List<object> param)

そしてairコードに以下を添加します。

from poco.utils.simplerpc.utils import sync_wrapper
from poco.drivers.unity3d import UnityPoco
import time;
from poco.exceptions import PocoTargetTimeout
auto_setup(__file__)
poco = UnityPoco()

@sync_wrapper
def IsModuleVisible(module):
    return poco.agent.c.call("IsModuleVisible", module)

def WaitForAppearance(module, timeout = 120):
    start = time.time()
    while not IsModuleVisible(module):
        poco.sleep_for_polling_interval();
        if time.time() - start > timeout:
            raise PocoTargetTimeout('Appearance', module)

このカスタムWaitForAppearanceをコールすれば、動作の重いがなくなりました。他に何かより簡単な解決法があるかどうかはわかりません。


OverDraw

SceneビューのRenderMode→Overdrawでは、ビューはオブジェクトが遮るレイヤーの数の間の関係のみを提供して、画面が描画する最終的なOverdrawではありません。このように理解できますか?

Editorのやり方はただ不透明Shaderを半透明に置き換えて描画することですが、計算ミスが発生する可能性があります。

例えば、2つの不透明オブジェクトが重ねる時に、モバイル端末の不透明は1つレイヤーしかありませんが、Editorでは2つと統計されます。

同時に、EditorのOverdrawビューは多くのプロジェクトのカスタムShaderをサポートしていないため、対応するOverdrawビューも見られません。


Mesh

最近にはUnityアップグレードの作業をしています。Unity 4の中に、Mesh接線に関する設置は下記に定義します。

ModelImporterTangentSpaceMode

Import

Calculate

None

Unity 2018では、接線インポート設定は新しい列挙です。

ModelImporterTangents

Import

CalculateLegacy:元のCalculateとsplitTangentsAcrossSeams=falseに対応する

None

CalculateMikk

CalculateLegacyWithSplitTangents:元のCalculateとsplitTangentsAcrossSeams=trueに対応する

このCalculateMikkの意味は何ですか?Unity公式ドキュメントに下記のように記載されています。

Calculate tangents using MikkTSpace (default).

Vertex tangents are calculated with Morten Mikkelsen’s tangent space algorithm (“MikkTSpace”). This algorithm is used by many 3D modeling packages, normal mapping tools and graphics engines.

現在、CalculateLegacyとCalculateMikkの詳細な違い、つまり、CalculateLegacyをいつ使用する必要があるのか​​、CalculateMikkをいつ使用する必要があるのか​​がわかりません。

DCCがどのように生成されるかを確認してください。モデルにTBがある場合は、生成する必要はありません。SPなどの比較的新しいDCCを使用する場合は、MIKKTを使用します。ツールが古い場合、Legacyを使用します。本質は、エンジンとDCCのTBを一致にさせることです、これで法線マップ効果の一致は保証できます。


Texture

(1)Sketchfabで1つモデルを買いましたが、テクスチャファイルに1つのASTCファイルが見つかりました。何か本当の画像BMPファイルになさせる方法ありますか?

(2)ASTCテクスチャをjpg形式のテクスチャにエクスポートするにはどうすればよいですか?

(1)実際に、ASTC形式は効果のより良い形式です。しかし、Unityエンジンにロードし、Texture2Dを読み取らせてから、ビットマップ形式に変換することはできます。

同時に、ImageConversion方法を使用して、最終的にそれをビットマップに変換することもできます。

またはASTC形式テクスチャを読み取るツールを検索でき、ビットマップに直接変換できるかどうかを確認できます(これは検索していませんが、自分でGoogleしてください)。

(2)これは役に立ちます。

https://docs.unity3d.com/560/Documentation/ScriptReference/Texture2D.EncodeToJPG.html


Animation

質問したいです。現在のMMOゲームキャラクターのアニメーション管理は自分で書いたステートマシンが再生するLegacy動画ですか?あるいは現在のAnimatorで作りますか?

Animatorで作りたい場合、すべてのアニメーションをステートマシンにドラッグする必要があるようです。数百のアニメーションを同時にロードすると、メモリが非常に浪費です。何か実行中にアニメーションステートマシンのmotion情報を動的変更する方法はありますか?またはステートマシンを最適化する方法は?

A1:AnimationClipを動的にロードできます。そして状態バインドのAnimationClipを置き換えることができます。

詳細については、公式マニュアルを参照してください:Animation Override Controller

 

A2: Playableを試してください、Clipを動的にロードできます。欠点は自分でステートマシン管理を1セット書く必要があります。


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

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

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