Cómo usar C++ para hacer animaciones simples
Cambiar el marco
Preparar la textura para la animación.
1. Primero, necesitas una matriz Texture[] pública, puedes arrastrar la textura a Unity. El objeto en el editor y un número entero currentTexturep inicializado a 0 en Start(). El siguiente paso requiere una función NextTexture() que se ejecute así:
NextTexture(){
currentTexture++;
if(currentTexture>=textureArray.Length) currentTexture =0;
AnimatedPlane.renderer.material.mainTexture = texturaArray[currentTexture];}
Hay dos formas convenientes de llamar a esta función: recursividad de rutina e intervalo fijo.
Utilizar intervalos fijos es el método más rápido (pero menos preciso). Requiere un contador de números enteros, inicializado a 0 en la función Start(), y una función FixedUpdate() (Nota del juego: se actualizará cada vez y puedes ajustarlo tú mismo en el administrador de tiempo de Unity).
2. Coloque su declaración condicional (como if (walking)) en FixedUpdate(), use conter++ para aumentar el temporizador y luego configure la siguiente declaración:
if( counter>=animationDelay){
counter=0;
NextTexture();
}
El AnimationDelay aquí puede ser elegido por usted mismo cualquier valor. Esto hará avanzar el fotograma a un ritmo sostenido (dependiendo del ritmo que establezca en Unity Time Manager).
El segundo método es utilizar la recursividad. Sin embargo, la desventaja de este método es que no es fácil procesar oraciones condicionales, pero aún así puede obtener el retraso preciso requerido. Esto es especialmente útil si desea alargar o acortar fotogramas específicos. Requiere un IEnumerator TextureChanger() y StartCoroutine(TextureChanger()) en Start().
IEnumerator TextureChanger(){
rendimiento devuelve nuevos WaitForSeconds(timeInterval);
if([condiciones]) NextTexture();
}
El intervalo de tiempo aquí también es un valor arbitrario de su propia elección. Con estas funciones, puedes arrastrar cualquier cantidad de texturas a un GameObject para que se anime correctamente siempre que proporciones las condiciones correctas.
descensión (de gamasutra)
Esta es una versión avanzada de mi próximo nuevo juego "Rotation Station", que se mueve de un punto más bajo a un punto más alto, finalmente se convierte en un pequeño burbuja. Cada ficha se moverá hacia abajo según la empresa, pero cada ficha tendrá un retraso aleatorio y una rotación inicial aleatoria (también utilizará esta fórmula para girar en la dirección deseada).
Bearo-Wing (de gamasutra)
En primer lugar, debes saber que el mouse está en un área 2D.
Para encontrarlo, primero coloque este código en la función FixUpdate() del GameObject deslizante:
Vector3 MousePosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,
Input.mousePosition.y, transform.position.z-Camera.main.transform.position.z));
Aquí se utilizan las posiciones de los ejes X e Y del mouse, así como Deslice el GameObject desde la cámara a la distancia para determinar la posición 2D y las coordenadas 3D del mouse. Ahora ajustemos la fórmula desde el comienzo de esta sesión. Entonces, recuerda los pasos 2D en Unity.
transform.position += new Vector3((MousePosition.x-transform.position.x),
(MousePosition.y-transform.position.y),0)*velocidad de deslizamiento ;
¡Solo necesitas estas dos líneas de código! En cuanto a cosas como GUI, puedes escribir una declaración más adelante:
if(Mathf.Abs(finalvalue-currentvalue)
RudeBear(from gamasutra)
This Este método de movimiento es muy simple, usa seno (sin) para transformación y coseno (cos) para rotación.
Para crear este tipo de animación, deseas que la onda se detenga y continúe cuando sueltas y. ingrese, de lo contrario no funcionará. Esta acción será extremadamente dispersa.
Por lo tanto, se necesita una variable primaria (la llamada walkbob), mientras el objeto aún se esté moviendo. deltaTime a FixedUpdate y luego haz la función:
p>translation = maxHeight*Mathf.Sin(speed*walkbob);
rotation = maxRoll*Mathf.Cos(speed*walkbob/ 2);
3. Luego establezca la posición y la rotación en estos valores (por ejemplo, transform.position = new Vector3(transform.position.x,translation,transform.position.y))
Esto maneja acciones como esa, pero aún así hay un tipo de animación que requiere más consideraciones. Esto es lo que yo llamo danza triangular, que se usa para hacer que personajes lindos se balanceen y bailen al ritmo de la música.
Rude-Bear-Radio (de gamasutra)
Cuando planeas mover un objeto del juego, debes elegir un tiempo inicial flotante = Tiempo.tiempo para que el objeto comience en la posición y dirección correctas. y no entra en acción de repente.
El siguiente paso, simplemente pensamos en el concepto de funciones trigonométricas.
Utiliza el movimiento armónico simple, cuya forma es la siguiente:
Y se refiere al valor actual, A es la amplitud, f es la frecuencia y t es el tiempo de ejecución, phi se refiere a la fase. Primero, determinamos fácilmente la amplitud. queremos que el objeto tenga.
El siguiente es el tiempo de ejecución y la fase) reemplaza fácilmente t y hace ambas cosas de una sola vez. Esto reduce φ a 0, por lo que al final solo necesitamos configurar. posición del objeto a ese valor.
En este punto solo estás ajustando la altura:
transform.position = new Vector3(transform.position.x,maxheight*
Mathf.Sin(2*Mathf.PI*frequency *( Time.time-initialtime)),transform.position.z);
Mantén el objeto afinado para que comience en su máxima amplitud. En este caso se utiliza el coseno. Pero lo más importante es hacer que salte de un extremo al otro para que no se deslice hacia arriba y hacia abajo como una onda. En este momento, necesitas usar cos^2, para que de repente se detenga en la marca 0 y vuelva a pasar a números positivos. Por lo tanto:
transform.position = new Vector3(transform.position.x,maxheight*Mathf.Pow(Mathf.Cos(
2*Mathf.PI*frequency*(Time. time-initialtime)),2),transform.position.z)
Presta atención al punto culminante del baile aquí. La rotación final utiliza un seno para que su rotación y transformación estén desfasadas. Por lo tanto:
transform.rotation = Quaternion.EulerAngles(0, maxRotation*
Mathf.Cos(2*Mathf.PI*frequency*Mathf.Sin(Time.time-initialtime) ), 0);
Compensación de textura
Hay muchas formas de producir animación 2D en Unity3D:
1 Secuencia de fotogramas de animación
Código de muestra:
usando UnityEngine;
usando System.Collections;
clase pública AnimateDemo: MonoBehaviour {
textura pública[] marcos ;
frames flotantes públicosPerSecond=10;
índice int privado;
flotador privado dTime=0;
// Utilice esto para inicialización
void Start () {
}
// La actualización se llama una vez por cuadro
void Update () { p>
AnimaOne();
AnimaAlways();
}
void AnimaAlways(){
int nowIndex= (int)(Time.time *framesPerSecond) % frames.Length;
if(index!=nowIndex){
index = nowIndex;
renderizador. material.mainTexture = cuadros[index];
}
}
void AnimaOne(){
dTime+=Time.deltaTime;
if(dTime>1/framesPerSecond){
dTime-=1/framesPerSecond;
renderer.material.mainTexture = cuadros[++index];
if(index+1>=frames.Length)
{
}
}
}
}
El código aquí es muy detallado y no se ha ejecutado antes. El cuadro de animación se puede implementar fácilmente de acuerdo con esta idea. El método AnimaOne puede implementar otros controles en el último fotograma de la animación; el método AnimaAlways siempre repite la animación.
2. Representación de animación
En algunos casos, hay demasiados fotogramas de animación o se desperdician demasiado recursos. Haremos la animación en una imagen y controlaremos la posición de la misma. cámara o imagen de representación de material. Personalmente, creo que este método es más adecuado para la visualización dinámica de datos y etiquetas.
3. Los efectos de animación simples se presentan arriba. De hecho, en los juegos, a menudo tenemos que hacer que los personajes del juego se muevan, cambien, giren, etc.
En Unity, el desplazamiento y rotación de Objetos sin cuerpos rígidos se controla a través de la propiedad Transformar. Hay atributos de posición y rotación bajo transformación, y Unity proporciona métodos ordinarios de rotación y desplazamiento. El método más utilizado es controlar la acción del Objeto mediante incrementos de coordenadas. El punto más difícil aquí es el desplazamiento relativo y el desplazamiento absoluto. Por lo tanto, debes tener mucho cuidado al mover un objeto, ya sea en relación con las coordenadas mundiales o con las coordenadas de su padre.
En segundo lugar, iTween es un complemento de uso común para animación 2D. Su sitio web oficial y otros blogs tienen una introducción relativamente detallada al uso del método. Aquí hay una pequeña descripción sobre iTween.Hash(). iTween proporciona una tabla hash, lo que hace que las animaciones simples sean más naturales y diversas. Los parámetros de hash varían ligeramente según los diferentes métodos de iTween.
Uso común:
x, y, z, representa la cantidad de Vectore3 objetivo
tiempo,
easeType, Modo de transición, suave, línea recta u otro;
incompleto, la acción o método llamado cuando finaliza la animación actual de iTween, etc.