Jump to content

Biarox1166

Registrados
  • Content Count

    58
  • Joined

  • Last visited

  • Days Won

    1

Biarox1166 last won the day on October 25

Biarox1166 had the most liked content!

Community Reputation

5 Neutral

About Biarox1166

  • Rank
    Usuario

Profile Information

  • Especialidad
    Coder

Recent Profile Visitors

779 profile views
  1. Hola! @Megadok para hacer ese uso es muy simple. Lo enums son tratados no solo con los nombre que les des(espada, arco,etc) sino que por defecto tiene un index asociado comenzando desde 0. Por lo que si queres que tu variable _arma sea igual a lanza por ejmplo solo tendrías que castear el tipo armas delante del index correspondiente a lanza(que sería 2). Te dejo un ejemplo. public enum armas { espada, //0 arco, //1 lanza, //2 hacha //3 } public armas _armas; private void Start() { //el casteo se hace poniendo entre parentesis el tipo que te interesa obtener _armas = (armas)1; //esto hara que _armas sea "arco" } //Con tu codigo seria asi string[] r = System.Enum.GetNames(typeof(armas)); for(int i=0;i<r.Lenght;i++){ _armas = (armas)i; }
  2. Hola @francoe1 gracias por responder tan rápido! Te comento tu respuesta me sirve pero no hace algo que necesito y es que el incremento se de a 1. Yo lo que quiero es poder calcular cuanto tiempo tengo que poner de espera en el yield para que con incrementos de 1 llegue a la temperatura indicada en el tiempo indicado. Como podría modificar tu código para que haga eso?
  3. int tempValue; //temperatura a la cual llegar int tiempoValue; //tiempo en el cual llegar a dicha temperatura (en segundos) IEnumerator TemperaturaActual(bool aumentar) { int t = 0; while (t < tempValue) { t += 1; tempActualText.text = $"Actual \n <size=+18>{t.ToString()}</size>"; //yield return new WaitForSeconds((1f/(tempValue/tiempoValue))); //yield return new WaitForSeconds((tiempoValue / tempValue)); //yield return new WaitForSeconds((1.5f/(tempValue/tiempoValue))/2); } } Buenas a todos, hoy traigo una duda que me esta molestando ya hace días y que probablemente tenga una solución simple que no veo jajaja. Verán tengo una corutina encargada de incrementar el valor de la temperatura actual de un horno. Esta va en aumento hasta llegar a la temperatura previamente marcada por el usuario. El tema es que el usuario además de elegir la temperatura a la cual llegar puede elegir el tiempo en el que desea que llegue(en segundos). Y acá es donde viene mi problema, no logro que si el usuario haya elegido 15 segundos tarde 15 segundos en llegar a X temperatura. Probé de diversas formas y todas o bien lo hacen en mucho menos tiempo, o bien tardan de más. También me ha pasado de que algunas soluciones sirven siempre y cuando sean valores de temperatura y tiempo bajos, en cuanto alguno de los dos aumenta mucho... Adjunto la parte de la corutina que creo que es lo que importa, los yield comentados son las distintas formas que busqué de lograr dicho efecto. Aclaraciones: *t si o si tiene que ser integer y aumentar de 1 en lo posible. *tanto el tiempo como la temperatura deben ser valores enteros también. *Objetivo: Si yo ingreso 500 grados por asi decirlo, y 120 segundos, se debe incrementar t de manera que alcance 500 en dicho tiempo. Gracias de antemano y saludos!
  4. Gracias @Igor y @OnlyDavies lo pude solucionar y fue una boludes jajajaja perdón por la pregunta tan tonta. Yo utilizaba una esfera 3D a la cual le modificaba el valor de la escala en base al radio y no al diámetro! Asi que ahora ya funciona bien jajaja gracias de nuevo : p
  5. 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 : )
  6. @jeico008 Tenías razón jajaja no se porque no lo había probado antes, pero si funciona. Gracias!!!
  7. Te referís a usarlo en esta línea? Sabes que no lo probé? Ahora voy a ver si me funciona así xD
  8. Hola a todos, les vengo a pedir un poco de ayuda ya que tengo una script que funciona conjuntamente con otra script que instancia objetos, la primera se encarga del drag and drop, la cosa es uqe funciona perfecto pero está hecha para inputs de PC y yo necesito que se pueda hacer desde un celular. Estuve viendo en el manual de Unity y en internet en general cómo modificar esta script pero no puedo hacerlo, intenté detectar si la touchCount es mayor a cero, almacenar la posicion del primer touch, luego calcular los delta entre este y el objeto instanciado pero no me funciona. Despues lo traté de implementar con los TouchPhase pero no lo logro hacer funcar. Alguno me puede ayudar con el código o bien mostrarme un video que explique algo por el estilo en entornos 3D? De antemano gracias : ) private void Update() { if (objetoActual != null) { MoverObjetoAlMouse(); RotacionPorScroll(); SoltarObjeto(); } } public void SetInstanceID(int id) { objetoActual = Instantiate(Prefabs[0]); objetoActual.GetComponentInChildren<Torre>().ID = id; renders.Clear(); colores.Clear(); materiales.Clear(); SeteoDeColorOriginal(); } private bool BotonDelMismoPrefab(int i) { return objetoActual != null && objetoActualIndex == i; } private void MoverObjetoAlMouse() { if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) { Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);//Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, ZonaPosible)) { objetoActual.transform.position = hit.point; objetoActual.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal); if (hit.normal == Vector3.up) { if (!objetoActual.GetComponent<ObjetoPosicionado>().Bloqueado) { print("desbloqueado"); AsignacionDeColores(false, false); PoderSoltar = true; } else { print("bloqueado por colision"); AsignacionDeColores(true, false); PoderSoltar = false; } } else { print("bloqueado por no ser vertical"); AsignacionDeColores(true, false); PoderSoltar = false; } } else { if (Physics.Raycast(ray, out hit)) { print("bloqueado por no coincidir el layer"); objetoActual.transform.position = hit.point; objetoActual.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal); AsignacionDeColores(true, false); PoderSoltar = false; } } } } private void RotacionPorScroll() { if (Input.touchCount > 1) { rotacionMouseScroll += Input.mouseScrollDelta.y; //Aca no se bien cómo reemplazarlo objetoActual.transform.Rotate(Vector3.up, rotacionMouseScroll * velocidadDeRotacion); } } private void SoltarObjeto() { if (Input.GetButtonDown("Fire1") && PoderSoltar) { AsignacionDeColores(false, true); Destroy(objetoActual.GetComponent<ObjetoPosicionado>().Newbc); objetoActual.GetComponent<ObjetoPosicionado>().TorreScript.enabled = true; objetoActual.GetComponent<ObjetoPosicionado>().Ani.enabled = true; foreach (Collider coll in objetoActual.GetComponent<ObjetoPosicionado>().Colls) { coll.enabled = true; } if(objetoActual.layer == 2) { objetoActual.layer = objetoActual.GetComponent<ObjetoPosicionado>().layersOriginales[0]; } for (int i = 0; i < objetoActual.transform.childCount; i++) { if(objetoActual.transform.GetChild(i).transform.gameObject.layer == 2) { objetoActual.transform.GetChild(i).transform.gameObject.layer = objetoActual.GetComponent<ObjetoPosicionado>().layersOriginales[i]; } } objetoActual = null; rotacionMouseScroll = 0; if (usarAudio) { if (!GetComponent<AudioSource>().isPlaying) { GetComponent<AudioSource>().PlayOneShot(DespligueSonido); } } } else { if (usarAudio) { if (Input.GetButtonDown("Fire1") && !PoderSoltar) { if (!GetComponent<AudioSource>().isPlaying) { GetComponent<AudioSource>().PlayOneShot(BlockSound); } } } } } }
  9. 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.
  10. @lightbug por lo que decis del rect tenes razón la local pos del rect de la zona "draggeable" es 0,0,0 pero por el hecho del emparentamiento solo funciona en una esquina inferior. Y lo del OnMOve no funciona porque si no me equivoco es para eventos touch. Si se e ocurre otra forma(quizás como dices sin emparentar) porfa decimela y gracias por responder tan rápido : )
  11. hola @lightbug ! gracias por responder mira traté de usar el rect.contains(el cual me viene de maravilla para lo que quiero) el tema es que no se si lo implementé bien ya que no sucede nada y creé una variable bool la cual nunca cambia. Te dejo la script a ver si me puedes ayudar : p public class Arrastrar_Inventario : MonoBehaviour, IDragHandler, IBeginDragHandler, IDropHandler , IPointerClickHandler { private Vector2 offset; public Vector2 posInicial; private bool drag; void Start() { posInicial = transform.GetChild(0).transform.position; } public void OnPointerClick (PointerEventData eventData) { RectTransform r = transform.GetComponent<RectTransform>(); if (r.rect.Contains(eventData.pressPosition)) { drag = true; } else { drag = false; } } public void OnBeginDrag(PointerEventData eventData) { offset = eventData.position - new Vector2(this.transform.position.x, this.transform.position.y); this.transform.position = eventData.position - offset; } public void OnDrag(PointerEventData eventData) { if(drag) this.transform.position = eventData.position - offset; } public void OnDrop (PointerEventData eventData) { drag = false; } }
  12. Gracias a ambos por la yuda pero tengo otra pregunta : p ¿Cómo podría hacer para que solo arrastre al objeto si clickeo en determinado espacio de este? Osea, por ejemplo solo voy a poder moverlo si hago click y arrastro desde la parte superior del objeto.
  13. Hola! Nuevamente traigo una duda esta vez una simple, creo yo. Verán tengo una imagen la cual simplemente quiero ser capaz de arrastrarla con el mouse, y si bien lo logré con OnDrag el problema es que se mueve desde lo que sería el centro de la imagen haciendo que cuando yo le de un click la imagen se "mueva" hasta que su centro coincida con la posición del mouse y recién ahí comienza el drag propiamente dicho(si bien se que yo mismo le digo que haga eso, no esncuentro la forma de hacer que se mueva desde la parte de la imagen que yo haya clickeado). Les dejo la script que tengo: public class Arrastrar_Inventario : MonoBehaviour, IDragHandler { public void OnDrag (PointerEventData eventData) { transform.position = eventData.position; } } Creo que la solución sea usar el eventData.pressPosition para obtener la posición del click y de ahí ejecutar el drag pero no encontré la forma de hacerlo. Gracias de antemano : )
  14. Muchisimas gracias a todos en especial a @francoe1 y @UnityDevelopersXD por la ayuda ya puse el código de francoe el tema está en que me tira error en el condicional de "item == null" ya que no lo toma y si lo convierto en bool pierde "efecto" me podrían ayudar con eso ultimo please? : p
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...