forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Сеть (http://forum.boolean.name/forumdisplay.php?f=169)
-   -   Помоги пожалуйста разобраться с NetworkSyncAnimation (http://forum.boolean.name/showthread.php?t=16761)

Serg 08.05.2012 05:36

Помоги пожалуйста разобраться с NetworkSyncAnimation
 
Помоги пожалуйста разобраться с Анимацей так сказать в сети, нарыл скрипт на прасторах интернета, пишут рабочий,но у меня он так и не стал синхронизировать статы анимаций :SOS:
скрипт:
Цитата:

Код:

using UnityEngine;
using System.Collections;
using System;
 
public class NetworkSyncAnimation : MonoBehaviour {
 public GameObject PlayerAnim;
 
 public enum AniStates 
 {
 walk = 0,
 idle
 }
 
 public AniStates currentAnimation = AniStates.idle;
 public AniStates lastAnimation = AniStates.idle;
 
 public void SyncAnimation(String animationValue)
 {
 currentAnimation = (AniStates)Enum.Parse(typeof(AniStates), animationValue);
 }
 
 // Update is called once per frame
 void Update () {
 
 if(networkView.isMine){if(Input.GetKey(KeyCode.W)){currentAnimation = AniStates.walk;}else{currentAnimation = AniStates.idle;}}
 
 if (lastAnimation != currentAnimation)
 {
 lastAnimation = currentAnimation;
 PlayerAnim.animation.CrossFade(Enum.GetName(typeof(AniStates), currentAnimation));
 PlayerAnim.animation["run"].normalizedSpeed = 1.0F;
 PlayerAnim.animation["walk"].normalizedSpeed = 1.0F;
 }
 }
 
 void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
 {
 if (stream.isWriting)
 {
 char ani = (char)currentAnimation;
 stream.Serialize(ref ani);
 }
 else
 {
 char ani = (char)0;
 stream.Serialize(ref ani);
 
 currentAnimation = (AniStates)ani;
 } 
 
 }
 
}


p.s возможно ли что это связано с тем что я проверяю все, запуская на одном компьютере 2 копии приложения ?

pax 08.05.2012 09:52

Ответ: Помоги пожалуйста разобраться с NetworkSyncAnimation
 
Назначь этот скрипт компоненту NetworkView на поле observed и должно работать. Правда тут всего две анимации с именами idle и walk, если у тебя анимации с другими именами (даже в другом регистре типа Walk), то работать не будет.

Serg 09.05.2012 02:59

Ответ: Помоги пожалуйста разобраться с NetworkSyncAnimation
 
Цитата:

Сообщение от pax (Сообщение 227503)
Назначь этот скрипт компоненту NetworkView на поле observed и должно работать. Правда тут всего две анимации с именами idle и walk, если у тебя анимации с другими именами (даже в другом регистре типа Walk), то работать не будет.

Разумеется все было так и сделано, все же не работает.
ps pax тебя не затруднит билд на кидат, буду очень признателен.
ps Каму интересно решил проблему так:
Код:

using UnityEngine;
using System.Collections;
using System;

public class NetworkSyncAnimation : MonoBehaviour {
        public GameObject PlayerAnim;

        void Start() {
               
                    PlayerAnim.animation.CrossFade("idle");
                        PlayerAnim.animation["idle"].normalizedSpeed = 1.0F;
                       
               
        }
       
       
        void Update () {
               
                string entID = gameObject.networkView.viewID.ToString().Remove(0,13);
                if(Input.GetAxis("Vertical")!= 0){if(networkView.isMine){networkView.RPC("Walk",RPCMode.All,entID);}}else{if(networkView.isMine){networkView.RPC("Idle",RPCMode.All,entID);}}


        }
       
        [RPC]
        void Walk(string NetworkID){
                string entID = gameObject.networkView.viewID.ToString().Remove(0,13);
                if(NetworkID == entID){
                        if(PlayerAnim){
                       
                    PlayerAnim.animation.CrossFade("walk");
                        PlayerAnim.animation["walk"].normalizedSpeed = 1.0F;
                       
                       
                        }
                }
               
               
        }
        [RPC]
        void Idle(string NetworkID){
                string entID = gameObject.networkView.viewID.ToString().Remove(0,13);
                if(NetworkID == entID){
                        if(PlayerAnim){
                    PlayerAnim.animation.CrossFade("idle");
                        PlayerAnim.animation["idle"].normalizedSpeed = 1.0F;
                       
                               
                        }
                       
                }

        }

}


pax 09.05.2012 08:30

Ответ: Помоги пожалуйста разобраться с NetworkSyncAnimation
 
Зачем везде по два раза назначение скорости проигрывания?

Serg 09.05.2012 15:06

Ответ: Помоги пожалуйста разобраться с NetworkSyncAnimation
 
Цитата:

Сообщение от pax (Сообщение 227578)
Зачем везде по два раза назначение скорости проигрывания?

Действительно что то перестарался,сам не замечал. Сейчас потравлю может кому пригодится.


Часовой пояс GMT +4, время: 02:24.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot