Partilhar via


Guia do Programador de Física de Malha

Sugestões gerais

Você pode começar com a digitalização dos documentos de física do Unity. Há uma abundância de recursos disponíveis sobre como otimizar a física em Unity.

Mesh Physics vem com alguns desafios extras. Aqui estão algumas dicas para ajudar a superá-los.

  • Crie paredes espessas: a sincronização de rede pode mover ligeiramente os corpos rígidos. Como resultado, você verá alguma penetração extra entre objetos. Pequenos corpos dinâmicos podem ser empurrados através de paredes finas. Para objetos e paredes mais grossos, esses efeitos de tunelamento são menos prováveis. Se possível, utilizar casco convexo ou um pequeno conjunto de cascos convexos para corpos dinâmicos.

  • Sempre que possível, utilize peças convexas espessas para geometria estática. Tente evitar malhas, especialmente malhas altamente densas.

  • Massas realistas em kg: conteúdo de várias fontes pode interagir na mesma cena. Isso funciona bem se as relações de massa entre os objetos forem razoáveis. Um bom ponto de partida é atribuir massas realistas aos corpos usando kg.

Desenvolvendo conteúdo aprimorado de Física de Malha

Animações de reprodução automática

Você pode adicionar animações de reprodução automática à cena que interagem com corpos físicos. Essas animações são sincronizadas automaticamente entre os clientes, ajustando temporariamente sua velocidade de reprodução (diminuindo-as ou acelerando-as) em cada cliente até que todos os clientes estejam no mesmo estado de animação ao mesmo tempo.

Definições

  • Jogar ativado automaticamente .
  • Animar Física recomendado (mas não obrigatório) se a animação afetar colisores que interagem com corpos de física.
  • Tipo de abate definido como "Sempre Animado" (imposto automaticamente pela Física de Mesh) porque a animação pode afetar os corpos físicos mesmo quando eles estão fora da tela.

Captura de tela das configurações do componente Animação no Inspetor.

O clipe de animação usado pela animação de reprodução automática pode usar qualquer Modo de Encapsulamento. As opções úteis são "Loop" e "Ping Pong".

Captura de tela das configurações do ativo Clipe de animação no Inspetor.

Componentes

Adicionar um dos seguintes MonoBehaviour componentes a um objeto adicionará o comportamento específico a esse objeto.

Corpo pegajoso

Faz com que os corpos grudem em outros corpos. Pode ser usado para atirar dardos a outros corpos ou para fixar um quadro numa parede. Isto é implementado através da criação de uma restrição fixa entre os dois organismos envolvidos. Nota: Esta operação é executada em todos os clientes e, portanto, é implementada como uma mensagem de rede especial.

Captura de tela das opções de script Corpo Adesivo no Inspetor.

Definições

  • Vara: Define se o corpo vai aderir a corpos dinâmicos e/ou estáticos.
  • Quando: Às vezes você quer colar um corpo rápido quando ele apenas toca outro corpo, e às vezes você quer colar um corpo quando ele é mantido contra outro corpo por um determinado tempo, como esperar que a cola endureça quando você cola um botão em uma parede.
  • Controlo de colisão Para desativar colisões específicas entre um corpo e outro. Normalmente, você pode/deve usar camadas de colisão. No entanto, como existem apenas 32 camadas de colisão codificadas no Microsoft Mesh, isso pode não ser uma opção. Aqui você pode desativar corpos específicos.
  • Corpos afetados para o filtro Corpo de colisão aplicado para o controle de colisão.

Campo de Contenção

Garante que os corpos rígidos permaneçam dentro dos limites de um ou vários colisores de gatilho.

Captura de ecrã das opções de script Campo de Contenção no Inspetor.

Para que esse componente funcione, ele precisa ser anexado a um ou vários colisores de gatilho. (Esses colisores de gatilho também podem ser aninhados na hierarquia de transformação abaixo da GameObject que tem esse componente anexado.)

Os corpos rígidos afetados por este componente já devem estar dentro dos limites de seus colisores de gatilho (o "volume do gatilho") quando a cena começa. O centro de massa de cada um desses corpos rígidos será então limitado a permanecer dentro dos limites do volume do gatilho – não será possível puxar ou mover os centros de massa desses corpos rígidos para qualquer lugar fora.

Configurações:

  • O desvio máximo da contenção permite que o centro de massa de um corpo rígido afetado saia ligeiramente dos volumes do gatilho antes de se encaixar novamente. Esta é uma compensação de otimização de desempenho: se o desvio máximo permitido for grande, o corpo pode visivelmente deixar o volume do gatilho e voltar a encaixar, mas o código pode evitar ter que verificar e verificar a posição do corpo com muita frequência quando ele está descansando ou se movendo lentamente dentro do volume do gatilho.

  • Corpos afetados define condições de filtragem opcionais para os corpos afetados por este componente. (Por padrão, todos os corpos são afetados.)

