Tres animaciones que no son comunes pero que pueden mejorar mucho la experiencia de juego del usuario:
①Combinación de formas basada en animación de deformación: como labios y animación facial
②Dinámica inversa: es decir, el método de posicionamiento de las manos y los pies del personaje durante el período de ejecución
③ Textura de película: reproduzca el archivo de video renderizado en la etapa de renderizado previo como una textura en la superficie 3D
1. Mezcla de formas
La animación facial, incluidos los cambios faciales y la animación de labios, generalmente requiere el uso de Blend Shape o animación de deformación.Este tipo de animación generalmente lo realizan diseñadores o software 3D, y luego se importa a Unity, y Import BlendShapes se activa en el panel.
Para el proceso de construcción, las animaciones de transformación requieren dos pasos de procesamiento:
El diseñador define la posición límite de la malla del panel, es decir, todos los vértices de la malla de la cara se colocan y organizan en una determinada posición límite, y se crea una clave de forma o una forma de fusión para registrar el estado de la malla de la pose correspondiente.
Al grabar una serie de poses diferentes, se puede generar una combinación promedio ponderada de las diferentes poses para generar la animación facial final, Animaciones.
2. Dinámica inversa
IK es compatible con la mayoría de las aplicaciones 3D, pero dichos datos generalmente no se pueden convertir a Unity
Todas las animaciones IK se importarán a Unity como cinemática directa (FK), lo que requiere una configuración manual de IK de Unity para acceder a los datos.
Se requiere el sistema Mecanim Avatar para iniciar IK \
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ArmIK : MonoBehaviour {
public float leftHandPositionWeight;
public float leftHandRotationWeight;
public float rightHandPositionWeight;
public float rightHandRotationWeight;
public Transform leftHandObj;
public Transform rightHandObj;
private Animator animator;
// Use this for initialization
void Start () {
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
}
private void OnAnimatorIK(int layerIndex)
{
animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, leftHandPositionWeight);
animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, leftHandRotationWeight);
animator.SetIKPosition(AvatarIKGoal.LeftHand, leftHandObj.position);
animator.SetIKRotation(AvatarIKGoal.LeftHand, leftHandObj.rotation);
animator.SetIKPositionWeight(AvatarIKGoal.RightHand, rightHandPositionWeight);
animator.SetIKRotationWeight(AvatarIKGoal.RightHand, rightHandRotationWeight);
animator.SetIKPosition(AvatarIKGoal.RightHand, rightHandObj.position);
animator.SetIKRotation(AvatarIKGoal.RightHand, rightHandObj.rotation);
}
}
3. Textura de película
Componente de fuente de audio, responsable de reproducir contenido de audio en películas
Cree un Material, para el tipo de sombreado, seleccione No iluminado | Textura
Reproduce el guión:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(AudioSource))]
public class PlayVideo1 : MonoBehaviour {
public bool loop1 = true;
public bool playFromStart1 = true;
public MovieTexture video1;
public AudioClip audioClip1;
private AudioSource audio1;
// Use this for initialization
void Start () {
audio1 = GetComponent<AudioSource>();
if (!video1)
video1 = GetComponent<Renderer>().material.mainTexture as MovieTexture;
if (!audioClip1)
audioClip1 = audio1.clip;
video1.Stop();
audio1.Stop();
video1.loop = loop1;
audio1.loop = loop1;
if (playFromStart1)
ControlMovie1();
}
private void OnMouseUp()
{
ControlMovie1();
}
public void ControlMovie1()
{
if (video1.isPlaying)
{
video1.Pause();
audio1.Pause();
}
else {
video1.Play();
audio1.Play();
}
}
// Update is called once per frame
void Update () {
}
}
Conceptos básicos de animación de modelos: Inicio rápido de Unity, parte 4 - Relacionado con la animación de modelos de Unity - Se busca programador
https://blog.csdn.net/Dylan_Day/article/details/80589765