Вторник, 26 Ноября 2024, 06:55

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проигрывание анимации в Web-Build'e
PygbIKДата: Четверг, 11 Сентября 2014, 10:07 | Сообщение # 1
был не раз
Сейчас нет на сайте
Добрый день,
Очень надеюсь на Вашу помощь.
Столкнулся с проблемой проигрывания конкретной анимации в веб сборке своего проекта.
Анимация - легаси. Все анимации лежат отдельными файлами формата fbx. При проигрывании проекта из самого Unity - всё ОК, а в веб билде - персонаж замер в Т-позе и нивкакую не хочет анимироваться.

Делал всё по примеру стандартного примера в Photon Cloud - Demo Worker.

Провел множество экспериментов, но всё всегда сводится к одному и тому-же
В самом Юнити - всё работает, анимация проигрывается.
Делаю Веб билд - персонаж двигается при нажатии кнопок управления, но персонаж замер в Т-позе.
Делаю PC билд - персонаж даже не реагирует на инпут о___О

Перерыл уже много форумов и ничего подобного не нашел.

Код ThirdPersonController:
Код
using UnityEngine;
using System.Collections;

//Добавляем компонент типа CharacterController если он отсутсвует
[RequireComponent (typeof(CharacterController))]

public class ThirdPersonController : Photon.MonoBehaviour
{
          
         public bool isControllable = true;

         //Переменная состояний
         public enum CharacterState
         {
                 Idle = 0,
                 Walk = 1,
                 Run = 2,
                 Dead = 3,
         }
         public CharacterState _characterState;
          
         //Переменная движения влево\вправо
         public enum Side{
                 left = -1,
                 none = 0,
                 right = 1
         }
          
         //Переменная движения вперед\назад
         public enum Forward{
                 back = -1,
                 none = 0,
                 forward = 1
         }
          
         public float WalkSpeed = 5; //Скорость ходьбы
         public float RunMultiply = 2; //Увеличение скорости при беге(на какую цифру умножается текущая скорость)
         public float gravity = 20; //Гравитация
          
         public AnimationClip a_Idle; //Анимация бездействия
         public float a_IdleSpeed = 1;//Скорость проигрывания анимации бездействия
         public AnimationClip a_Walk;
         public float a_WalkSpeed = 2;
         public AnimationClip a_Run;
         public float a_RunSpeed = 2;
         private Animation _animation;
          
         public CollisionFlags _collisionFlags;
         private Transform _myTransform;
         private CharacterController _controller;
         private Vector3 _moveDirection;

         private Side _side;
         private Forward _forward;
         private bool _run;

         //Метод который срабатывает при запуске сцены
         public void Awake(){
                 _myTransform = transform;
                 _moveDirection = Vector3.zero; //Никуда не двигаемся
                 _controller = GetComponent<CharacterController> ();
                 _characterState = CharacterState.Idle;
                 _animation = GetComponent<Animation> ();

                 _animation.Stop(); //останавливаем все анимации если вдруг что-то проигрывается
                 _animation.wrapMode = WrapMode.Loop; //все анимации будут зацикливаемые
                 _animation[a_Idle.name].speed=a_IdleSpeed; //задаем скорость анимации из переменных
                 _animation[a_Walk.name].speed=a_WalkSpeed;
                 _animation[a_Run.name].speed=a_RunSpeed;
                  
                 _animation.Play(a_Idle.name);
         }
          
         public void Movement(){
                 if (_controller.isGrounded) {
                         _moveDirection = new Vector3 ((int)_side, 0, (int)_forward);
                         _moveDirection = _moveDirection.normalized;
                         _moveDirection *= WalkSpeed;
                 }
                  
                 Vector3 lookDirection = _moveDirection + transform.position;
                 transform.LookAt(new Vector3(lookDirection.x, transform.position.y, lookDirection.z));
                 _moveDirection.y -= Time.deltaTime*gravity;
                 _collisionFlags = _controller.Move (_moveDirection*Time.deltaTime);
                  
         }
          
