Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - francoe1

#406
Una imagen dice mas que mil palabras
#407
General (Antiguo) / Unión de arrays
Noviembre 13, 2017, 12:35:58 AM



   
      Array.Copy(Source, index, Destine, index, length);
   

[/quote]
 
Por que no utilizas listas
 



   
       
   
   
      List<GameObject> _objects = new List<GameObject>();
   
   
      _objects.AddRange(GameObject.FindGameObjectsWithTag("Ship"));
      _objects.AddRange(GameObject.FindGameObjectsWithTag("Misc") );
   
   
       
   

[/quote]
 
 
#408
General (Antiguo) / Caída del servidor - 9/11/2017
Noviembre 10, 2017, 12:25:07 PM
Justo ayer no entre --- jajaja
#409
General (Antiguo) / Insertar sprite en function OnGui
Noviembre 08, 2017, 04:12:33 PM
Hasta el momento en el nuevo UI me siento mal cuando programo, veo que todo queda más o menos, no veo lógico tener que instanciar objetos cuando es necesario nuevos "ITEMS", y la verdad es que de a poco me voy adaptando, aunque tambien como vos, estoy realizando un sistema basados en nodos para poder crear las transiciones entre menús, porque es un dolor de cabeza tener referencias en un componente que esté comprobando si pasa X cosa, a parte de que toda la lógica la baso en eventos, evito los flags en bloques repetitivos para evitar cosas raras, algo que con IMGUI era totalmente natural.
 
Por ejemplo, actualmente estoy en el desarrollo de un Juego de Cartas, se generan muchísimo eventos a nivel interfaz, porque a pesar de que el juego cuente con pocos "menús" se basa totalmente en este el GamePlay, pero queda muy mal hacer esto-
 

private void Update()
{
if(NetworkConnection.IsConnect)
   ShowLogin();
else
   HideLogin();
}

 
Por lo que terminas basando en eventos las cosas y a la larga termina siendo un quilom

bo -
 
Por lo general armo todos mis juegos en IMGUI y luego paso a la nueva UI cuando están finalizados, creo que es el último paso -
 
 
 
Hablando de Anchors - En el sistema de UI estuve haciendo unas funciones para ocultar y mostrar menús con slides Top,Bottom,Left,Right pero me encuentro con el problema del pivote y los anc***d 
 
Si tenes un objeto padre con los anc***d al centro el pivote de los objetos hijos van relativamente bien de acuerdo a sus propios valores de anc***d, pero si cambias de lugar los anc***d el pivote no cumple ningún rol-
 
Por ejemplo -
 
Objecto Padre - Pivote en El centro - Anc***d en el centro - width 500px - height 500px.

Objecto Padre - Pivote en El centro - Anc***d fijado en los extremos del hijo - width 200px - height 200px.
 
¿Como mierda afecta el anc***d al pivote?
 
Me rompi la cabeza y no lo pude solucionar.
 
Si queres sacar la distancia que necesitar para poner el objeto fuera del padre se te hace imposible!
#410
General (Antiguo) / Insertar sprite en function OnGui
Noviembre 08, 2017, 03:02:22 PM
Aguante el IMGUI - me acuerdo hace 3 años cuando me arme un sistema de UI para utilizarlo iba bastante bien, a los 3 meses unity saco su sistema jaajaja
 


   
eature=oembed" width="480">

 
La diferencia entre IMGUI y El nuevo sistema mas que en las prestaciones esta el desarrollador, con IMGUI se logran buenos resultados y bastante ligeros, sin embargo no se pueden realizar las animaciones, rotaciones y muchas cosas que van de la mano con un diseño 3D -
 
