Animación de Unity: Shape Blend\IK\Film Textures

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

Supongo que te gusta

Origin blog.csdn.net/qq_42672770/article/details/123888843
Recomendado
Clasificación