Campo vetorial de velocidade

Permite acelerar/desacelerar um corpo rígido até atingir uma velocidade alvo específica.

Captura de tela das opções de script do Campo de Velocidade Direcional no Inspetor.

Este componente controla a magnitude e a direção da velocidade. Veja Campo de Magnitude de Velocidade para controlar apenas a magnitude e Campo de Direção de Velocidade para controlar apenas a direção. Existem dois modos de operação:

  • Se ligado a um corpo rígido, este corpo rígido será controlado.
  • Se ligado a um colisor de gatilho, todos os corpos rígidos que entram nesse volume de gatilho serão afetados.

Configurações:

  • Tipo de velocidade define se estamos trabalhando em velocidade linear ou angular.
  • A direção no espaço local define se a velocidade de destino é especificada no espaço local do objeto ao qual o componente está conectado.
  • A Velocidade Alvo define o vetor de velocidade desejado em metros/segundo (ou radianos/segundo no caso de velocidade angular).
  • Max Acceleration define a aceleração máxima aplicada para atingir a velocidade alvo.
  • Tipo de aceleração define um tipo de aceleração para atingir uma velocidade alvo.
    • Instantâneo atingirá a velocidade alvo imediatamente (o mesmo que Aceleração Constante com Aceleração Máxima = Infinito).
    • A Aceleração Constante assegurará que a carroçaria atinja a velocidade pretendida, independentemente dos limites da definição de Aceleração Máxima .
    • A Abordagem Suave reduz a aceleração quanto mais perto estiver da velocidade alvo. Isso significa que, na prática, você nunca atingirá a velocidade desejada. Além disso, se houver alguma influência externa, como subir ou descer, essa influência extra não será completamente anulada, resultando em descidas mais rápidas do que subidas.
  • Corpos afetados define condições de filtragem opcionais para os corpos afetados por este componente. (Por padrão, todos os corpos são afetados.)

Campo gravitacional dimensionado

Muda a forma como a gravidade afeta corpos rígidos dentro dos limites de um ou vários colisores de gatilho.

Captura de tela das opções de script do Campo Antigravidade no Inspetor.

Para que esse componente funcione, ele precisa ser anexado a um ou vários colisores de gatilho. (Esses colisores de gatilho também podem ser aninhados na hierarquia de transformação abaixo do GameObject que tem esse componente anexado.)

Quaisquer corpos rígidos que tocam ou se sobrepõem aos colisores de gatilho (o "volume do gatilho") se comportam de acordo com as configurações de gravidade deste componente, em vez da gravidade física global. Os corpos rígidos que têm o uso da gravidade desativado são ignorados.

Há uma relação interessante entre a perceção do próprio tamanho do jogador no mundo e a gravidade:

  • Se a gravidade é menor do que aquilo a que estamos habituados (os objetos são mais lentos quando caem), o jogador percebe-se maior – como um gigante.
  • Se a gravidade é maior do que aquilo a que estamos habituados (os objetos são mais rápidos quando caem), o jogador percebe-se menor – como um rato.

Configurações:

  • A Predefinição de Gravidade permite a seleção de várias predefinições interessantes e úteis para a propriedade da Escala de Gravidade : vários corpos celestes (Lua, Marte, Terra, Júpiter), sem gravidade (Espaço Exterior) ou gravidade invertida (de cabeça para baixo). Você sempre pode substituir a Escala de Gravidade por qualquer valor que desejar.
  • A Escala de Gravidade define a gravidade local dentro do volume do gatilho em relação à gravidade física padrão que afeta a cena. A escala de gravidade padrão de 1 não afeta a gravidade; valores maiores aumentam a gravidade; 0 remove a gravidade; Os valores negativos mudam a direção da gravidade.
  • Corpos afetados define condições de filtragem opcionais para os corpos afetados por este componente. (Por padrão, todos os corpos são afetados.)

Campo gravitacional orbital

Simula a gravidade de um "planeta de brinquedo" em sua cena.

Captura de tela das opções de script do Campo de gravidade no Inspetor.

Para que esse componente funcione, ele precisa ser anexado a um ou vários colisores de gatilho. (Esses colisores de gatilho também podem ser aninhados na hierarquia de transformação abaixo do GameObject que tem esse componente anexado.)

Todos os corpos rígidos que tocam ou se sobrepõem aos colisores de gatilho (o "volume do gatilho") são puxados para a posição do objeto que tem esse componente conectado.