         void Update()
         {    
                 if (isControllable)
                 {
                         Movement ();
                         if (Input.GetButton ("Vertical")) {
                    if (Input.GetAxis("Vertical")>0){
                    SendMessage("MoveMeForward",ThirdPersonController.Forward.forward);
                    _characterState = CharacterState.Walk;
                    }       
                    else{
                    SendMessage("MoveMeForward",ThirdPersonController.Forward.back);
                    _characterState = CharacterState.Walk;
                    }
                         }
                          
                         if (Input.GetButtonUp ("Vertical")){
                    SendMessage("MoveMeForward",ThirdPersonController.Forward.none);
                    _characterState = CharacterState.Idle;
                         }
                          
                         if(Input.GetButton("Horizontal")){
                    if (Input.GetAxis("Horizontal")>0){
                    SendMessage("SideMe",ThirdPersonController.Side.right);
                    _characterState = CharacterState.Walk;
                    }       
                    else{
                    SendMessage("SideMe",ThirdPersonController.Side.left);
                    _characterState = CharacterState.Walk;
                    }
                         }
                          
                         if (Input.GetButtonUp ("Horizontal")){
                    SendMessage("SideMe",ThirdPersonController.Side.none);
                    _characterState = CharacterState.Idle;
                         }
                 }
                  
                 if (_characterState == CharacterState.Idle)
                 {
                         _animation[a_Idle.name].speed = a_IdleSpeed;
                         _animation.CrossFade(a_Idle.name);
                 }
                 else
                 {
                         _animation[a_Walk.name].speed = a_WalkSpeed;
                         _animation.CrossFade(a_Walk.name);
                 }
         }
          
         public void MoveMeForward(Forward z){
                 _forward = z;
         }
         public void ToggleRun(){
                 _run = !_run;
         }
         public void SideMe(Side z){
                 _side = z;
         }  
}


Код ThirdPersonNetwork:
Код

using UnityEngine;
using System.Collections;

public class ThirdPersonNetwork : Photon.MonoBehaviour
{
     ThirdPersonCamera cameraScript;
     ThirdPersonController controllerScript;

     void Awake()
     {
         cameraScript = GetComponent<ThirdPersonCamera>();
         controllerScript = GetComponent<ThirdPersonController>();

          if (photonView.isMine)
         {
             //MINE: local player, simply enable the local scripts
             cameraScript.enabled = true;
             controllerScript.enabled = true;
         }
         else
         {            
             cameraScript.enabled = false;

             controllerScript.enabled = true;
             controllerScript.isControllable = false;
         }

         gameObject.name = gameObject.name + photonView.viewID;
     }

     void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
     {
         if (stream.isWriting)
         {
             //We own this player: send the others our data
             stream.SendNext((int)controllerScript._characterState);
             stream.SendNext(transform.position);
             stream.SendNext(transform.rotation);  
         }
         else
         {
             //Network player, receive data
                         controllerScript._characterState = (ThirdPersonController.CharacterState)(int)stream.ReceiveNext();
             correctPlayerPos = (Vector3)stream.ReceiveNext();
             correctPlayerRot = (Quaternion)stream.ReceiveNext();
         }
     }

     private Vector3 correctPlayerPos = Vector3.zero; //We lerp towards this
     private Quaternion correctPlayerRot = Quaternion.identity; //We lerp towards this

     void Update()
     {
         if (!photonView.isMine)
         {
             //Update remote player (smooth this, this looks good, at the cost of some accuracy)
             transform.position = Vector3.Lerp(transform.position, correctPlayerPos, Time.deltaTime * 5);
             transform.rotation = Quaternion.Lerp(transform.rotation, correctPlayerRot, Time.deltaTime * 5);
         }
     }

}


Сообщение отредактировал PygbIK - Четверг, 11 Сентября 2014, 10:09
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг