Доброе время суток.
Сделал синхронизацию анимации между игроками, но образовалось большое но - анимации всех других игроков, кроме подконтрольного, дергаются, будто пропускают кадры. Сразу подумалось что тут должно быть что-то вроде интерполяции, но гугл молчит - интерполяции анимации не находит Может быть это как-то по-другому называется?
Собственно сам код синхронизации:
Код
using UnityEngine;
using System.Collections;
public class AnimatePlayer : MonoBehaviour {
public Animation anim;
//=====
public AnimationClip walk;
public AnimationClip stay1;
public AnimationClip walkL;
public AnimationClip walkR;
public AnimationClip walkB;
public AnimationClip Shoot;
//====
public void Start ()
{
anim.Stop();
}
void StayAnimation() {
GetComponent<NetworkView> ().RPC("SyncAnimation", RPCMode.All, 0);
}
void RunAnimation() {
GetComponent<NetworkView> ().RPC("SyncAnimation", RPCMode.All, 1);
}
void RunLAnimation() {
GetComponent<NetworkView> ().RPC("SyncAnimation", RPCMode.All, 2);
}
void RunRAnimation() {
GetComponent<NetworkView> ().RPC("SyncAnimation", RPCMode.All, 3);
}
void RunBAnimation() {
GetComponent<NetworkView> ().RPC("SyncAnimation", RPCMode.All, 4);
}
void ShootAnimation() {
GetComponent<NetworkView> ().RPC("SyncAnimation", RPCMode.All, 5);
}
[RPC]
void SyncAnimation(int index) {
if(index == 0) {
anim.Play(stay1.name);
} else if
(index == 1) {
anim.Play(walk.name);
}
else if (index == 2)
{
anim.Play(walkL.name);
}
else if (index == 3)
{
anim.Play(walkR.name);
}
else if (index == 4)
{
anim.Play(walkB.name);
}
else if (index == 5)
{
anim.Play(Shoot.name);
}
}
public void Update () {
if (GetComponent<NetworkView> ().isMine) {
{
if (Input.GetKey (KeyCode.W)) {
RunAnimation();
anim ["Run"].speed = 1f;
//anim.Play ("Run");
} else if (Input.GetKey (KeyCode.S)) {
RunBAnimation();
anim ["RunBack"].speed = 0.3f;
//anim.Play ("RunBack");
} else if (Input.GetKey (KeyCode.D)) {
RunRAnimation();
anim ["RunRight"].speed = 0.4f;
//anim.Play ("RunRight");
} else if (Input.GetKey (KeyCode.A)) {
RunLAnimation();
anim ["RunLeft"].speed = 0.4f;
//anim.Play ("RunLeft");
} else {
StayAnimation();
anim ["Breath"].speed = 0.5f;
//anim.Play ("Breath");
}
}
}
}
}
Делал по нарытому в интернетах и понятому из разных исходников.
Почему-то кажется что все должно быть просто, вроде интерполяции для перемещения объектов, но вот найти ничего не могу. Если по синхронизации анимаций гугл еще что-то находил, то по интерполяции оных - нуль.
Спасибо.