Configurações:

  • A gravidade define a magnitude da gravidade. Esta é a aceleração do corpo em órbita (a "lua") em direção ao corpo central a uma distância de um metro. Uma vez que a velocidade orbital é sqrt(gravidade/raio), este valor descreve a velocidade² de uma lua numa órbita estável num raio de um metro.

  • Desativar Gravidade Global desativa a configuração de gravidade da física global da cena para corpos afetados por esse componente. Por padrão, a gravidade da cena global ainda afetará seu planeta e suas luas.

  • Corpos Afetados define condições de filtragem opcionais para os corpos que podem se tornar luas neste campo gravitacional.

  • Force Moons On Circular Orbit é uma trapaça que aplica algumas forças suaves para empurrar a lua para uma órbita circular. A motivação é que é difícil para um não especialista definir a gravidade e a velocidade inicial dos corpos de forma a alcançar uma órbita circular. Além disso, se essa opção estiver ativada, todas as luas colocadas dentro do campo gravitacional no Unity Editor começam automaticamente a orbitar seu corpo central quando a cena é carregada.

  • Strength Of Forced Orbit escala a aceleração aplicada para forçar a lua a uma órbita circular.

  • Definir Raio Forçado Onde Colocado faz com que as luas que são colocadas dentro do campo gravitacional no Unity Editor adotem automaticamente sua distância inicial do corpo central como sua órbita preferida.

  • Set Forced Radius Where Dropped faz com que as luas que são interativamente agarradas e movidas para o campo gravitacional adotem automaticamente a distância do corpo central em que foram lançadas como sua órbita preferida.

  • O raio de força padrão define o raio padrão para o cheat acima que é usado, a menos que seja substituído por qualquer uma das outras opções.

Campo de Flutuabilidade

Simula flutuabilidade de corpos rígidos arbitrários na água: Os corpos parecem flutuar no volume do gatilho conectado.

Captura de tela das opções de script Campo de Flutuabilidade no Inspetor.

Para que esse componente funcione, ele precisa ser anexado a um ou vários colisores de gatilho. (Esses colisores de gatilho também podem ser aninhados na hierarquia de transformação abaixo do GameObject que tem esse componente anexado.)

Quaisquer corpos rígidos que tocam ou se sobrepõem aos colisores de gatilho (o "volume do gatilho") experimentam forças de flutuação (impulso) para mantê-los à tona.

Este componente usa a forma dos colisores do corpo rígido para calcular sua densidade (em outras palavras, volume dividido pela massa), flutuabilidade, arrasto e atrito.

Colisores de Flutuabilidade

Benefício: Desempenho. O custo computacional dos cálculos de flutuabilidade escala linearmente com o número de vértices do colisor. Os colisores físicos típicos para corpos, mesmo que já simplificados, são muitas vezes significativamente mais complexos (em termos de número de vértices) do que o necessário para que a flutuabilidade funcione bem o suficiente.

Como usar: Adicione um (ou vários) colisores adicionais (eles podem ser desativados) a um corpo. Marque os colisores como cascos de flutuabilidade explícitos, atribuindo-lhes um material físico chamado BuoyancyHull (a ortografia exata importa!). Os detalhes de configuração deste material de física não importam - um material de física adequado é fornecido com o pacote do kit de ferramentas Mesh. Se um corpo tiver colisores marcados assim, apenas esses colisores são usados para cálculos de flutuabilidade; todos os outros colisores são ignorados.

Melhores práticas: Colliders de casco de flutuabilidade explícitos para qualquer Rigidbody que possa ser jogado em um Campo de Flutuação. É melhor (e mais fácil) usar colisores de cubo porque eles têm o menor número de vértices (oito por colisor). Combinar a forma visual exata do corpo flutuante geralmente não é necessário para um bom resultado; uma aproximação muito grosseira é geralmente suficiente.

Configurações:

  • Densidade é a densidade do líquido simulado que "preenche" o volume do gatilho em quilogramas por metro cúbico. (O padrão representa a densidade aproximada da água à temperatura ambiente.)
  • Tipo de superfície especifica como o componente coleta amostras da forma da superfície da água para calcular as forças de flutuabilidade.
    • Static Flat assume que a superfície da água é perfeitamente plana e nunca se move da sua posição inicial na cena. A posição e orientação da superfície da água é determinada apenas uma vez, quando a cena começa. Esta é a opção computacionalmente mais barata.
    • Dynamic Flat assume que a superfície da água é perfeitamente plana, mas permite que ela possa se mover (por exemplo, o nível da água pode subir ou afundar). A posição e orientação da superfície da água é determinada uma vez por quadro.
    • O Dynamic Flat Per Body suporta uma superfície de água que não é plana (por exemplo, pode ser ondulada). Para cada corpo rígido flutuando na superfície da água, uma aproximação planar local da superfície da água abaixo do corpo rígido é determinada uma vez por quadro, que é então usada para calcular as forças de flutuabilidade para esse corpo rígido.
  • Os corpos afetados definem condições de filtragem opcionais para os corpos que podem flutuar neste campo de flutuabilidade. (Por defeito, todos os organismos são elegíveis.)
  • O arrasto controla a resistência ao movimento à medida que o corpo rígido atinge a água (em outras palavras, o atrito ortogonal com a superfície do corpo).
  • O atrito da pele controla a resistência ao movimento à medida que o corpo rígido é movido através da água (em outras palavras, o atrito paralelo à superfície do corpo).

