UIWidgetsに基づくUnityアプリケーション開発(6)

次に、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())
                    )
                    
                }
                );
                
                
        }

 

おすすめ

転載: blog.csdn.net/ssssssilver/article/details/108529489