Desde mi punto de vista, es el desarrollador quien tiene que decidir que sistema usar, diseñar y ver si el elegido no le va a generar inconvenientes en un futuro.
#411
General (Antiguo) / Insertar sprite en function OnGui
Noviembre 02, 2017, 01:17:49 PM
GUI.DrawTextureWithTexCoords(Posición, Textura, sprite.rect);
#412
General (Antiguo) / Escena Test Luces
Octubre 31, 2017, 12:22:16 PM
Ahora estoy en el local, cuando llego a casa meto a ver que pasa!
#413
General (Antiguo) / Escena Test Luces
Octubre 31, 2017, 01:46:30 AM
Con este me bajo a 27 FPS en determinados momentos cuando empeze a mover la cámara bruscamente. aunque esta smoth.
#414
General (Antiguo) / Escena Test Luces
Octubre 31, 2017, 12:37:53 AM
Me afectó los FPS solo la sombra, lo demás no con sombras en médium estaba sobre los 50FPS
 

 
 
#415
General (Antiguo) / Configuracion nuevo PC
Octubre 25, 2017, 06:03:45 PM
Tengo un Local de Informatica en mi Ciudad, me dedica a Soluciones para Empresas en el sector de com***.
 
Los procesadores XEON y OPTEROM no sirven para estas cargas de trabajo, los procesadores INTEL I(X) viene preparado para muchas rutinas de uso "Normal" EJ: codificación de videos acelerada, etc, mientras que los procesadores XEON y OPTEROM estan pensados para trabajos de gran Procesamiento lógico como manejo de DDBB.
 
En cuanto al rendimiento te diría que depende la tarea puede ver mejoras, pero en realidad se trata de focalizar muchos factores para lograr conocer las ventajas obtenidas.
 
Por ejemplo el consumo eléctrico es una de las razones por las cuales las empresas con alto requerimiento en Hardware invierten en servidores y trabajan con terminales tontas... También se aprovecha de la virtualización.
 
Como comentas el problema de las Memorias, estas son mas caras por que requieren "ECC", al igual que las tarjetas de video no tienen un gran desempeño si no cumplen los requisitos, múltiples board de marca DELL o HP solo aceptan tarjetas gráficas NVIDIA QUADRO y ahora con todo el tema de la virtualización en estos últimos tiempos las tarjetas NVIDIA GRID están tomando un gran poder en el área trabajando junto a VMware o WServer.
 
 
 
Mi opinión es, si tienes la plata para realizar una mega inversión en un "servidor" con XEON o OPTERON hazlo estos tienen infinidades de ventajas que una PC jamas tendra, pero el rendimiento va a ser igual a una PC de Gama Alta ... I7 + 1080 Ti + 32G RAM...
 
 
 
Anécdota,  algunos modelos de servidores DELL trae un Cooler especial, en una ocasión el servidor dejo de bootear por que el cooler no estaba en buenas condiciones, por lo que se me ocurrió comprar un cooler por ML, estuvimos 3 dias sin usar el servidor este tenia instalado VCenter y Vmotion por lo que la VM aun seguían funcionando, mi sorpresa fue que al colocar el cooler el servidor me decía que no era un pieza original y por su protección debía apagarse. 
 
Termine llamando a una casa oficial de dell, y me enviaron las instrucciones para poder poner en marcha un cooler "No oficial" -
 
 
 
Es por eso que digo, si queres trabajar cómodo tu mejor inversión es una PC que puedas entender, si se quema la fuente compras nueva y cambias al igual que con cualquier otro componente, cuando se trata de máquinas "Servidores" el cambio de un componente puede ser un dolor de cabeza y bolsillo. 
 
 
#416
General (Antiguo) / Como serializar int y string?
Octubre 19, 2017, 05:17:57 PM
Veo que estás complicando muchísimo con esto, estuve intentando armar algo que simplifique el guardado y carga de información --- Esto lo hace de manera automática sin tener que romperte la cabeza.
 