Importante! Para permitir que o componente acesse os triângulos de malha do colisor de um corpo rígido, a caixa de seleção "Leitura/gravação habilitada" deve ser marcada nas configurações de importação da malha do colisor. Caso contrário, o corpo será ignorado pelo campo de flutuabilidade e cairá através do campo sem ser afetado por ele.

Importante! Certifique-se de que seus corpos físicos tenham massas plausíveis para garantir que eles se comportem como esperado em um campo de flutuabilidade:

  • Se a massa de um corpo rígido é implausivelmente alta em comparação com o seu volume, ele vai afundar para o fundo.
  • Se a massa de um corpo rígido for implausivelmente baixa em comparação com seu volume (por exemplo, o Rigidbody padrão de Unity de uma unidade de massa), ele ficará apenas em cima do líquido simulado.

Por padrão, o campo de flutuabilidade coleta amostras da superfície do volume do gatilho para determinar a forma da superfície da água (sujeito à configuração de Tipo de superfície de água escolhida). As superfícies animadas na memória da CPU podem ser amostradas dessa forma, mas as superfícies animadas por um sombreador de vértice da GPU não são visíveis para o script em tempo de execução. O BuoyancyField componente fornece um delegado de retorno de chamada acessível por script chamado GetDistanceFromSurface que permite que scripts externos forneçam informações sobre uma forma de superfície de água animada por GPU.

Veja o componente abaixo para obter uma superfície de água ondulada BuoyancyFieldWaves com uma abordagem sem código.

Flutuabilidade Ondas de Campo

Add-on para o BuoyancyField componente que funciona com um sombreador de vértice específico, BuoyancyFieldWaves_VertexPosition (disponível como um gráfico de sub-sombreador e um arquivo de inclusão HLSL). Isso cria o efeito visual de uma superfície de água ondulada juntamente com o comportamento correspondente de objetos flutuando na superfície da água.

Captura de tela das opções de script do Buoyancy Field Waves no Inspetor.

Este componente deve ser adicionado a um GameObject que já tenha um BuoyancyField componente adicionado a ele.

A superfície de água a animar deve ser fornecida como uma malha plana e tesselada, cujos limites tenham a forma desejada da superfície da água quando vista de cima para baixo. O material utilizado para a superfície da água deve utilizar um sombreador que incorpore o BuoyancyFieldWaves_VertexPosition subsombreador para determinar as posições dos vértices da malha. Você pode usar o material de amostra BasicWavyWaterSurface incluído (e o gráfico de sombreador com o mesmo nome) como ponto de partida para seus próprios desenvolvimentos de sombreador.

Configurações:

  • O Renderizador de Malha de Ondas faz referência ao MeshRenderer componente que renderiza a malha da superfície da água.
    • Material mostra qual material é usado pelo renderizador. Isto é apenas para informação.
    • Shader mostra qual sombreador é usado pelo material. Isto é apenas para informação.
  • Waves Shader Property Names define os nomes das propriedades de sombreador necessárias que devem ser expostas pelo sombreador. Essas propriedades são acessadas por esse componente em tempo de execução para garantir que o comportamento do campo de flutuabilidade permaneça sincronizado com os visuais da superfície da água em todos os clientes.
    • Tempo controlado por script é o nome de uma propriedade de sombreador de tipo exposto floatque será continuamente atualizada por esse componente a cada quadro com um tempo continuamente crescente (medido em segundos) que é sincronizado em todos os clientes. O BuoyancyFieldWaves_VertexPosition subsombreador usa esse tempo compartilhado para criar um padrão de onda que permanece sincronizado em todos os clientes e em sincronia com o comportamento do campo de flutuabilidade.
    • Velocidade de onda é o nome de uma propriedade de sombreador de tipo exposto floatque determina a velocidade base na qual as ondas se propagam horizontalmente. O valor da propriedade em si deve ser definido no material aplicado à malha de superfície de onda. Definir isso como zero faz com que a superfície da onda se torne estática e imóvel.
    • Comprimento de onda é o nome de uma propriedade de sombreador de tipo exposto floatque determina a grosseria do padrão de onda. O valor da propriedade em si deve ser definido no material aplicado à malha de superfície de onda. Valores menores produzem ondulações curtas; valores maiores produzem ondas longas e arrebatadoras.
    • Altura de onda é o nome de uma propriedade de sombreador de tipo exposto floatque determina a altura de base das ondas. O valor da propriedade em si deve ser definido no material aplicado à malha de superfície de onda. Definir isso como zero faz com que a superfície da onda se torne completamente plana.

