Решено SmartFox и предава Transform

потия 20 януари 2012 г., 11:45 ч

Кажете ми как да го направя правилно, вече трети ден страдам Трябва да организираме малко пространство. Когато свързвате нов клиент, всеки трябва да накара този герой да се появи на сцената и да проследи движенията му. Въпрос: как да прехвърля координатите на играча към други, свързани към „стаята“ с помощта на smartFox?

Re: SmartFox и Transfer Transform

Syberex 22 януари 2012 г., 22:21

От сървъра идва пакет, нещо като "CreateNewPlayer,0124578,Name1,0,0,0" (Id,Name,x,y,z).

// Преместете обекта в (0, 0, 0) gameObject.transform.position = Vector3(x, y, z);

PS това е на теория, няма да ви говоря за SF, но изпращането на подобен пакет от сървъра, поне низов, поне двоичен, не би трябвало да е трудно, основното е да го изпратите на правилните клиенти и да го обработите правилно на тях.

Re: SmartFox и Transfer Transform

mizoff 23 януари 2012 г., 21:02 ч

Re: SmartFox и Transfer Transform

potia 26 януари 2012 г., 15:58 ч.

Моето решение UpdatePosition.cs - зависи от вашия характер

използване на UnityEngine; използване на System.Collections ;

публичен клас UpdatePosition : MonoBehaviour

private Transform myTransform; private Vector3 oldPosition; private float oldTime ;

// Използвайте това за инициализация void Awake ( ) < myTransform = трансформиране;

void Начало ( ) < oldPosition = myTransform. позиция; >

// Актуализацията се извиква веднъж на кадър void Update ( )

void OnUserVarsUpdate ( BaseEvent e )

Потребител потребител = (Потребител) e. параметри ["потребител"]; go_temp = GameObject. Find(user.Name); MovePlayer mp = go_temp. GetComponent("MovePlayer")като 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("Присъединете се към стаята"); joinToRoom = true; Стая стая = ( Стая ) e. Параметри ["стая"]; foreach ( Потребителски потребител в стаята. Списък с потребители ) < if ( ! потребител. IsItMe ) CreateByName ( потребител ); >

public static void SetUserVariablesRequest ( float pos_x, float pos_y, float pos_z, float rot_x, float rot_y, float rot_z ) < Списък с потребителски променливи > userVars = нов списък с потребителски променливи > ( ); userVars. Добавяне (нова SFSUserVariable ("x", (двойно) pos_x)); userVars. Добавяне (нова SFSUserVariable ("y", (двойно) pos_y)); userVars. Добавяне (нова SFSUserVariable ("z", (двойно) pos_z)); userVars. Добавяне (нова SFSUserVariable ("rot_x", (двойно) rot_x)); userVars. Добавяне (нова SFSUserVariable ("rot_y", (двойно) rot_y)); userVars. Добавяне (нова SFSUserVariable ("rot_z", (двойно) rot_z)); SFS2X_connect. sfs. Изпрати (ново SetUserVariablesRequest (userVars)); >

void CreateByName ( потребителски потребител ) < Отстраняване на грешки. Дневник (име на потребител); 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 ) ), нов кватернион (0,0,0,0)) като GameObject; върви. име = потребител. Име ; върви. анимация . CrossFade ("неактивен"); >

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

използване на UnityEngine; използване на System.Collections ;

публичен клас MovePlayer: MonoBehaviour

публичен вектор3 нов вектор; публична цел за статична трансформация; public int moveSpeed ​​= 3; public int rotationSpeed ​​= 500;

public int _maxDistans = 1; private Transform myTransform ; частен Vector3 relativePos; private bool finish = true;

void Събудете се ( ) < myTransform = трансформиране; >

ако ( ! завърши ) < плаващо разстояние = Vector3. Разстояние (новВектор, трансформиране. позиция); //вычесление дистанции if ( distance > _maxDistans ) < анимация. CrossFade ("ходене"); Отстраняване на грешки. DrawLine (newVector,myTransform. position,Color. yellow) ; // Траектория движения

relativePos = newVector - myTransform. позиция ; myTransform. въртене = кватернион. Slerp (myTransform. въртене, Кватернион. LookRotation (relativPos) , rotationSpeed ​​* Време. deltaTime ); myTransform. позиция += myTransform. напред * скорост на движение * време. deltaTime ; // Движение на обекта

public void UpdateVector ( float x, float y, float z )

if (y 1.0f) y = 1.0f; новВектор = нов Вектор3 (x,y,z); финиш = невярно;

Още не съвсем чист код, но напълно работен