using System;
using System.Reflection;
using System.Text;
using UnityEngine;
public static class GameData
{
    public static void InternalWriter(Type type, string key, string val)
    {
        PlayerPrefs.SetString(type + key, val);
    }
    private static string InternalReader(string key)
    {
        return PlayerPrefs.GetString(key);
    }
    public static void Write<T>(string key, T obj)
    {
        InternalWriter(typeof(T), key, obj.ToString());
    }
    public static T Read<T>(string key)
    {
        try
        {
            return (T)((object)InternalReader(typeof(T) + key));
        }
        catch (Exception ex)
        {
            Debug.LogException(ex);
        }
        return default(T);
    }
    private static void Write(string key, DataBehaviour val)
    {
        Writer writer = new Writer();
        val.Serialize(writer);
        InternalWriter(val.GetType(), key, writer.GetString());
    }
    public partial class Reader
    {
        public Reader(byte[] bytes)
        {
            data = Encoding.UTF8.GetString(bytes).Split('\\');
        }
        public int CurrentPosition { get { return position; } }
        private int position = ;
        private string[] data;
        public bool IsReadAll()
        {
            return data.Length == position;
        }
        public int ReadInt()
        {
            try
            {
                var r = int.Parse(data[position++]);
                return r;
            }
            catch
            {
                return ;
            }
        }
        public float ReadFloat()
        {
            try
            {
                var r = float.Parse(data[position++]);
                return r;
            }
            catch
            {
                return ;
            }
        }
        public string ReadString()
        {
            try
            {
                var r = data[position++];
                return r;
            }
            catch
            {
                return string.Empty;
            }
        }
        public char ReadChar()
        {
            try
            {
                var r = char.Parse(data[position++]);
                return r;
            }
            catch
            {
                return new char();
            }
        }
        public short ReadShort()
        {
            try
            {
                var r = short.Parse(data[position++]);
                return r;
            }
            catch
            {
                return ;
            }
        }
        public bool ReadBool()
        {
            try
            {
                var r = int.Parse(data[position++]) == 1;
                return r;
            }
            catch
            {
                return false;
            }
        }
        public Vector3 ReadVector3()
        {
            try
            {
                return new Vector3().Parse(data[position++]);
            }
            catch (Exception ex)
            {
                Debug.LogException(ex);
                return Vector3.zero;
            }
        }      
        public void ReadTransform(Transform transform)
        {
            if (transform == null) return;
            string[] vars = ReadString().Split(':');
            transform.name = vars[];
            transform.position = new Vector3().Parse(vars[1]);
            transform.localScale = new Vector3().Parse(vars[2]);
            transform.rotation = Quaternion.Euler(new Vector3().Parse(vars[3]));
        }
    }
    public partial class Writer
    {
        private StringBuilder data = new StringBuilder();
        public void Write(int value)
        {
            Append(value);
        }
        public void Write(float value)
        {
            Append(value);
        }
        public void Write(string value)
        {
            Append(value);
        }
        public void Write(char value)
        {
            Append(value);
        }
        public void Write(bool value)
        {
            Append((value) ? 1 : );
        }
        public void Write(short value)
        {
            Append(value);
        }
        public void Write(Vector3 value)
        {
            Append(string.Format("{0},{1},{2}", value.x, value.y, value.z));
        }
        public void Write(Transform value)
        {
            if (value == null) return;
            Append(string.Format("{0}:{1}:{2}:{3}",
                value.name.Replace(":", ""),
                value.position.Serialize(),
                value.localScale.Serialize(),
                value.rotation.eulerAngles.Serialize()));
        }
        private void Append(object value)
        {
            var str = value.ToString().Replace("\r", "").Replace("\f", "").Replace("\n", "").Replace("\\", "");
            data.AppendFormat("{0}\\", str);
        }
        public byte[] GetBytes()
        {
            return Encoding.UTF8.GetBytes(GetString ());
        }
        public string GetString()
        {
            return data.ToString();
        }
    }
    public partial class DataBehaviour : MonoBehaviour
    {
        private const BindingFlags FLAGS = (
            BindingFlags.Instance |
            BindingFlags.Public |
            BindingFlags.NonPublic |
            BindingFlags.GetProperty |
            BindingFlags.SetProperty);
        internal void Serialize(Writer writer)
        {
            writer.Write(transform);
            OnSerialize(writer);
        }
        internal void Deserialize(Reader reader)
        {
            reader.ReadTransform(transform);
            OnDeserialize(reader);
        }
        public virtual void OnSerialize(Writer writer)
        {
            FieldInfo[] fields = GetType().GetFields(FLAGS);
            foreach (var field in fields)
            {
                if (field.FieldType == typeof(int)) writer.Write((int)field.GetValue(this));
                if (field.FieldType == typeof(string)) writer.Write((string)field.GetValue(this));
                if (field.FieldType == typeof(bool)) writer.Write((bool)field.GetValue(this));
                if (field.FieldType == typeof(float)) writer.Write((float)field.GetValue(this));
                if (field.FieldType == typeof(short)) writer.Write((short)field.GetValue(this));
                if (field.FieldType == typeof(char)) writer.Write((char)field.GetValue(this));
                if (field.FieldType == typeof(Vector3)) writer.Write((Vector3)field.GetValue(this));
                if (field.FieldType == typeof(Vector2)) writer.Write((Vector3)field.GetValue(this));
                if (field.FieldType == typeof(Quaternion)) writer.Write(((Quaternion)field.GetValue(this)).eulerAngles);
                if (field.FieldType == typeof(Transform)) writer.Write((Transform)field.GetValue(this));
            }
        }
        public virtual void OnDeserialize(Reader reader)
        {
            FieldInfo[] fields = GetType().GetFields(FLAGS);
            foreach (var field in fields)
            {
                if (field.FieldType == typeof(int)) field.SetValue(this, reader.ReadInt());
                if (field.FieldType == typeof(string)) field.SetValue(this, reader.ReadString());
                if (field.FieldType == typeof(bool)) field.SetValue(this, reader.ReadBool());
                if (field.FieldType == typeof(float)) field.SetValue(this, reader.ReadFloat());
                if (field.FieldType == typeof(short)) field.SetValue(this, reader.ReadShort());
                if (field.FieldType == typeof(char)) field.SetValue(this, reader.ReadChar());
                if (field.FieldType == typeof(Vector3)) field.SetValue(this, reader.ReadVector3());
                if (field.FieldType == typeof(Vector2)) field.SetValue(this, reader.ReadVector3());
                if (field.FieldType == typeof(Quaternion)) field.SetValue(this, Quaternion.Euler(reader.ReadVector3()));
                if (field.FieldType == typeof(Transform)) reader.ReadTransform((Transform)field.GetValue(this));
            }
        }
        public void Save(string key)
        {
            Write(key, this);
        }
        public void Load(string key)
        {
            Reader reader = new Reader(Encoding.UTF8.GetBytes(InternalReader(GetType() + key)));
            Deserialize(reader);
        }
    }    
}
internal static class Vertor3Ext
{
    internal static Vector3 Parse(this Vector3 vec, string data)
    {
        string[] vars = data.Split(',');
        vec.x = float.Parse(vars[]);
        vec.y = float.Parse(vars[1]);
        vec.z = (vars.Length > 2) ? float.Parse(vars[2]) : ;
        return vec;
    }
    internal static string Serialize(this Vector3 vec)
    {
        return string.Format("{0},{1},{2}", vec.x, vec.y, vec.z);
    }
}

 
Para utilizarlo deberias usar la clase DataBehaviour 
 