O gráfico de sombreador de amostra BasicWavyWaterSurface incluído (usado pelo material com o mesmo nome) usa o subsombreador de vértice necessário BuoyancyFieldWaves_VertexPosition para produzir a superfície 3D ondulada, mas inclui apenas uma implementação de stand-in mínima para o sombreador de fragmento, o que o torna renderizar a superfície como uma malha sem sombreada, de cor lisa e semitransparente.

Captura de tela do gráfico de sombreador Basic Wavy Water Surface no Shader Graph Editor.

Você pode personalizar o caminho de fragmento de um sombreador usado com o BuoyancyFieldWaves componente completamente ao seu gosto. No entanto, é essencial que o caminho Vertex do seu sombreador use o BuoyancyFieldWaves_VertexPosition gráfico de subsombreador e que ele exponha as quatro entradas para esse gráfico de subsombreador como floatpropriedades de sombreador de tipo do gráfico de sombreador geral para que o componente possa acessá-las em tempo de execução. Se o sombreador não incluir o gráfico de subsombreador necessário ou se alguma das propriedades de sombreador necessárias não for exposta, o inspetor do componente exibirá uma mensagem de erro em tempo de design e a flutuabilidade não funcionará em tempo de execução:

Captura de tela das opções de script Buoyancy Field Waves mostrando a mensagem de erro: Subsombreador de vértice necessário não está em uso.

Captura de tela das opções de script do Buoyancy Field Waves mostrando a mensagem de erro: Propriedade Shader não exposta pelo material.

O gráfico de sombreador de exemplo BasicWavyWaterSurface pode servir como um stand-in durante o desenvolvimento de conteúdo e como um ponto de partida para seus próprios desenvolvimentos de sombreador. Como alternativa, você pode usar um sombreador de superfície de água existente, manter seu caminho de fragmento e substituir apenas seu caminho de vértice .

Velocidade angular máxima

Substitui a velocidade angular máxima padrão de um corpo de física.

Captura de tela das opções de script de Velocidade Angular Máxima no Inspetor.

O motor de física não permite que o corpo rígido exceda essa velocidade angular. Isso pode ser útil para limitar a velocidade de rolamento de um determinado corpo rígido ou para permitir que ele role mais rápido do que o padrão físico, que é de 50 radianos por segundo (aproximadamente 8 rotações por segundo).

A velocidade angular máxima deve ser introduzida em radianos por segundo. O valor inserido também é exibido em graus por segundo (180 graus ≈ 3,14 radianos) e rotações por segundo (1 revolução = 360 graus ≈ 6,28 radianos).

Campo de magnitude de velocidade

Permite a aceleração/desaceleração de um corpo rígido até atingir uma velocidade dentro de um intervalo permitido.

Captura de tela das opções de script do Campo de Velocidade no Inspetor.

Este componente controla a magnitude da velocidade e mantém a direção atual. Se o objeto estiver parado, ele escolhe uma direção aleatória para a duração de um quadro. Existem dois modos de operação:

  • Se ligado a um corpo rígido, este corpo rígido será controlado.
  • Se ligado a um colisor de gatilho, todos os corpos rígidos que entram nesse volume de gatilho serão afetados.

Configurações:

  • Tipo de velocidade define se estamos trabalhando em velocidade linear ou angular.
  • Limites de velocidade define os limites desejados de velocidade mínima e máxima em metros/segundo (ou radianos/segundo em caso de velocidade angular). Se a velocidade atual estiver abaixo do mínimo ele vai acelerar, se for maior que o máximo o corpo vai desacelerar. Se a velocidade atual já estiver dentro dos limites, o script não terá efeito. Para definir uma velocidade alvo específica, defina mínimo e máximo para o mesmo valor.
  • Max Acceleration define a aceleração máxima aplicada para atingir a velocidade alvo.
  • Tipo de aceleração define um tipo de aceleração para atingir uma velocidade alvo.
    • Instantâneo atingirá o limite de velocidade imediatamente (o mesmo que Aceleração Constante com Aceleração Máxima = Infinito).
    • A Aceleração Constante assegurará que a carroçaria atinja a velocidade pretendida, independentemente dos limites da definição de Aceleração Máxima .
    • A Abordagem Suave reduz a aceleração quanto mais perto estiver da velocidade alvo. Isso significa que, na prática, você nunca atingirá a velocidade desejada. Além disso, se houver alguma influência externa, como subir ou descer, essa influência extra não será completamente anulada, resultando em descidas mais rápidas do que subidas.
  • Corpos afetados define condições de filtragem opcionais para os corpos afetados por este componente. (Por padrão, todos os corpos são afetados.)

