Animation Unity : Mélange de formes\IK\Textures de film

Trois animations qui ne sont pas courantes mais qui peuvent grandement améliorer l'expérience de jeu de l'utilisateur :

①Mélange de formes basé sur l'animation de déformation : comme les lèvres et l'animation faciale

②Dynamique inverse : c'est-à-dire la méthode de positionnement des mains et des pieds du personnage pendant la période de course

③ Texture du film : lisez le fichier vidéo rendu à l'étape de pré-rendu sous forme de texture sur la surface 3D

1. Mélange de formes

L'animation faciale, y compris les changements de visage et l'animation des lèvres, nécessite généralement l'utilisation de l'animation Blend Shape ou déformation.Ce type d'animation est généralement réalisé par des concepteurs ou un logiciel 3D, puis importé dans Unity, et Import BlendShapes est activé dans le panneau.

Pour le processus de construction, les animations de morphing nécessitent deux étapes de traitement :

Le concepteur définit la position limite du maillage du panneau, c'est-à-dire que tous les sommets du maillage des faces sont positionnés et disposés à une certaine position limite, et une clé de forme ou une forme de fusion est créée pour enregistrer l'état du maillage de la pose correspondante.

En enregistrant une série de poses différentes, un mélange moyen pondéré des différentes poses peut être généré pour générer l'animation faciale finale, Animations.

2. Dynamique inverse

IK est pris en charge dans la plupart des applications 3D, mais ces données ne peuvent généralement pas être converties en Unity

Toutes les animations IK seront importées dans Unity en tant que Forward Kinematics (FK), ce qui nécessite une configuration manuelle de l'IK d'Unity pour l'accès aux données

Système Mecanim Avatar requis pour démarrer 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. Texture du film

Composant Audio Source, responsable de la lecture du contenu audio dans les films

Créez un matériau, pour le type de shader, sélectionnez Unlit | Texture

Jouez le scénario :

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 () {
		
	}
}

 Principes de base de l'animation de modèle : Démarrage rapide de Unity, partie 4 - Lié à l'animation de modèle Unity - Programmeur recherché

https://blog.csdn.net/Dylan_Day/article/details/80589765

Je suppose que tu aimes

Origine blog.csdn.net/qq_42672770/article/details/123888843
conseillé
Classement