[Решено] SmartFox и передача Transform

Сеть в Unity3D

[Решено] SmartFox и передача Transform

Сообщение potia 20 янв 2012, 11:45

Добрый день.

Подскажите как сделать правильно, уже третий день мучаюсь.
Нужно организовать некое пространство. При подключение нового клиента у всех должен появляться данный персонаж на сцене и отслеживаться его перемещения.
Вопрос: как передать координаты игрока другим подключенным к "комнате" по средствам smartFox?
Последний раз редактировалось potia 26 янв 2012, 16:58, всего редактировалось 1 раз.
potia
UNец
 
Сообщения: 27
Зарегистрирован: 15 дек 2011, 12:07

Re: SmartFox и передача Transform

Сообщение Syberex 22 янв 2012, 22:21

От сервера приходит пакет что-то типа "CreateNewPlayer,0124578,Name1,0,0,0" (Id,Имя,x,y,z).
Клиент получает пакет, создает gameObject персонажа и помещает его куда надо:

// Move the object to (0, 0, 0)
gameObject.transform.position = Vector3(x, y, z);

PS это в теории, по SF не подскажу, но послать с сервера аналогичный пакет, хоть строковый, хоть бинарный должно быть не сложно, главное отправить его нужным клиентам, а на них обработать правильно ...
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: SmartFox и передача Transform

Сообщение mizoff 23 янв 2012, 21:02

Хотелось бы увидеть подробный урок. Странно что по SmartFox X2 нет отдельного раздела. Я пока разобрался как присоединяться входить в зону и комнату. (По мануалам не буду врать). Если бы добрый человек написал урок как банально заставить присоединяться к серверу, и перемещаться по нему игроками, с учетом положения объекта в пространстве (куда смотрит куда пошел) . Золотой урок был бы.
Космос - страсть. Сделать космосим - мечта. Unity3D - Мечты сбываются. :)
Аватара пользователя
mizoff
UNIт
 
Сообщения: 54
Зарегистрирован: 02 дек 2011, 10:29
Откуда: Россия
  • Сайт
  • ICQ

Re: SmartFox и передача Transform

Сообщение potia 26 янв 2012, 15:58

Мое решение
UpdatePosition.cs - вешается на своего персонажа

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;


public class UpdatePosition : MonoBehaviour {
       
        private Transform myTransform;
        private Vector3 oldPosition;
        private float oldTime;

        // Use this for initialization
        void Awake () {
                myTransform = transform;
               
        }
       
        void Start () {
                oldPosition = myTransform.position;
        }
       
        // Update is called once per frame
        void Update () {
               
                if ((oldPosition != myTransform.position && (Time.realtimeSinceStartup-oldTime) >= 0.5f) || ((Time.realtimeSinceStartup - oldTime) > 60.0f)) {
                                SFS2X_connect.SetUserVariablesRequest(  myTransform.position.x,
                                                                                                                myTransform.position.y,
                                                                                                                myTransform.position.z,
                                                                                                                myTransform.rotation.x,
                                                                                                                myTransform.rotation.y,
                                                                                                                myTransform.rotation.z);
                        oldPosition = myTransform.position;
                        oldTime = Time.realtimeSinceStartup;
                }
        }
}
 


SFS2X_connect.cs

Синтаксис:
Используется csharp

void OnUserVarsUpdate(BaseEvent e) {
               
                User user = (User)e.Params["user"];
                go_temp = GameObject.Find(user.Name);
                MovePlayer mp = go_temp.GetComponent("MovePlayer") as MovePlayer;
                mp.UpdateVector(System.Convert.ToSingle(user.GetVariable("x").Value),System.Convert.ToSingle(user.GetVariable("y").Value),System.Convert.ToSingle(user.GetVariable("z").Value));
        }


void OnJoin(BaseEvent e) {
                //Debug.Log("Join in Room");   
                joinToRoom = true;
                Room room = (Room)e.Params["room"];
                foreach (User user in room.UserList)
           {
              if (!user.IsItMe) CreateByName (user);
           }

               
        }

        public static void SetUserVariablesRequest (float pos_x, float pos_y, float pos_z,float rot_x, float rot_y, float rot_z) {
                List<UserVariable> userVars = new List<UserVariable>();
                userVars.Add( new SFSUserVariable("x", (double) pos_x ));
                userVars.Add( new SFSUserVariable("y", (double) pos_y ));
                userVars.Add( new SFSUserVariable("z", (double) pos_z ));
                userVars.Add( new SFSUserVariable("rot_x", (double) rot_x ));
                userVars.Add( new SFSUserVariable("rot_y", (double) rot_y ));
                userVars.Add( new SFSUserVariable("rot_z", (double) rot_z ));
                SFS2X_connect.sfs.Send ( new SetUserVariablesRequest(userVars) );              
        }
       
        void CreateByName (User user) {
                Debug.Log(user.Name);
                GameObject go = Instantiate(enemy,
                                                                        new Vector3(System.Convert.ToSingle(user.GetVariable("x").Value),System.Convert.ToSingle(user.GetVariable("y").Value),System.Convert.ToSingle(user.GetVariable("z").Value)),
                                                                        new Quaternion(0,0,0,0)) as GameObject;
                go.name = user.Name;
                go.animation.CrossFade("idle");
        }
       
 