Alinhar campo

Alinha o corpo ao eixo especificado.

Captura de tela das opções de script Alinhar campo no Inspetor.

Este componente adiciona torque ao corpo para alinhá-lo a uma direção específica. Observe que o torque é sempre aplicado na direção que gira o corpo em direção ao alvo. Existem dois modos de operação:

  • Se ligado a um corpo rígido, este corpo rígido será alinhado.
  • Se ligado a um colisor de gatilho, todos os corpos rígidos que entram nesse volume de gatilho serão alinhados.

Configurações:

  • O eixo do corpo rígido define o eixo do corpo rígido afetado que deve ser alinhado ao alvo.
  • O Modo de Alinhamento fornece diferentes modos para especificar o alinhamento de destino:
    • No Espaço Global para especificar o alinhamento do alvo no Espaço global.
    • Em Espaço Local para especificar o alinhamento de destino no Espaço local (só faz sentido com o volume do gatilho).
    • Direção da velocidade para alinhar o corpo à sua velocidade linear.
    • Towards Game Object para alinhar o corpo em direção a um objeto de jogo alvo.
  • O Alinhamento de Destino define a direção de destino do alinhamento. (Apenas quando O Modo de Alinhamento está definido como No Espaço Global ou No Espaço Local.)
  • Target Game Object define a direção de destino do alinhamento. (Apenas quando O Modo de alinhamento está definido como Towards Game Object.)
  • O multiplicador de torque escala o torque aplicado para atingir o alinhamento alvo, um multiplicador mais alto gira o corpo mais rapidamente (entre 1 e 1000).
  • O coeficiente de amortecimento define o fator de amortecimento (entre 0 e 5). Quando definido abaixo de 1, o corpo pode oscilar em torno da orientação do alvo.
  • Corpos afetados define condições de filtragem opcionais para os corpos afetados por este componente. (Por padrão, todos os corpos são afetados.)

Campo de direção de velocidade

Permite dirigir um corpo rígido até que a velocidade atinja uma direção alvo.

Captura de tela das opções de script do Velocity Direction Field no Inspetor.

Este componente controla apenas a direção da velocidade e mantém a velocidade atual. Existem dois modos de operação:

  • Se ligado a um corpo rígido, este corpo rígido será controlado.
  • Se ligado a um colisor de gatilho, todos os corpos rígidos que entram nesse volume de gatilho serão afetados.

Configurações:

  • Tipo de velocidade define se estamos trabalhando em velocidade linear ou angular.
  • Seguir Objeto de Jogo define se o alvo é uma direção predefinida ou uma direção para um GameObject específico. Só funciona para velocidade linear.
  • Corpo de Destino (se Seguir Objeto de Jogo estiver definido como true): define a direção de seguimento desejada.
  • A Direção de Destino define a direção desejada. Este valor é normalizado, de modo que a magnitude não tem efeito.
  • Direction In Local Space define se a direção é especificada em uma transformação local da explosão.
  • Max Acceleration define a aceleração máxima aplicada para atingir a velocidade alvo.
  • Tipo de aceleração define um tipo de aceleração para atingir uma velocidade alvo.
    • Instantâneo atingirá a direção alvo imediatamente (o mesmo que Aceleração Constante com Aceleração Máxima = Infinito).
    • A Aceleração Constante assegurará que a carroçaria atinja a velocidade pretendida, independentemente dos limites da definição de Aceleração Máxima .
    • A Abordagem Suave reduz a aceleração quanto mais perto estiver da velocidade alvo. Isso significa que, na prática, você nunca atingirá a velocidade desejada. Além disso, se houver alguma influência externa, como subir ou descer, essa influência extra não será completamente anulada, resultando em descidas mais rápidas do que subidas.
  • Corpos afetados define condições de filtragem opcionais para os corpos afetados por este componente. (Por padrão, todos os corpos são afetados.)

Corpo magnético

Dá ao corpo uma propriedade magnética que atrai ou repele outros corpos.

Captura de tela das opções de script Corpo magnético no Inspetor.

Para que esse componente funcione, ele precisa ser anexado a um ou vários colisores. (Esses colisores também podem ser aninhados na hierarquia de transformação abaixo da GameObject que tem esse componente anexado.) Cada colisor exibe uma força sobre outros corpos rígidos que estão próximos o suficiente deste colisor.

