Jump to content
UnitySpain

Search the Community

Showing results for tags 'codigo'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Inicio
    • Proyectos
    • Offtopic
    • Unity Feeds
    • Website
  • Mesa de ayuda
    • Unity
    • Arte
    • Otras Especialidades
    • Builds & Dispositivos
  • Aportes de la Comunidad
    • Recursos
    • Eventos
    • Buenas Prácticas
  • Bolsa de trabajo & Colaboraciones
    • Ofertas y Demandas
  • Post Antiguos
    • General (Antiguo)

Blogs

  • byGui
  • El Blog de Pioj

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Especialidad

Found 11 results

  1. Que tal, la situación es la siguiente: Tengo unos árboles con su respectivo collider y los he puesto con la herramienta de terreno. Deseo poder eliminar cada arbol al que me acerque o apunte (por ejemplo para recolectar madera de ese arbol y eliminarlo una vez que termine) funciona muy bien con arboles puestos manualmente, pero los colocados con la herramienta de terreno no se puede. Use un raycast, por ejemplo, y todos los arboles creados por terrenos me los detecta como "terrain" y no encuentro la forma de saber o detectar cada uno de manera individual. Alguna sugerencia? o de que manera puedo interactuar con los objetos creados con la herramienta de terrain, ya que colocar tantos arboles, hierba, rocas, etc. es demasiado laborioso. Gracias.
  2. Muy buenas! Sabeis como puedo conseguir que este código no se repita??? que una vez ejecutado ó bien no se pueda volver a ejecutar o bien haga la ejecución al contrario. un saludo gracias !!! using UnityEngine; using System.Collections; public class dooControl : MonoBehaviour { public float speed; public float angle; public Vector3 direction; void Start() { angle = transform.eulerAngles.y; } void Update() { if (Mathf.Round(transform.eulerAngles.y) != angle) { transform.Rotate(direction * speed); } if (Input.GetKeyDown(KeyCode.0)) { angle = 90; direction = Vector3.up; } if (Input.GetKeyDown(KeyCode.C)) { angle = 0; direction = Vector3.up; } } } Perdón ese code no es, es este: using UnityEngine; using System.Collections; public class DoorController : MonoBehaviour { public GameObject Door; public bool doorIsOpening; void Update () { if (doorIsOpening == true) { Door.transform.Translate (Vector3.up * Time.deltaTime * 5); } if (Door.transform.position.z > 4f) { doorIsOpening = false; } } void OnMouseDown(){ doorIsOpening = true; } }
  3. Hola tengo un problema que es que cuando le doy play para ver como va mi juego mi personaje se encoge de tamaño. Por si no entendieron se me hace más chico del tamaño en que lo tengo en la escena. De código no creo que sea problema pero si alguien sabe por favor responda gracias.
  4. Hola buenos días chicos. Tengo varios frentes abiertos de resolver proyectos y movidas varias. El caso es que acabo de ver este video: Y como veis es bastante fácil violar una variable de tu juego , supongo que será muy complejo de proteger las variables en tiempo real. Pero como por aquí tenemos expertos de alto nivel, quería saber si alguien conoce de algún sistema de seguridad para proteger estas variables. Un saludo. p.d. Veo que se basan en el valor que quieren cambiar, podrías duplicar tu valor importante 10 veces para joder pero sería liar las cosas y meter peso en memoria.
  5. https://kobra.io Es un servicio online de edición de código colaborativo (múltiples usuarios editando el mismo archivo a la vez), lo que permite crear el código de un fichero en menor tiempo, o también puede usarse para enseñanza a distancia, para tutorías o cualquier otra cosa que necesitéis. Su uso es muy sencillo, y puede serviros a más de uno para resolver esas dudas del foro que parecen imposibles. Recordad: ¡La unión hace la fuerza!
  6. Hola, hace mas o menos tiempo hice un tema parecido a este, pero no supieron explicar bien, osea lo hicieron, pero la verdad no entendi muy bien y no me funciono, asi que hago otro pero mas detallado. Tengo una variable publica que contendra la textura nueva del boton. Lo que quiero es saber como puedo acceder al canvas para cambiarle la textura, osea que sea algo como canvas.button.texture = texturaNueva; Pero realmente no se como hacerlo porque ninguna de las variables de canvas me permiten acceder a una variable (creo. Entonces lo que quiero hacer es crear una variable donde coloque el boton del que quiero cambiar la textura, y que luego cambie esa textura por otra que yo quiera. Como podria hacer eso? Gracias, espero que puedan entender.
  7. Hola amigos, recién me suscribí a la página. Soy Oris, el creador del canal Unity Institute de Youtube. Si aún no lo conocéis os invito a que le peguéis un vistazo. Repleto de tutoriales con muy buenas críticas. Suelo hacerlos más enfocados a la codificación, pero estoy ampliando el abanico y voy colgando de otras facetas. Me iré pasando por aquí para ver si puedo ayudar en algo y contaré con vosotros para lo que surja. Que lal fuerza os acompañe y ahí estaremos para lo que sea. Unity Institute tutoriales Youtube
  8. Enlace de descarga: https://app.box.com/s/384vkwhfosk9zgzpftphq3oi35yifhpb Para este sistema de Save/Load necesitamos crear un prefab de la entidad. El prefab se necesita para instanciar/crear un nuevo GameObject de la forma más sencilla. El sistema de guardado consta de una clase estática llamada GameData que almacena una sola instancia MonoBehaviour(script) de cada GameObject dentro de una ArrayList, y dispone de las funciones Save y Load: using UnityEngine; using System.Collections; using System.IO; using System.Runtime.Serialization.Formatters.Binary; public static class GameData { public static string file = "GameData.dat"; public static ArrayList Data = new ArrayList(); //Aqui se almacenaria todos los datos como objetos public static bool Save(){ FileStream fs = new FileStream(file, FileMode.Create); BinaryFormatter formatter = new BinaryFormatter(); ArrayList arrayList = new ArrayList(); foreach(object data in Data){ ISaveLoad script = (ISaveLoad) data; arrayList.Add(script.GetData()); } try { formatter.Serialize(fs, arrayList); } catch (System.Runtime.Serialization.SerializationException e) { UnityEngine.Debug.Log("Failed to serialize. Reason: " + e.Message); return false; } finally { fs.Close(); } arrayList.Clear(); arrayList = null; formatter = null; fs = null; return true; } public static bool Load(){ if(!File.Exists(file)) return false; FileStream fs = new FileStream(file, FileMode.Open); ArrayList arrayList; try { BinaryFormatter formatter = new BinaryFormatter(); arrayList = (ArrayList) formatter.Deserialize(fs); formatter = null; } catch (System.Runtime.Serialization.SerializationException e) { UnityEngine.Debug.Log("Failed to deserialize. Reason: " + e.Message); return false; } finally { fs.Close(); } Data.Clear(); //Instanciar GameObjects a escena foreach(object data in arrayList){ EntityData entityData = (EntityData)data; entityData.OnLoad(UnityEngine.Object.Instantiate<GameObject>(Resources.Load<GameObject>(entityData.ResourcesPath))); } arrayList.Clear(); arrayList = null; fs = null; return true; } } Uso la instancia de un script como referencia del GameObject, y no una clase serializada directamente, porque es constante durante todo el tiempo de juego. Tampoco utilizo el GameObject directamente como referencia, para que este sistema de guardado pueda ser utilizado por cualquier tipo de script(SOLO UN SCRIPT por GameObject podrá implementar el sistema de guardado). Este único script recoge los datos de los componentes y otros script del GameObject. Para poder guardar los datos del juego de forma generalizada, utilizo una clase base serializada llamada EntityData con el campo ResourcesPath y la funcion OnLoad: [System.Serializable] public class EntityData{ public string ResourcesPath; public virtual void OnLoad(GameObject gameObject){} } Y además, necesito una interfaz para poder extraer los datos de los GameObjects, con la funcion GetData(): interface ISaveLoad{ object GetData(); } UTILIZACION Como he dicho, antes de nada, es necesario crear un prefab de la entidad/GameObject que alojaremos en la carpeta Resources. A continuación, dentro de algún script del GameObject a guardar(solo un script del GameObject puede implementar este sistema): 1) Creamos una clase derivada de EntityData. Esta clase hereda ResourcesPath y la funcion OnLoad necesaria para la carga de la escena, y añadiremos los datos que queramos guardar del GameObject. Por ejemplo: [System.Serializable] public class Data : EntityData{ [HideInInspector] public float px,py,pz,rx,ry,rz,sx,sy,sz; public int vida = 100, experiencia = 0; public override void OnLoad (GameObject gameObject) { Transform transform = gameObject.GetComponent<Transform>(); transform.position = new Vector3(px,py,pz); transform.eulerAngles = new Vector3(rx,ry,rz); transform.localScale = new Vector3(sx,sy,sz); ScriptEntidad1 script = gameObject.GetComponent<ScriptEntidad1>(); //Transformamos el object en la clase de datos de la entidad script.datos = (ScriptEntidad1.Data) this; } } public Data datos; He creado una clase llamada Data, derivada de EntityData, donde almaceno los datos del Transform y dos campos de vida y experiencia. En la funcion OnLoad asigno estos valores a los componentes, es decir, al Transform y al Script al que he vinculado los datos, en este caso al script 'ScriptEntidad1'. 2) Añadimos el script a la lista de GameData desde la funcion Start() de Unity, y los eliminamos al destruir el GameObject desde la funcion OnDestroy() de Unity: void Start () { //Añadir GameObject a la lista GameData.Data.Add(this); } void OnDestroy(){ //Eliminar GameObject de la lista GameData.Data.Remove(this); } 3) Añardir la funcion GetData de la interfaz ISaveLoad: public class ScriptEntidad1 : MonoBehaviour, ISaveLoad { object ISaveLoad.GetData(){ //Actualizar Datos Transform Vector3 temp = this.transform.position; this.datos.px = temp.x; this.datos.py = temp.y; this.datos.pz = temp.z; temp = this.transform.eulerAngles; this.datos.rx = temp.x; this.datos.ry = temp.y; this.datos.rz = temp.z; temp = this.transform.localScale; this.datos.sx = temp.x; this.datos.sy = temp.y; this.datos.sz = temp.z; return this.datos; } } Si quereis ver el codigo completo del script: using UnityEngine; using System.Collections; public class ScriptEntidad1 : MonoBehaviour, ISaveLoad { [System.Serializable] public class Data : EntityData{ [HideInInspector] public float px,py,pz,rx,ry,rz,sx,sy,sz; public int vida = 100, experiencia = 0; public override void OnLoad (GameObject gameObject) { Transform transform = gameObject.GetComponent<Transform>(); transform.position = new Vector3(px,py,pz); transform.eulerAngles = new Vector3(rx,ry,rz); transform.localScale = new Vector3(sx,sy,sz); ScriptEntidad1 script = gameObject.GetComponent<ScriptEntidad1>(); //Transformamos el object en la clase de datos de la entidad script.datos = (ScriptEntidad1.Data) this; } } public Data datos; object ISaveLoad.GetData(){ //Actualizar Datos Transform Vector3 temp = this.transform.position; this.datos.px = temp.x; this.datos.py = temp.y; this.datos.pz = temp.z; temp = this.transform.eulerAngles; this.datos.rx = temp.x; this.datos.ry = temp.y; this.datos.rz = temp.z; temp = this.transform.localScale; this.datos.sx = temp.x; this.datos.sy = temp.y; this.datos.sz = temp.z; return this.datos; } void Start () { //Añadir GameObject a la lista GameData.Data.Add(this); } void OnDestroy(){ //Eliminar GameObject de la lista GameData.Data.Remove(this); } }
  9. Lo preguntáis bastante, así que lo mejor es verse este vídeo para darse cuenta de que programar un script de C# en unity no supone ninguna dificultad. De hecho, facilita bastante las cosas. https://unity3d.com/pt/learn/tutorials/modules/beginner/scripting/c-sharp-vs-javascript-syntax Más ayudas: http://answers.unity3d.com/questions/12911/what-are-the-syntax-differences-in-c-and-javascrip.html Moraleja: Perdedle el miedo a programar en C# , si queréis aprovechar todo el potencial que ofrece Unity, en especial los CustomEditor.
  10. bueno como el tema lo dice quisiera saber si piensan que las coroutines son en realidad de gran utilidad o no. Yo soy un poco nuevo en tema de C# y eh aprendido bastante estos últimos meses y al descubrir la función de las coroutines las vi que eran de muy buena utilidad que rapido las empece a agregar y utilizar bastante en mi codigo, pero ahora que mi código a crecido y a avanzado veo que las coroutines me estan dando un poco de dolor de cabeza, bueno en realidad en tema de su funciona son bastante útiles pero en donde me eh dado cuenta de su desventaja es al momento de querer detenerlas, bueno mas que nada es al momento de pausar el juego las coroutine siguen su curso y no se detienen al menos que se le agregue un poco de código extra pero aun asi no se recuperan (al quitar la pausa) en el punto en donde se quedaron y eso provoca un problema, un ejemplo sencillo es poner un ship que dispare cada 2 segundos, al momento de poner pausa en el mismo momento que dispare, si pongo un IF dentro de la coroutine para que el código no se ejecute mientras está en pausa, pero la coroutine sigue haciendo su conteo, si al momento de quitar la pausa el conteo de la coroutine está al final de su conteo de 2 segundos provocará un doble disparo. Eh visto también que agregan un WaitForEndOfFrame para detener la coroutine, aun no lo eh probado pero al analizar la funcion que haria WaitForEndOfFrame creo que pasaría lo mismo que poner un IF.Tambien eh visto otra personas que agregan un código algo grande con muchas líneas para determinar el tiempo de la coroutine pero siendo así ya la coroutine pierde su encanto ya que prefiero hacer un código con DeltaTime y crear mi propio código que sería solo una cuantas líneas en vez de estar modificando una coroutine. ok almenos eso es lo que eh visto y me eh dado cuenta sobre las coroutines, son en realidad útiles o no? o será que me estoy perdiendo de algún truco que google no me a querido mostrar?, Usan Ustedes coroutines para sus codigo? si existe algún truco para detener una coroutine y su conteo haganlo saber please, gracias
  11. Hola a todos, verán tengo un problema y es que quiero hacer un script en c# que consiste en que al hacer click con el botón del ratón básicamente se active un contador en el que la puntuación aumente por ejemplo 100 por segundo. Se que puede ser muy sencillo pero no me sale. Ej: Click + 100 + 100 ... Gracias, se que he puesto esto en ayuda unity script pero es que quiero la solución ya, debido a que llevo varios días pensándolo y no se me ocurre o no funciona.
×
×
  • Create New...