MovePlayer.cs - управление персонажем

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class MovePlayer : MonoBehaviour {
       
        public Vector3 newVector;
        public static Transform target;
        public int moveSpeed = 3;
        public int rotationSpeed = 500;
       
        public int _maxDistans = 1;
        private Transform myTransform;
        private Vector3 relativePos;
        private bool finish = true;
       
        void Awake () {
                myTransform = transform;       
        }
       
        void Start() {
               
               
        }
       
        void LateUpdate () {   
               
                if (!finish) {
                        float distance = Vector3.Distance(newVector, transform.position); //вычесление дистанции
                        if (distance>_maxDistans) {
                                animation.CrossFade("walk");
                                Debug.DrawLine(newVector,myTransform.position,Color.yellow); // Траектория движения
                                       
                                relativePos = newVector - myTransform.position;
                                myTransform.rotation= Quaternion.Slerp(myTransform.rotation,
                                                       Quaternion.LookRotation(relativePos),
                                                       rotationSpeed*Time.deltaTime);  
                                myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime; // Движение объекта
                       
       
                        } else { finish = true; animation.CrossFade("idle");}
                }      
        }
       
        public  void UpdateVector(float x, float y, float z) {
               
                if (y<1.0f) y=1.0f;
                newVector = new Vector3 (x,y,z);
                finish = false;
       
        }
       
}



Еще не совсем чистый код, но вполне рабочий
potia
UNец
 
Сообщения: 27
Зарегистрирован: 15 дек 2011, 12:07

Re: [Решено] SmartFox и передача Transform

Сообщение mizoff 26 янв 2012, 17:01

Супер! Я попробую. Огромное спасибо! (3A4OT)
Космос - страсть. Сделать космосим - мечта. Unity3D - Мечты сбываются. :)
Аватара пользователя
mizoff
UNIт
 
Сообщения: 54
Зарегистрирован: 02 дек 2011, 10:29
Откуда: Россия
  • Сайт
  • ICQ

Re: [Решено] SmartFox и передача Transform

Сообщение mizoff 26 янв 2012, 20:49

Ошибки в скрипте SFS2X_connect.cs

Assets/EARTH_3021_TEST/Javascripts/Networking/SFS2X_connect.cs(8,23): error CS0246: The type or namespace name `BaseEvent' could not be found. Are you missing a using directive or an assembly reference?

Assets/EARTH_3021_TEST/Javascripts/Networking/SFS2X_connect.cs(17,13): error CS0246: The type or namespace name `BaseEvent' could not be found. Are you missing a using directive or an assembly reference?

Assets/EARTH_3021_TEST/Javascripts/Networking/SFS2X_connect.cs(40,28): error CS0246: The type or namespace name `User' could not be found. Are you missing a using directive or an assembly reference?

Я С# не изучал, но как я понял не объявлено что то в начале скрипта.
Космос - страсть. Сделать космосим - мечта. Unity3D - Мечты сбываются. :)
Аватара пользователя
mizoff
UNIт
 
Сообщения: 54
Зарегистрирован: 02 дек 2011, 10:29
Откуда: Россия
  • Сайт
  • ICQ

Re: [Решено] SmartFox и передача Transform

Сообщение potia 27 янв 2012, 12:25

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Sfs2X;
using Sfs2X.Core;
using Sfs2X.Core.Sockets;
using Sfs2X.Requests;
using Sfs2X.Entities;
using Sfs2X.Logging;
using Sfs2X.Controllers;
using Sfs2X.Entities.Data;
using Sfs2X.Entities.Variables;
using System.Net.Sockets;
potia
UNец
 
Сообщения: 27
Зарегистрирован: 15 дек 2011, 12:07

Re: [Решено] SmartFox и передача Transform

Сообщение mizoff 28 янв 2012, 03:00

potia писал(а):
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Sfs2X;
using Sfs2X.Core;
using Sfs2X.Core.Sockets;
using Sfs2X.Requests;
using Sfs2X.Entities;
using Sfs2X.Logging;
using Sfs2X.Controllers;
using Sfs2X.Entities.Data;
using Sfs2X.Entities.Variables;
using System.Net.Sockets;


Спасибо тебе человек!
Космос - страсть. Сделать космосим - мечта. Unity3D - Мечты сбываются. :)
Аватара пользователя
mizoff
UNIт
 
Сообщения: 54
Зарегистрирован: 02 дек 2011, 10:29
Откуда: Россия
  • Сайт
  • ICQ

Re: [Решено] SmartFox и передача Transform

Сообщение potia 29 янв 2012, 15:55

Если кому то интересны проекты связанные с этой темой, готов взять в свою команду.
Предосавлю рабочее место в Москве + не высокую зарплату для начала
potia
UNец
 
Сообщения: 27
Зарегистрирован: 15 дек 2011, 12:07

Re: [Решено] SmartFox и передача Transform

Сообщение durak007 30 янв 2012, 04:03

Спасибо тебе человек!

Ты помог мне - Великий Механник!!
durak007
 


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3