Vamos falar sobre as configurações de interação entre UIWidgets e 3D. UIWidgets indica oficialmente que pode interagir com 3D. Porém, se você operar diretamente no Unity, por exemplo, é normal clicar em um botão para acionar uma transformação de posição, rotação e zoom, mas se mudar continuamente, a tela ficará travada.
Na imagem acima, adicionei um botão com botão de rotação automática e um botão UIWidgets na interface. Você pode ver que no estado de execução, o quadrado da cena continuará girando, mas a rotação do jogo cena será bastante Caton. A razão para esse fenômeno é porque a IU de UIWidgets está na vanguarda e o mecanismo de atualização de UIWidgets é que se a interface não mudar ou setstate () não for chamado, a interface basicamente não é atualizada, mas o cubo muda a cada quadro, então Isso levou ao fenômeno de um cartão um cartão.
Se você souber o motivo, é fácil resolvê-lo, basta deixar a IU atualizar cada quadro. Eu executei um verdadeiro loop no script UIWidgets. Cada quadro dispara um evento SetState () vazio (se você não entende setState, pode entender o mecanismo de descarga do fluter) e, em seguida, a exibição 3D é normal. Mas é uma sensação esquisita, porque a cada quadro é atualizado, o drawcall aparece novamente. . .
Posteriormente, após consultar o desenvolvedor de UIWidgets, a outra parte forneceu o método correto, que é definir os dois delegados do Windows para métodos vazios quando UIWidgetsPanel é inicializado.
Window.onFrameRateSpeedUp = ()=> { };
Window.onFrameRateCoolDown = ()=> { };
Esse ponto é explicado no github oficial do UIWidgets oficial. É que a interface do servidor internacional foi aberta acidentalmente naquela hora. Estava tudo em inglês, mas não encontrei. Então, por causa do teste acima , Eu pensei que UIWidgets não poderia fazer a interface do usuário e a interação 3D realmente sofre com o inglês ruim. . . Suspire novamente para a grandiosidade de UIWidgets!
A seguir está a operação interativa de UIWidgets no código 3D, porque UIWidgets são gerados dinamicamente, e as classes que herdam UIWidgetsPanel, StatefulWidget e StatelessWidget não são iguais à classe MonoBehaviour. Você não pode declarar diretamente um GameObject público ou Transform e depois arrastar diretamente. Referência direta, classes personalizadas não estão bem. Minha própria abordagem é escrever uma classe singleton para fazer referência a essas classes e objetos e, em seguida, montá-la nos objetos vazios da cena, para que eu possa usar classes UIWidgets para fazer referência direta o singleton para chamar.
Além disso, porque ele não herda diretamente MonoBehaviour, o método de co-rotina não está disponível, mas os métodos existentes de UIWidgets ainda podem ser usados para simular a co-rotina
void Refresh()
{
Promise.Delayed(TimeSpan.FromSeconds(0.3f)).Then(
() =>
{
//dosomethings
setState();
Refresh();
}
);
}
O método acima não pode acionar o evento de atualização. No início, usei isso para forçar a atualização da interface para obter o efeito de atualização síncrona da interface 3D. Promise é uma classe de UIWidgets, que deve ser usada para operações assíncronas, processamento filas, etc. Ferramentas.
Basicamente, o UIWidgets precisa interagir com o 3D, bastando alterá-lo de acordo com a configuração acima. Então, o próximo passo é falar sobre a parte do aplicativo!