public class Test : GameData.DataBehaviour
{
    public int Valor = 1;
    public Transform Cam;
    public Vector3 Datos2;
    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.G))
        {
            Save("MiObject1");
        }
        if(Input.GetKeyDown(KeyCode.E))
        {
            Load("MiObject1");
        }
    }
}

 
Utilizar la función Save(Llave con la que vas a guardar) y se guardan los datos ...
 
Utilizar la función Load(Llave utilizada anteriormente)  y se cargan los dato..
 
Los datos admitidos son
 
int, float, short, char, string, bool, Vector3, Vector2, Quaternion,Transform, pero puedes modificarlo a gusto agregar lo que necesites.
 
Internamente trabaja con PlayerPrefs pero tranquilamente podes reescribir internalWriter para poder utilizar la forma de salida que requieras como grabar un XML TXT o lo que necesites.
#417
General (Antiguo) / Alguna idea?
Octubre 18, 2017, 07:51:51 PM
Te dejo algo que arme hace un tiempo y lo modifique ahora para vos.. 
 

public static class Parabolic
{
    public struct Node
    {
        public Vector3 Point;
        public Vector3 Euler;
        public Quaternion Rotation { get { return Quaternion.Euler(Euler); } }
    }
    public enum ERotation
    {
        Deg0,
        Deg90,
        Deg180,
        Deg270,
    }
    public static Node[] Create(Vector3 point, Vector2 velocity, int segments, ERotation rotation)
    {
        float vel = Mathf.Sqrt((velocity.x * velocity.x) + (velocity.y * velocity.y));
        float angle = Mathf.Rad2Deg * (Mathf.Atan2(velocity.y, velocity.x));
        float time = ;
        time += 0.1f;
        Node[] path = new Node[segments];
        for (int i = ; i < segments; i++)
        {
            float disX = vel * time * Mathf.Cos(angle * Mathf.Deg2Rad);
            float disY = vel * time * Mathf.Sin(angle * Mathf.Deg2Rad) - (Physics2D.gravity.magnitude * time * time / 2.0f);
            path[i].Point = new Vector3(point.x + disX, point.y, point.z);
            if (rotation == ERotation.Deg0)
                path[i].Point.y += disY;
            else if (rotation == ERotation.Deg90)
                path[i].Point.z += disY;
            else if (rotation == ERotation.Deg180)
                path[i].Point.y -= disY;
            else if (rotation == ERotation.Deg270)
                path[i].Point.z -= disY;
            path[i].Euler = new Vector3(, , Mathf.Atan2(velocity.y - (Physics.gravity.magnitude) * time, velocity.x) * Mathf.Rad2Deg);
            time += 0.1f;
        }
        return path;
    }
}

 
Podes armar parabólicas en las 4 rotaciones creería necesarias para tus mecánicas.
 
