次に、UIインターフェイスと3Dインターフェイスの間の相互作用について説明しましょう。前の紹介で述べたように、UIWidgetsで3Dシーンを更新する場合は、フレームレート設定を変更する必要があります。パネルにマウントされたスクリプトに更新同期スクリプトを追加し、ターゲットフレームレートを60フレームに設定します。
public class ViewerApp : UIWidgetsPanel
{
protected override void OnEnable()
{
base.OnEnable();
Window.onFrameRateSpeedUp = () => { };
Window.onFrameRateCoolDown = CustomFrameRateCoolDown;
}
static void CustomFrameRateCoolDown()
{
Application.targetFrameRate = 60;
}
シーンの詳細をクリックしてARインタラクションを入力すると、フリッターの背景が透明に設定されます。ただし、プッシュで入力したARインタラクティブインターフェースもフラッターUIを持っているため、現時点では問題があります。背景が透明に設定されている場合は、前のページも表示されます。この状況に対処するには、一般に2つの方法があります。1つは、カメラが3Dシーンで見るものをrendererTextureとして保存し、renderTextueを現在のインターフェイスの背景として設定し、各フレームをリアルタイムで更新する方法です。ちょっとしたコツ:背景を透明に設定すると、詳細インターフェイスと3D操作インターフェイスが同じインターフェイスに並べて表示されます。詳細インターフェイスに入ると、詳細情報のみが表示され、3Dインターフェイスが上部に重ねられます。または詳細の右側。クリックして3Dインタラクションを入力すると、インターフェイス全体がインターフェイスの高さだけ下に移動するか、インターフェイスの幅だけ左に移動します。
このアニメーションを実現するには、フラッターでアニメーションコントローラーを使用し、スタックコンポーネントを構成して実現する必要があります。
public class ProjectDetailScreenState : State<ProjectDetaiScreen>, TickerProvider
{
public Ticker createTicker(TickerCallback onTick)
{
return new Ticker(onTick);
}
AnimationController animationContrller;
Animation<Offset> animation;
public override void initState()
{
animationContrller = new AnimationController(
duration:TimeSpan.FromMilliseconds(300),
vsync: this
);
animationContrller.addStatusListener((status)=>
{
//if (status == AnimationStatus.completed)
//{
// animationContrller.reverse();
//}
// else if()
});
animation =new OffsetTween(begin:Offset.zero,end:new Offset(-1,0)).chain(new CurveTween(curve: Curves.linear)).animate(animationContrller);
}
//.....
}
上記のコードスニペットは、アニメーションコントローラーを作成し、位置オフセットを使用してTweenを追加するものです。3Dインターフェイスがトリガーされると、位置オフセットが実行されます。3Dインターフェイスから戻ると、reverseメソッドが呼び出されてバイアスが反転します。 。シフト。
public override Widget build(BuildContext context)
{
return new Stack(
alignment:Alignment.center,
fit:StackFit.expand,
children:new List<Widget>()
{
new 3DInteration(animationContrller),
new Container(child:
new SlideTransition(
position:animation,
child:Detail())
)
}
);
}