Добрый день,
Очень надеюсь на Вашу помощь.
Столкнулся с проблемой проигрывания конкретной анимации в веб сборке своего проекта.
Анимация - легаси. Все анимации лежат отдельными файлами формата 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);
}
}
}