Configurações:

  • A força define a aceleração do íman no ponto de contacto (quando a distância entre colisores é zero).
  • A distância de influência controla o alcance da força magnética. A força magnética só é aplicada se a menor distância entre colisores for menor.
  • Tipo de campo define como a força magnética enfraquece com a distância.
    • Constant assume que a força magnética é a mesma independente da distância.
    • Linear assume que a força magnética cai linearmente de Força a zero (à Distância de Influência).
    • O inverso assume uma dependência inversamente proporcional à distância.
    • O quadrado inverso assume uma dependência inversamente proporcional à distância ao quadrado (semelhante a um ímã real).
  • O Polo Magnético controla quais objetos são atraídos ou repelidos por esse objeto.
    • O Polo Norte atrai o Polo Sul e repele o Polo Norte.
    • O Polo Sul atrai o Polo Norte e repele o Polo Sul.
    • O magnético atrai tanto o Polo Sul como o Polo Norte.
  • Desativar a gravidade em contato: Se isso estiver habilitado, e a força do ímã for duas vezes maior que a gravidade, a gravidade será desativada para corpos que estão em contato com esse ímã. Um dos objetos deve ser estático para que isso tenha um efeito. Isto é frequentemente usado para evitar o deslizamento de corpos para baixo de uma parede.

Explosão esférica

Cria uma explosão que faz com que todos os corpos dentro de um raio específico se movam para fora.

Captura de tela das opções de script Explosão Esférica no Inspetor.

A força de explosão depende da massa de um corpo rígido (e potencialmente da distância do centro de explosão).

Configurações:

  • A resistência define o efeito da explosão sobre os corpos em metros/segundo. A variação real da velocidade é menor dependendo do tipo de explosão e da massa crítica (ver abaixo).
  • A distância de influência controla o alcance da força de explosão.
  • Tipo de campo define como o efeito de explosão enfraquece com a distância.
    • Constant assume que o efeito é independente da distância.
    • Queda Linear assume que o efeito cai do máximo para zero (na Distância de Influência).
  • A massa crítica define a massa do corpo não afetada pela explosão. Corpos mais pesados sentem menos efeito do que corpos mais leves. Por exemplo, um corpo rígido que pese um terço da Massa Crítica sentirá dois terços da Mudança de Velocidade.
  • A Escala de Impulso Angular define onde a força é aplicada. Se definido como 0, a força é aplicada no centro da massa, o que significa que não há rotação. Se for regulada para 1, a força é aplicada no ponto mais próximo da explosão.
  • Oclusão Se ativada, os objetos escondidos atrás de outros objetos não sentem a explosão. Apenas um único raio entre o centro da explosão e o centro de massa é verificado quanto à oclusão.

Explosão Direcional

Cria uma explosão que faz com que todos os corpos dentro de um gatilho se movam em uma direção específica.

Captura de tela das opções de script Eplosion direcional no Inspetor.

A força de explosão depende da massa de um corpo rígido. Para que esse componente funcione, ele precisa ser anexado a um coletor de gatilho. Todos os corpos dentro do colisor de gatilho são afetados.

Configurações:

  • A resistência define o efeito da explosão sobre os corpos em metros/segundo. A variação real da velocidade é menor dependendo da massa crítica (ver abaixo).
  • A direção define a direção da explosão. Este valor é normalizado, de modo que a magnitude não tem efeito.
  • Direction In Local Space define se a direção é especificada em uma transformação local da explosão.
  • A massa crítica define a massa do corpo não afetada pela explosão. Corpos mais pesados sentem menos efeito do que corpos mais leves. Por exemplo, um corpo rígido que pese um terço da Massa Crítica sentirá dois terços da Mudança de Velocidade.
  • A Escala de Impulso Angular define onde a força é aplicada. Se definido como 0, a força é aplicada no centro da massa, o que significa que não há rotação. Se for regulada para 1, a força é aplicada no ponto mais próximo da explosão.
  • Corpos afetados define condições de filtragem opcionais para os corpos afetados por este componente. (Por padrão, todos os corpos são afetados.)

Estabilização Articular

Estabiliza o sistema de restrição ajustando o tensor de inércia do corpo rígido.

Captura de tela das opções de script de estabilização conjunta no Inspetor.

O script funciona em todas as crianças com o componente Rigidbody ou Joint anexado.

Configurações:

  • O Fator de Estabilização define o quanto você sacrifica a correção física pela estabilidade. Por exemplo, 1 -> principalmente física correta, 4 -> compromisso, 10 -> estável com artefatos.
  • A projeção conjunta permite a projeção de restrições em todas as crianças. Isso pode melhorar drasticamente a estabilidade, mas sacrifica a correção física. Ele só funciona em articulações configuráveis e de caracteres.
  • Distância de projeção define a violação máxima permitida de restrições. Para evitar problemas de física, tente definir esse valor o mais alto possível.

Superfície de salto

Cria uma superfície de salto que faz com que todos os objetos em colisão saltem com uma velocidade predefinida.

Captura de ecrã das opções de script da Superfície de Salto no Inspetor.

Configurações:

  • A Magnitude da Velocidade de Rejeição define a magnitude da velocidade mínima e máxima do objeto após o salto. Consulte Efeito de rejeição para saber como a direção é determinada. Defina Min e Max como valor igual se quiser especificar uma única velocidade de destino.
  • O Efeito de Rejeição define o comportamento pretendido de objetos saltitantes.
    • Rejeição perfeita: o ângulo da velocidade de entrada para o plano de colisão normal é o mesmo que o ângulo da velocidade de saída.
    • Definir a magnitude da velocidade: o ângulo da velocidade de saída para o normal é afetado pelo atrito.
    • Definir Velocidade Normal: semelhante à Magnitude da Velocidade Definida, mas a Magnitude da Velocidade de Rejeição define a magnitude da velocidade perpendicular ao plano (velocidade normal).
    • Salto em direção ao corpo alvo: a direção da velocidade de saída é direcionada para um corpo alvo. Se essa opção estiver selecionada, a propriedade Corpo de Destino será exibida e deverá ser definida.
  • O atrito controla a velocidade tangencial perdida após a colisão. Quando definido como 0, o objeto de salto retém a velocidade tangencial. Quando definido como 1, o objeto quica na direção perpendicular à superfície (velocidade tangencial é 0). Para valores superiores a 1, o objeto é devolvido para trás.

Centro De Deslocamento De Massa

Compensa o centro de massa de um corpo rígido.

Captura de tela das opções de script Center Of Mass Offset no Inspetor.

Configurações:

  • Deslocamento em coordenadas locais define o deslocamento em coordenadas locais.

Âmbito da Física Local

Todos os rigidbodies na hierarquia sob este componente não serão sincronizados entre os clientes. Este script deve ser adicionado a corpos rígidos cujas posições ou rotações são definidas através de um script visual ou uma animação.

Captura de tela das configurações do Escopo de Física Local no Inspetor.

Saiba mais sobre nós de eventos de física do Mesh Visual Scripting.

Trajetória de lançamento

Calcula a posição futura do corpo rígido no espaço livre sob o efeito da gravidade.

Captura de tela das opções de script Trajetória de lançamento no Inspetor.

Configurações:

  • Modo de corpo rígido: Quando definido como verdadeiro, a posição e a velocidade do corpo rígido são tomadas como condições iniciais. Permite o cálculo de posições futuras em tempo real.
  • Rigidbody (só se aplica quando o Modo Rigidbody está definido como true.): Define qual rigidbody é tomado.
  • Velocidade inicial: (só se aplica quando o Modo Rigidbody está definido como false): Define a velocidade inicial. A posição inicial é tomada a partir da posição do GameObject ao qual este componente está ligado.
  • Número máximo de pontos: Define o número máximo de pontos calculados.
  • Time Step: Define a diferença de tempo entre as posições futuras.
  • Gravidade: Esta é a aceleração gravitacional.
  • Renderizador de linha: especifica o renderizador de linha para o qual a posição dos pontos é copiada. Isso exibe a trajetória de lançamento.

Redefinir transformações corporais

Quando acionado por um script visual, esse componente redefine a posição e a rotação de todos os corpos físicos na mesma transformação ou qualquer filho se transforma em seus valores iniciais.

Captura de tela do componente Redefinir transformações do corpo no Inspetor.

Configurações:

  • Salvamento automático inicial: Se selecionado, use as transformações na inicialização do ambiente como as transformações de redefinição. Se não estiver selecionado, você deverá usar um script visual para chamar a função Salvar transformações de corpo agora para salvar transformações de redefinição antes de executar uma redefinição.

Funções disponíveis para scripts visuais

  • Redefinir transformações corporais agora: redefine a posição e a rotação de todos os corpos físicos no escopo deste componente Redefinir transformações corporais para suas transformações de redefinição salvas mais recentemente. Invoque isso apenas em um cliente.

Captura de ecrã do componente Repor transformações corporais no modo de edição com o botão Repor transformações corporais agora apenas no modo de reprodução realçado.

Captura de ecrã do componente Repor Transformações de Corpo no modo de reprodução com o botão Repor Transformação de Corpo Agora realçado.

  • Save Body Transforms Now Salva a posição atual e a rotação de todos os corpos físicos no escopo deste componente Reset Body Transforms à medida que suas transformações de redefinição. Invoque isso apenas em um cliente.

Próximos passos