Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 58,34€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales

Search the Community

Showing results for tags 'script'.



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

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 194 results

  1. Buenos días. Les escribo como último recurso tras haberme devanado los sesos durante unos meses. Por motivos laborales no dedico todo el tiempo que me gustaría a Unity, pero les aseguro que llevo ya mucho tiempo con este problema y no doy con la tecla. Resulta que cuando inicio el juego todo va perfecto con la bala; se instancia a la perfección y no da problemas. Pero cuando el player muere y reaparece en el punto de control asignado, al pulsar disparo para instanciar la bala, ésta se queda en el punto donde es instanciada, esto es, que no tiene velocidad, y me aparece el consabido error "NullReferenceException: Objet Refence not set to an instance or an object". A priori puede parecer que el Player pierde su tag "Player"; en cierto modo es así, pues durante su muerte pasa a "untagged" para evitar que los enemigos sigan interaccionando con él, pero una vez realiza el respawn, vuelve a tener su tag "Player". Espero que alguien pueda arrojar algo de luz al asunto, y gracias de antemano. public class BulletManager : MonoBehaviour { public float speed; public float lifeTime; Rigidbody2D rb; public int damageValue = 1; PlayerController player; public GameObject impactPrefab; private void Awake() { rb = GetComponent<Rigidbody2D>(); player = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>(); if (player.faceRight && !player.verticalLook) //Esta el la línea que me //marca el error { rb.velocity = new Vector2(speed, rb.velocity.y); } else if (!player.faceRight && !player.verticalLook) { rb.velocity = new Vector2(-speed, rb.velocity.y); Vector3 bulletScale = transform.localScale; bulletScale.x *= -1; transform.localScale = bulletScale; } else if (player.faceRight && player.verticalLook || !player.faceRight && player.verticalLook) { rb.velocity = new Vector2(rb.velocity.x, speed); transform.Rotate(new Vector3(0f, 0f, 90f)); } Destroy(gameObject, lifeTime); } private void OnTriggerEnter2D(Collider2D col) { Instantiate(impactPrefab, transform.position, Quaternion.identity); Destroy(gameObject); } }
  2. Buenas a todos, estoy con un juego de plataforma en 2D, recién empezando. Necesito añadir algo en el script de "Controlador del personaje" para que al pulsar el botón derecho del ratón, aumente la velocidad del personaje *1.25. He añadido lo siguiente, pero no sé si está bien. Aunque no me da error de compilación, al probar en el juego no noto gran diferencia entre pulsar el botón izquierdo o derecho. Quizás es porque debo aumentar también la velocidad de la animación "Run"??¿cómo se hace? desde el componente Animator en el código? Os dejo el Script aquí por si alguien puede echar un vistazo. Gracias using System.Collections; using System.Collections.Generic; using UnityEngine; public class ControladorPersonaje : MonoBehaviour { Rigidbody2D rigi; public float fuerzaSalto=100f; private bool enSuelo=true; public Transform comprobadorSuelo; float comprobadorRadio=0.07f; public LayerMask mascaraSuelo; private bool dobleSalto=false; private Animator animator; private bool corriendo=false; public float velocidad=1f; private AudioSource sonido; // Start is called before the first frame update void Start() { } void Awake() { rigi=GetComponent<Rigidbody2D>(); animator=GetComponent<Animator>(); sonido = GetComponent<AudioSource>(); } void FixedUpdate() { //Si está parado if (corriendo){ //Aplicar velocidad en el eje X rigi.velocity= new Vector2(velocidad,rigi.velocity.y); animator.SetFloat("velX",rigi.velocity.x); } //Comprobamos si comprobadorSuelo+Radio tocan con los objetos //que pertenezcan a mascaraSuelo enSuelo=Physics2D.OverlapCircle(comprobadorSuelo.position,comprobadorRadio,mascaraSuelo); animator.SetBool("isGrounded",enSuelo); if (enSuelo){ dobleSalto=false; } } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)){ if(corriendo){ if ((enSuelo || !dobleSalto)){ sonido.Play(); //Empujón hacia arriba //Opción 1. Metodo up de Vector2 rigi.AddForce(Vector2.up*fuerzaSalto); //Otra opción //Aplicamos una fuerza de 0 en X y de fuerzasalto en Y //rigi.AddForce(new Vector2(0,fuerzaSalto)); if(!dobleSalto && !enSuelo){ dobleSalto=true; } } } else{ corriendo=true; NotificationCenter.DefaultCenter().PostNotification(this, "PersonajeEmpiezaACorrer"); } } if (Input.GetMouseButtonDown(1)){ if (corriendo){ } else{ rigi.velocity = new Vector2(velocidad * 1.25f, rigi.velocity.y); } } } ControladorPersonaje.cs
  3. Bien, esto es complicado de explicar, así que me tomare mi tiempo: Como ya saben, y si no saben yo les explico, en Unity 3D hay dos modos de hacer Scripts de Movimiento, el primero es moviemto a tu personaje con un Script, y usar animaciones en la que el personaje se encuentra caminando sobre su mismo sitio, sin desplazarse realmente, y el segundo es usar animaciones en las que el personaje se despasa de su punto de origen, y dejar que sean las animaciones las que muevan al personajes, y vía script solo controlamos en AnimatorControler. Mi proyecto es de este segundo tipo. En general el proyecto funciona correctamente, el problema yace en que mi personaje principal esta formado por varias partes; estas serian "Cuerpo, Casco, Peto, Calzas, Botas, Guantes, Cinturón, Armas y Extras". Todas con el mismo esqueleto, y todas compartiendo las mismas animaciones. Esto lo hago de este modo, porque el personaje tiene la capacidad de cambiar su equipamiento. El problema es que, si a todas estas partes les pongo un CharacterController, al mover al personaje, los CharacterControllers se empujan entre si, y todo se me desacomoda, y si solo le pongo un CharacterControler a uno de ellos, cuando este colisiona con algo, todos los demás siguen su camino y el personaje se me desacomoda. Además de que por la estructura del juego, me resulta mas fácil que todas las piezas se encuentren dentro de un mismo GameObject, que sea el que lo mueva todo, pero de ser así, los "hijos" se moverán gracias a sus animaciones, mientras que el padre se quedara en su sitio, sin poder detectar colisiones. La solución a este problema, fue colocar todas las piezas dentro de un GameObject, y a ese GameObject añadirle el CharacterController y con el siguiente código corregir la posición; private void CorrecionDeTransformaciones() { transform.position = transform.GetChild(0).transform.position; transform.rotation = transform.GetChild(0).transform.rotation; transform.localScale = transform.GetChild(0).transform.localScale; for (int i = 0; i < transform.childCount; i++) { transform.GetChild(i).localPosition = Vector3.zero; transform.GetChild(i).localRotation = Quaternion.identity; transform.GetChild(i).localScale = Vector3.one; } } Como ven, la solución fue sencillamente igualar la posición, rotación y escala del Padre al de el primero de los hijos, y después devolver la posición, rotación y escala de todos los hijos, a "ceros". Y hasta cierto punto funciona bien. El problema es que cuando el personaje se topa con una pared, empieza a vibrar muy bruscamente. Me imagino que lo que pasa, es que el CharacterControler devuelve al personaje a su posición anterior, y luego mi script lo hace avanzar. La función anteriormente mostrada la ejecuto en un "LateUpdate()", pero me imagino que para que este código funcione correctamente, sin "convulsiones", es necesario que se ejecute justo después de las colisiones del "CharacterControler". ¿Alguien sabe como corregir este problema?, ¿En que evento llamar mi función? o ¿Cómo adaptar mi código? De antemano, gracias por leer.....
  4. Hola, saludos a todos. Hola, disculpen tengo una pregunta espero me puedan ayudar, deje unity por algun tiempo y ahora que tengo el unity vercion del 2018, ya no funcionan mis scripts que tenia de años atras, por ejemplo tenia un script, que me permitia recojer objetos, y que un enemigo me perseguia cada que recojia un objeto, y ahora cuando intento recrear ese juego, no me deja, me sale error, hay alguna manera de arreglar el scrip o de actualizarlo para las verciones mas recientes? ya que yo no soy programador, pero esos scripts los obtube como 2 años atras y me funcionaban exelente, se podran modificar para que funcionen? o unity implemento algo para que ya nada de hace tiempo funcionara para que tengamos que comprarlos? si quieres se los puedo poner y me dicen que tienen mal, o si me pdorian decir que cambio para checar mejor, De antemano gracias ala comunidad
  5. Ok, tengo un problema. Tengo el siguiente Script: using UnityEngine; using System.Collections; public static class DataParticle { public static GameObject ItemCurativo; //[01] public static GameObject PociónRoja; //[02] public static GameObject PociónAzul; //[03] public static GameObject PociónVerde; //[04] public static GameObject PociónAmarilla; //[05] public static GameObject PociónMorada; //[06] public static GameObject PociónNaranja; //[07] public static GameObject PociónCeleste; //[08] public static GameObject PociónBlanca; //[09] public static GameObject PociónNegra; //[10] public static GameObject Comida; //[11] public static GameObject Bebida; //[12] public static GameObject GetItemCurativo (){ return ItemCurativo; } public void SetItemCurativo(GameObject Entrada){ ItemCurativo = Entrada; } } Hasta aquí todo bien, no provoca error, y puede llamarlo desde otros Scripts sin tener que inicializarlo ni anclarlo a un objeto en la escena, que es lo que deseo. El problema es que no me deja cargar mis prefabs en las variables GameObject en el inspector. En teoría, seleccionando el Script en Unity, te permitiría inicializar las variables. Pero no me deja, muestra un mensaje que dice; "No Monobehaviour scripts in the file". Saben como solucionar el error?.
  6. Buenas tardes, me encuentro haciendo un juego en 2D y me ha surgido una duda con los eventos Touch pero también con los Raycast para detectar en este caso el collider que estás pulsando. Tengo un sprite 2D que quiero mover por el escenario del juego y conseguí hacerlo pero con colliders 3D ya que era lo que me pareció más sencillo utilizando Raycast y los eventos de Touch(Began, Moved y Ended). El problema llega cuando he intentado convertir esto para colliders 2D ya que ahí tengo edge collider para ajustar el perímetro a mi objeto en 2D. He probado con Raycast2D pero no hay manera de conseguir que con los eventos Touch y un collider 2D se mueva el objeto. Os dejo el código que tengo ahora mismo y con el que me funciona si tengo colliders 3D. using System.Collections; using System.Collections.Generic; using UnityEngine; [System.Serializable] public class Boundary { public float xMin, xMax, yMin, yMax; } public class TouchManager : MonoBehaviour { GameObject gObj = null; Plane objPlane; Vector3 m0; public Boundary boundary; Ray GenerateMouseRay(Vector3 touchPos) { Vector3 mousePosFar = new Vector3(touchPos.x, touchPos.y, Camera.main.farClipPlane); Vector3 mousePosNear = new Vector3(touchPos.x, touchPos.y, Camera.main.nearClipPlane); Vector3 mousePosF = Camera.main.ScreenToWorldPoint(mousePosFar); Vector3 mousePosN = Camera.main.ScreenToWorldPoint(mousePosNear); Ray mr = new Ray(mousePosN, mousePosF-mousePosN); return mr; } // Update is called once per frame void FixedUpdate () { if(Input.touchCount > 0) { if(Input.GetTouch(0).phase == TouchPhase.Began) { Ray mouseRay = GenerateMouseRay(Input.GetTouch(0).position); RaycastHit hit; if(Physics.Raycast(mouseRay.origin, mouseRay.direction, out hit)) { gObj = hit.transform.gameObject; objPlane = new Plane(Camera.main.transform.forward*-1, gObj.transform.position); //calc touch offset Ray mRay = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); float rayDistance; objPlane.Raycast(mRay, out rayDistance); m0 = gObj.transform.position - mRay.GetPoint(rayDistance); } } else if(Input.GetTouch(0).phase == TouchPhase.Moved && gObj) { Ray mRay = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); float rayDistance; if(objPlane.Raycast(mRay, out rayDistance)) { gObj.transform.position = new Vector3(Mathf.Clamp(mRay.GetPoint(rayDistance).x + m0.x, boundary.xMin, boundary.xMax), Mathf.Clamp(mRay.GetPoint(rayDistance).y + m0.y, boundary.yMin, boundary.yMax)); } } else if(Input.GetTouch(0).phase == TouchPhase.Ended && gObj) { gObj = null; } } } } Muchas gracias!
  7. Hola a todos, se que el título no es muy descriptivo pero no sabría como expresarlo en poquitas palabras xD. Veran lo que estoy buscando hacer es algo que he de suponer es simple pero le estuve dando muchas vueltas y no lo consigo. Tengo un personaje el cual al seleccionar una parte del mapa cae allí e inflige un daño de área determinado, lo que quiero hacer es que previo a clikear en la zona, se muestre un "circulo" que represente el área de daño del personaje. Esta área es un simple sphere collider el cual modifica su radio via script, lo que no consigo es la forma de pasar este radio a un objeto o imagen(probé con objetos 3d y de UI) el cual pueda ajustarse en base a ese parámetro. Por eso quería pedirles si alguien me puede tirar una idea o algo con lo que me pueda basar porque no lo consigo, de antemano gracias : )
  8. hola tengo una duda estoy tratando de hacer que el player se recupere tomando una caja pero no eh podido public void SumarVida(float _masVida) { currentHealth += (int)_masVida; } al script del player le agregue esa linea y esta es para la caja using System.Collections; using System.Collections.Generic; using UnityEngine; public class Recuperar : MonoBehaviour { public float masVida; public int currentHealth; void OnTriggerEnter(Collider collider) { //Debug.Log ("El Player Esta Dentro Del Trigger"); if (collider.tag == "Player") { collider.gameObject.GetComponent<CompleteProject.PlayerHealth> ().SumarVida (masVida); Destroy (gameObject); } } } si alguien de buen corazon me ayuda plis <3
  9. Hola, en estos momentos me encuentro desarrollando un videojuego que necesita tener bastantes cronómetros, los cronómetros los realicé con corrutinas ya que necesitaba que existiera más de un cronometro funcionando, sin embargo necesito que estos cronómetros sigan funcionando así el jugador decida cambiar de escena. Soy nueva con Unity, entonces todavía no conozco muchas herramientas, sin embargo leí sobre el DontDestryOnLoad(), pero según entiendo esto solo funciona con objetos físicos, no con métodos y efectivamente, haciendo una prueba esta función no sirve para lo que necesito. Existe alguna otra forma de mantener mis corrutinas entre las escenas? o por el contrario hay otra forma de hacerlo? Muchas gracias de antemano.
  10. Tengo este script using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Gif : MonoBehaviour { public Button Boton; public Sprite[] frames; public int FramesPorSegundo = 10; // Use this for initialization void Start () { Boton = GameObject.Find("Boton").GetComponent<Button>(); } // Update is called once per frame void Update () { int Index = FramesPorSegundo * Time.deltaTime; Index = Index % frames.Length; Boton.image.sprite = frames[Index]; } } Y me lanza el siguiente error: Assets/Scripts/Gif.cs(18,21): error CS0266: Cannot implicitly convert type `float' to `int'. An explicit conversion exists (are you missing a cast?) Es decir el error esta en: int Index = FramesPorSegundo * Time.deltaTime; Pero si cambio estas variables a float, se me quita este error pero me aparece en la linea: Boton.image.sprite = frames[Index]; Alguna idea? Lo unico que quiero es insertar un Gif en la imagen de un botton
  11. Buenas, Estoy creando un juego en 2D, tipo rol, estoy creando una escena donde el jugador puede elegir su personaje, un par de cosillas, color del cuerpo, sexo, pelo.... Tengo varios sprites multiples con las imagenes de los movimientos de cada uno, de manera que el sprite se llama(por ejemplo) "Hombre1" y dentro tiene sus sprites que van desde "Hombre1_0" hasta "Hombre1_50". Tengo una imagen que cambio dependiendo de si es hombre o mujer, lo que pretendo hacer es coger "Hombre1_50" o "Mujer1_50" dependiendo de si me hace clik en el boton del hombre o de la mujer, esto lo tengo, pero a la hora de cargar la imagen no hay manera...los tengo guardados dentro de "Resources/Personajes" ahi mismo he puesto un par de imagenes de prueba, Sprites simples, y los cambia sin problema, accedo de la siguiente manera donde "imagenfinal" es una concatenacion dependiendo de las elecciones que haga el jugador(pelo, color de pelo...) dando como resultado "Hombre1_50" pero no hay manera de que cargue la imagen... No he encontrado referencia a como coger estas imagenes, no se si es porque no se puede hacer o porque busco mal.... Muchas gracias
  12. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Agua : MonoBehaviour { GameObject player; public GameObject Water; void Start() { player = GameObject.FindGameObjectWithTag("Player"); } // Update is called once per frame void Update() { } public void OnTriggerEnter(Collider other) { if (other.gameObject == player) { RecogerAgua(); } } void RecogerAgua() { if (Input.GetKeyDown(KeyCode.E)) { Water.SetActive(false); } } } Hola a todos :D estoy intentando crear un script para recoger objetos al pulsar E pero al ponerlo en unity y darle a play no ocurre nada, sabrian decirme por que? aqui os dejo el script.
  13. Hola a todos! Les cuento que mi problema es el siguiente: tengo un scriptableobject a modo de base de datos en la que entre las distintas variables que tiene para cada objeto dentro de la base de datos, una es del tipo GameObject y almacena un prefab el cual se conforma siempre de un particle system y en algunos casos tienen hijos con otros particle system. La cuestión es que lo que quiero es que dependiendo de que ID tenga el jugador en cualquier momento(esta cambia dependiendo del botón que se aprete) sea visible o uno u otro prefab. La primera opción que se me ocurrió es la de volver hijo del jugador todos estos prefabs y luego desactivarlos y activarlos dependiendo de la ID, pero quiero saber si quizás se puede hacer de una forma más simple en la que no tenga que adherir constantemente un prefab como hijo del player y que solo con agregarlo a la base de datos ya lo pueda utilizar. De acá solo se me ocurre que por ahí si dejo un gameobject como hijo del player quizás via script con el addcomponent pudiese modificarle sus componentes para "igualarlo" al prefab de la base de datos correspondiente a su ID, si bien puedo adicionarle los componentes necesarios no pude copiar los valores del prefab. Si alguien sabe cómo hacerlo o se le ocurre una mejor idea estaría muy agradecido.
  14. Buenos dias, estoy trabajando en una aplicación en la que descargo los componentes transform de un gameObject e intento aplicarselos durante la ejecución, para aplicar la posición no he tenido ningun problema pero para aplicar la rotacion no he sido capaz, el objeto gira pero no con los valores que yo le paso he probado varias formas y ninguna funciona, adjunto la parte del codigo donde lo intento hacer Quaternion rota = new Quaternion(); // defino un quaternion xx = siho[i].rotationX; // los valores los tengo almacenados en un array por eso hago esa asignación rota.x = xx; yy = siho[i].rotationY; rota.y = yy; zz = siho[i].rotationZ; rota.z = zz; gameObjectActual.transform.rotation= rota; He comprobado los valores de las variables xx,yy,zz y si que contienen los valores que yo busco pero a la hora de girar el objeto aparecen otros valores :( Un saludo y gracias de antemano!
  15. Hola, quisiera una ayuda, estoy haciendo un juego y no entiendo/no se, como pasar un prefab el cual es un carro y ese carro es personalizable y esta en el menú salgo como esto:( la imagen) y que al momento de que el usuario le de a jugar, el carro que el eligió se muestre en la escena de juego(como la imagen) y que al cambiar por ejemplo las ruedas el color u a otro carro, ese sea con el que juegue la partida, me entienden? ayuda porfa!
  16. Hola a todos, el problema es el siguiente: quiero instanciar un proyectil y que llegue a cierta posición, entonces lo instancio, lo roto mirando al punto pero no llega nunca a dicho punto y es que haciendo pruebas resulta que la variable Vector3 por el cual le paso el punto destino (ya que cuando llegue a ese punto quiero que se destruya) se cambia sola, cuando se lo paso mediante un set se cambia sus valores. El código es el siguiente: public void Disparar(Buggy target) { if (enfriamientoactual > 0) return; //objetivo = Vector3.zero; Vector3 obj = CalcularPrediccion4(target); Debug.Log("Primero"); objetivo = CalcularPrediccion4(target); transform.LookAt(obj); objetiv.position = obj; Debug.Log(obj); Debug.Log("Segundo"); GameObject misilobj = Instantiate(misil, transform.position, transform.rotation); misilobj.transform.LookAt(obj); Debug.Log(obj); Debug.Log("Tercero"); Misil misilscript = misil.GetComponent<Misil>(); misilscript.Velocidad = velocidadbala; misilscript.Objetivo = obj; Debug.Log(obj); Debug.Log("Cuarto"); enfriamientoactual = enfriamiento; } El de la clase Misil es este: public float velocidad; public Vector3 objetivo; public float Velocidad { set { velocidad = value; } } public Vector3 Objetivo { set { Debug.Log(value); objetivo = value; } } void Update () { //Debug.Log(objetivo); transform.Translate(Vector3.forward * velocidad * Time.deltaTime, Space.Self); transform.LookAt(objetivo); if (Vector3.Distance(transform.position, objetivo) < 0.25f) { Destroy(gameObject); } } Luego en la captura de pantalla del editor se imprime por consola un vector distinto al guardado en la variable "objetivo" de Misil. Alguien sabe por qué ocurre esto? Gracias.
  17. Pues el título lo dice todo, la verdad es que no sé como lograr esto en 2d, quiero que haya X objetos que siempre estén sonando pero que se escuchen más fuerte o más flojo a medida que el player se aleje o acerque. Esto se hacerlo en 3D, pero no doy con la tecla para hacerlo en 2D, alguna idea?? Muchas gracias!!!
  18. Buenas! Les explico, estoy armando una app para Android, como se les ocurre que podria mostrar en pantalla cierta informacion especifica extrayendola de una web? Les dejo el tipo de informacion que quisiera extraer: Por un lado, las publicaciones, dando la posibilidad de seleccionarlas y abrir su propia web, y por otro lado, la posibilidad de presionar el boton para cambiar de página... Que se les ocurre gente? Desde ya muchas gracias
  19. Hola, como oculto o desactivo un a boton con Set.Active pero quiero que haga dicha acción luego de haber presionado 3 veces a ese botón?
  20. Hola amigos! Tengo una pregunta, necesito que el botón "Siguiente" (que es un texto en 3D) aparezca solo después de presionar un cubo, ¿cómo puedo hacerlo? Además necesito bloquear los otros cubos si presiono uno, este es mi código, por favor ayúdenme con el código porque soy tan novata en esto y no tengo suficiente tiempo. ¡¡¡Gracias!!! Este es el código en caso de presionar el cubo "ch": if (hit.collider.tag == "Letra_ch") { Destroy (hit.collider.gameObject); aux++; scoreAmount++; letra = "ch"; if (GameManager.gm) { GameManager.gm.targetHit (scoreAmount); } scoreFinal = PlayerPrefs.GetInt ("Score", scorePP) + scoreAmount; PlayerPrefs.SetInt ("Score", scoreFinal); Debug.Log ("Score en ch: " + scoreFinal); Debug.Log ("ESTOY EN CH EN SCRIPT: " + letra); PlayerPrefs.SetString ("Chado", letra.ToString ()); }
  21. Hola buenas, pregunto tras rebuscar y super rebuscar en internet y encontrar lo mismo. ¿Sabeis de alguna especie de listado donde te expliquen como funcionan las funciones o metodos basicos en scripts y como usarlos? Me refiero a como hacer que por ejemplo los objetos se destruyan, o el jugador se mueva, o salte, o que aparezca un texto con la puntuación actual y se actualice en pantalla. He conseguido encontraren la web de unity las funciones, pero si es el caso como el mio, que soy muy nuevo en esto, es dificil de entender las explicaciones que te dan en la web oficial, pues parece que dan a entender que ya sabes del tema y algunos no tenemos ni idea. Queria saber si alguien conoce de un pdf o algo similar donde se recaude medianamente explicado los metodos basicos mas usados en scripts para unity. Si es posible pdf mejor porque me dedico a estudiar en el metro y los buses. Gracias a todos los de la comunidad!
  22. Buenas, vengo por acá a consultar si alguien ha tenido problemas con la versión de Unity 2017.2.0f3, tengo un proyecto que he venido trabajando creo un script y al intentar asociarlo me sale la captura de pantalla que adjunto en el mensaje, el script que estoy tratando de asociar solo tiene la siguientes lineas de código: using UnityEngine; using UnityEngine.UI; using System.Collections; public class ExampleClass : MonoBehaviour { public void Button_Onclick() { Debug.Log("Dio Click"); } } lo que intento es primero, capturar las coordenadas del mouse con un botón centrado en mi escena a través del evento clic, luego mantener en el centro de la escena el cursor y dejarlo salir con la tecla ESC, si alguien a trabajado algo similar se lo agradecería, Fenix discom realizo unos vídeos para lo que necesito pero en Unity 5 no funcionan les dejo el enlace del vídeo, espero me puedan ayudar saludos desde Colombia.
  23. Hola tengo un problema con esta script var mensaje : UI.Text; var cuadro : GameObject; var texto1 : String; var player : GameObject; var texto2 : String; var letra : int; var fin = ; private var texto : String; var playerSentado : GameObject; function Start () { Empezar(); } function Update () { } function Empezar (){ if(fin == ){texto = texto1 +player.name + texto2;} if(fin == 1){texto = "Dialogo 2";} //texto = texto1 +player.name + texto2; StartCoroutine(dictado(texto)); } function dictado (frase : String){ mensaje.text =""; while ( letra < frase.length){ mensaje.text += frase[letra]; letra += 1; yield WaitForSeconds(0.2f); } while ( letra >= frase.length){ yield WaitForSeconds(0.2f); mensaje.text = ""; yield WaitForSeconds(1f); //cuadro.SetActive(false); player.SetActive(true); playerSentado.SetActive(false); texto = ""; frase = ""; letra = ; fin = 1; print(frase.Length); Empezar(); } } Resulta que incluso poniendo todo a cero no me funciona cuando se ejecuta por segunda vez es decir la primera vez me hace letra a letra y cuando termina se ejecuta // while ( letra >= frase.length) // pero cuando vuelve a empezar otra vez en vez de ejecutar el primer while con la frase completa se vuelve loco y por ejemplo salen 2 letras y se borra luego otras dos y se borra y asi. supongo que el problema es que frase.length no se vuelve a cero por eso se vuelve loco. como podria devolverla a cero? si esque es ese el problema que no lo se...
  24. Buenas, tengo un pequeño problema, estoy terminando un código, y resulta que me aparece un error y no soy capaz de encontrar la solución, quería saber si alguien podría ayudarme. Aquí dejo el error: "Assets/Scripts/Manager.cs(221,20): error CS0161: `Manager.ObtenerInfo(Cuadricula)': not all code paths return a value" Y aquí el código: using UnityEngine; using System.Collections; using System.Collections.Generic; public class Manager : MonoBehaviour { public int TamañoX, TamañoY; GameObject [] _items; public Cuadricula[,] BidItem; Cuadricula ItemActual; public static int minItemsPorEncuentro = 3; bool Jugando; void Start () { Jugando = true; ObtenerItems (); Grid (); LimpiarGrid(); Cuadricula.SeleccionItemEvento += SeleccionItem; } void OnDisable () { Cuadricula.SeleccionItemEvento -= SeleccionItem; } void Grid () { BidItem = new Cuadricula [TamañoX, TamañoY]; for (int x = 0; x < TamañoX; x++) { for (int y = 0; y < TamañoY; y++) { BidItem [x,y] = Instanciar (x,y); } } } void LimpiarGrid() { for (int x = 0; x < TamañoX; x++) { for (int y = 0; y < TamañoY; y++) { Encuentros encuentros = ObtenerInfo (BidItem [x, y]); if (encuentros.EncuentroValido) { Destroy (BidItem [x, y].gameObject); BidItem[x,y] = Instanciar (x, y); y--; } } } } Cuadricula Instanciar (int x, int y) { GameObject ItemRandom = _items[Random.Range (0, _items.Length)]; GameObject NuevoItem = (GameObject) Instantiate (ItemRandom, new Vector3 (x, y, 0f), Quaternion.identity); NuevoItem.GetComponent<Cuadricula>().Posicion (x,y); return NuevoItem.GetComponent<Cuadricula> (); } void SeleccionItem (Cuadricula item) { if (ItemActual == item || !Jugando) { return; } if (ItemActual == null) { ItemActual = item; }else { float xDif = Mathf.Abs (item.x - ItemActual.x); float yDif = Mathf.Abs (item.y - ItemActual.y); if (xDif + yDif == 1) { StartCoroutine (Cambio (ItemActual, item)); //cambiar }else { Debug.Log ("Ese cambio no esta permitido"); } ItemActual = null; } } IEnumerator IntentoEncuentros ( Cuadricula a, Cuadricula b) { Jugando = false; yield return StartCoroutine (Cambio (a, b)); Encuentros EncuentroA = ObtenerInfo (a); Encuentros EncuentroB = ObtenerInfo (b); if(!EncuentroA.EncuentroValido && !EncuentroB.EncuentroValido) { yield return StartCoroutine (Cambio (a, b)); yield break; } if (EncuentroA.EncuentroValido) { yield return StartCoroutine (DestruirItems (EncuentroA.Encuentro)); yield return StartCoroutine (UpdateGrid (EncuentroA)); } else if (EncuentroB.EncuentroValido) { yield return StartCoroutine (DestruirItems (EncuentroB.Encuentro)); yield return StartCoroutine (UpdateGrid (EncuentroB)); } Jugando = true; } IEnumerator UpdateGrid (Encuentros encuentro) { if (encuentro.EncuentroStartY == encuentro.EncuentroEndY) { for ( int x = encuentro.EncuentroStartX; x <= encuentro.EncuentroEndX; x++){ for (int y = encuentro.EncuentroStartY; y < TamañoY - 1; y++){ Cuadricula upIndex = BidItem [x, y + 1]; Cuadricula current = BidItem [x, y]; BidItem [x, y] = upIndex; BidItem [x, y + 1] = current; BidItem [x, y].Posicion (BidItem [x, y].x, BidItem [x, y].y - 1); } BidItem [x, TamañoY-1] = Instanciar (x, TamañoY - 1); } } else if (encuentro.EncuentroEndX == encuentro.EncuentroStartX){ int EncuentroHeight = 1 +(encuentro.EncuentroEndY - encuentro.EncuentroStartY); for (int y = encuentro.EncuentroStartY + EncuentroHeight; y <= TamañoY - 1; y++){ Cuadricula lowIndex = BidItem [encuentro.EncuentroStartX, y - EncuentroHeight]; Cuadricula current = BidItem [encuentro.EncuentroStartX, y]; BidItem [encuentro.EncuentroStartX, y] = lowIndex; BidItem [encuentro.EncuentroStartX, y - EncuentroHeight] = current; } for (int y = 0; y < TamañoY - EncuentroHeight; y++) { BidItem [encuentro.EncuentroStartX, y].Posicion (encuentro.EncuentroStartX, y); } for (int i = 0; i < encuentro.Encuentro.Count; i++) { BidItem [encuentro.EncuentroStartX, (TamañoY-1) - i] = Instanciar (encuentro.EncuentroStartX, (TamañoY -1) -i) ; } } for (int x = 0; x < TamañoX; x++) { for (int y = 0; y < TamañoY; y++) { Encuentros encuentros = ObtenerInfo (BidItem [x, y]); if (encuentros.EncuentroValido) { yield return new WaitForSeconds (minItemsPorEncuentro); yield return StartCoroutine (DestruirItems (encuentros.Encuentro)); yield return new WaitForSeconds (minItemsPorEncuentro); yield return StartCoroutine (UpdateGrid (encuentros)); } } } } IEnumerator DestruirItems ( List <Cuadricula> items) { foreach (Cuadricula i in items) { yield return StartCoroutine (i.transform.Escala (Vector3.zero, 0.01f)); DestroyImmediate (i.gameObject); } } IEnumerator Cambio ( Cuadricula a, Cuadricula b) { CambioRigidbody (false); float DuracionMov = 0.1f; Vector3 PosicionItemA = a.transform.position; StartCoroutine (a.transform.Move (b.transform.position, DuracionMov)); StartCoroutine (b.transform.Move (PosicionItemA, DuracionMov)); yield return new WaitForSeconds (DuracionMov); CambioRigidbody (true); } void ActualizarValores ( Cuadricula a, Cuadricula b) { Cuadricula TemporalA = BidItem [a.x, a.y]; BidItem [a.x, a.y] = b; BidItem [b.x, b.y] = TemporalA; int ViejobX = b.x; int ViejobY = b.y; b.Posicion (a.x, a.y); a.Posicion(ViejobX, ViejobY); } List <Cuadricula> BuscarHorizontal ( Cuadricula item) { List <Cuadricula> HItems = new List <Cuadricula>{ item }; int Left = item.x -1; int Right = item.x +1; while (Left >= 0 && BidItem [Left, item.y].id == item.id) { HItems.Add (BidItem [Left,item.y]); Left--; } while (Right < TamañoX && BidItem [Right, item.y].id == item.id) { HItems.Add (BidItem [Right,item.y]); Right--; } return HItems; } List <Cuadricula> BuscarVertical ( Cuadricula item) { List <Cuadricula> VItems = new List <Cuadricula>{ item }; int Lower = item.y -1; int Upper = item.y +1; while (Lower >= 0 && BidItem [item.x, Lower].id == item.id) { VItems.Add (BidItem [item.x, Lower]); Lower--; } while (Upper < TamañoY && BidItem [item.x, Upper].id == item.id) { VItems.Add (BidItem [item.x, Upper]); Upper++; } return VItems; } Encuentros ObtenerInfo ( Cuadricula item) { Encuentros E = new Encuentros (); E.Encuentro = null; List <Cuadricula> HEncuentro = BuscarHorizontal (item); List <Cuadricula> VEncuentro = BuscarVertical (item); if (HEncuentro.Count >= minItemsPorEncuentro && HEncuentro.Count > VEncuentro.Count){ //informar de los encuentros E.EncuentroStartX = ObtenerMinimoX(HEncuentro); E.EncuentroEndX = ObtenerMinimoX (HEncuentro); E.EncuentroStartY = E.EncuentroEndY = HEncuentro[0].y; E.Encuentro = HEncuentro; } else if (VEncuentro.Count >= minItemsPorEncuentro){ E.EncuentroStartY = ObtenerMinimoX(VEncuentro); E.EncuentroEndY = ObtenerMaximoY(VEncuentro); E.EncuentroStartX = E.EncuentroEndY = HEncuentro[0].x; E.Encuentro = VEncuentro; } } int ObtenerMinimoX ( List <Cuadricula> items) { float [] indices = new float [ items.Count]; for (int i = 0; i < indices.Length; i++) { indices [i] = items [i].x; } return (int)Mathf.Min (indices); } int ObtenerMaximoX ( List <Cuadricula> items) { float [] indices = new float [ items.Count]; for (int i = 0; i < indices.Length; i++) { indices [i] = items [i].x; } return (int) Mathf.Max (indices); } int ObtenerMinimoY ( List <Cuadricula> items) { float [] indices = new float [ items.Count]; for (int i = 0; i < indices.Length; i++) { indices [i] = items [i].y; } return (int) Mathf.Min (indices); } int ObtenerMaximoY ( List <Cuadricula> items) { float [] indices = new float [ items.Count]; for (int i = 0; i < indices.Length; i++) { indices [i] = items [i].y; } return (int) Mathf.Max (indices); } void ObtenerItems() { _items = Resources.LoadAll <GameObject> ("Prefabs"); for ( int i = 0; i < _items.Length; i++) { _items[i].GetComponent <Cuadricula>().id = i; } } void CambioRigidbody ( bool Estado) { foreach (Cuadricula c in BidItem) { c.GetComponent<Rigidbody2D>().isKinematic =!Estado; } } }
  25. hola buenas. tengo un problema con esta script el problema es que salgo del collider y a los 10 segundos me quita vida... quisiera que dentro me quitara vida cada 10 segundos o algo asi y si salgo que no me quite como puedo hacerlo.... un saludo y gracias.
×
×
  • Create New...