Te dejo un componente de prueba...
 

public class Parabola : MonoBehaviour
{
    public Vector2 Vi = new Vector2(10, 20);
    public Parabolic.Node[] Path = new Parabolic.Node[];
    public int Segments = 50;
    public Parabolic.ERotation Rot = Parabolic.ERotation.Deg0;
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            Path = Parabolic.Create(transform.position, Vi, Segments, Rot);
        }
    }
   
    private void OnDrawGizmos()
    {
        for (int i = ; i < Path.Length - 1; i++)
        {
            int i2 = i + 1;
            Gizmos.color = Color.white;
            Gizmos.DrawLine(Path[i].Point, Path[i2].Point);
           
            Vector3 dir = (Path[i].Point + Path[i2].Point.normalized);
            Vector3 hDir = dir;
            hDir.y = Path[i].Point.y;
            Vector3 vDir = dir;
            vDir.x = Path[i].Point.x;
            Gizmos.color = Color.red;
            Gizmos.DrawLine(Path[i].Point, hDir);
            Gizmos.color = Color.blue;
            Gizmos.DrawLine(Path[i].Point, vDir);
        }
    }
}

 

 

 

 
 
 
Espero te sirvan!
#418
General (Antiguo) / Alguna idea?
Octubre 18, 2017, 05:18:03 PM
Desde mi punto de vista debería utilizar Parábolas. 
#419
General (Antiguo) / Vida de personaje y enemigo
Octubre 18, 2017, 04:46:31 PM

public class HealthActor : MonoBehaviour
{
[SerializeField]
private int MaxHealth = 100;
internal int Current { get; private set; }
internal bool IsDead { get; private set; }
internal evenct Action OnDead = delegate {};
private void Start()
     {
   Current = MaxHealth;
     }
internal void ApplyDamage(int amount)
    {
   Current -= amount;
   if(Current <= )
        {
            OnDead.Invoke();
            IsDead = true;
         }
        Current = Mathf.Clamp(Current, , MaxHealth);                
    }
                       
    internal void ApplyCure(int amount)
    {
      Current -= amount;
      Current = Mathf.Clamp(Current, , MaxHealth);      
    }
}

 
Analiza el código y trata de copiar las cosas que necesitas...
#420
General (Antiguo) / ayuda con proyecto
Septiembre 23, 2017, 02:50:08 PM
Hasta un PONG es dificil de programar para enseñar si no sabes nada de programación...