El rincón de Unity

tarzanete

Anda que no peta el 3ds Max... como una escopeta de feria. Rara es la semana que no se me pete... doy gracias por el guardado automático.

The-Force

#390 #388 pero con fallos te refieres a cosas que no funcionan como deberian o cosas que podrian mejorar?

Yo el blender lo uso para reparar, transformar y exportar los modelos que creo en sketchup, que para un noob como yo es mucho mas sencillo.

2 respuestas
Gabrielk

#392 Una vez se me ocurrió hacer eso mismo y acabé teniendo en Blender un modelo que tenía una complejidad demasiado alta para lo simple que era y un montón de caras mal orientadas, ¿es eso a lo que te refieres con reparar? Si no, ¿en qué formato y con qué opciones exportas en Sketchup?

1 respuesta
Selbryn

#392 Yo no lo he probado, lo que le digo es que no tiene nada que ver que tanga fallos con que sea el mejor gratuito(según él).

Yo el que he usado toda la vida es el 3D max(que es de pago) pero se encuentra muy facilmente por internet. Y como dicen por ahí incluso ese programa, que podría ser el más usado a nivel mundial junto con Maya, tiene fallos...

Acrimiens

Llevo 2 días dándole vueltas y no consigo averiguar como solucionarlo, tengo un joystick a la derecha y un touchpad en la parte de abajo a la derecha de la pantalla, necesito que cuando el touchpad se suelta aplique una fuerza, cual es el problema que "if (touch.phase == TouchPhase.Ended)" no especifica que Joystick de los dos es y lo hace ante todos se suelte el que se suelte. Como puedo filtrarlo? Un apaño bastante chano que se me ocurrio es añadir "if ( disparoTouchPad != 0 ) {" pero funciona a veces y a veces no...

#pragma strict

public var fuerzaDisparo : float = 10f;
var disparoTouchPad : Joystick;

function Start () {

}

function Update () {

if ( disparoTouchPad != 0 ) {

for (var touch : Touch in Input.touches) {
      
if (touch.phase == TouchPhase.Ended) { rigidbody.AddForce(transform.forward * fuerzaDisparo); rigidbody.useGravity = true; } } } }

Alguna sugerencia? Gracias de antebrasoo

1 respuesta
The-Force

#393 cuando exportas un modelo desde sketchup este esta lleno de vertices repetidos y caras mal orientadas. En blender importo el modelo, elimino los vertices duplicados, arreglo las caras mal orientadas , reoriento el modelo y lo escalo si es necesario.

#395 No acabo de entenderte. Yo lo que hice la unica vez que programe para pantalla tactil es hacer raycast desde el punto donde tocas y ver que objeto golpea y segun eso hacer una cosa u otra.

#397 Lo que quiero decir es que para saber que tienes pulsado y que touch esta en cada sitio puedes hacer un raycast desde el touch y ver si toca la superficie sobre la pistola o sobre el joystick, o bien filtrar en base a las coordenadas x,y del touch.

1 respuesta
Acrimiens

#396 mi cuestión no es referente a la fuerza o al raycast que se haría para el disparo, esa mecánica me funciona bien, lo que necesito es que se active en el momento en el que suelto el touchpad derecho.

#398

he sustituido todo por un mapa de grises, el touchpad en cuestión es el de la derecha, quiero que tras utilizarlo al soltar el dedo ejecute el resto del codigo, el problema que tengo es que el comando touch.ended se activa al soltar el joystick izquierdo también.

3 respuestas
Selbryn

#397 Puedes poner una captura de pantalla de lo que tienes, el touchpad ese y el Joystick ??

1 respuesta
JackSparow

#397 Con un booleano no lo solventas ya? (aunque sea un poco guarro xD).
Quizá haya una manera más limpia con la documentación de Unity vaya.


if(touchpadDerechoPulsado) frameAnteriorPulsado = true;
else{
    if(frameAnteriorPulsado) {
                frameAnteriorPulsado = false;
                //código restante.
   }
}




The-Force

El tema es saber cuando un touch esta sobre el joystick o sobre la pistola y para eso vas a necesitar hacer algo con Touch.position, ya sea un raycast o comparar coordenadas. Luego puedes guardar el Touch.fingerId para saber que touch estaba sobre el joystick o la pistola. Luego cuando un Touch acaba comparas si el fingerId es el mismo y haces lo que tengas que hacer.

Acrimiens

Gracias a todos el lunes le echare un vistazo a todo lo que me estáis comentado, y a ver si logro solucionarlo y os informo :P

1 respuesta
B

Buenas gentes, recientemente he empezado a trastear con hacer un juego para móviles que usen Android.

El tema es que en la vida me había planteado hacer esto, y me he quedado un poco :/ al intentar averiguar cómo sabemos cuándo un dedo sigue presionando la pantalla.

Es decir, sé hacer funcionar que cuando se presione un botón, pues se detecte que el dedo ha presionado X botón, pero no tengo idea de cómo representar cuándo el dedo sigue presionando.

¿Alguna idea?

2 respuestas
Potito

#402 La mejor idea q se me ocurriria en tu caso es leerme la documentacion de Input de Android, asi sin darle muchas vueltas.

3
Selbryn

#402 Intenta mirarte la doc oficial por que eso esta explicado a la perfección.

eZpit

Vista la no existencia de un XMLParser en Unity, y que el parser de .NET que recomiendan utilizar añade 1 puto mega al tamaño al juego (inaceptable para web/apps), he acabado medio-haciéndome mi propio XML parser y un script que lee TileMaps del programa Tiled.

Quizá es algo muy especifico, pero si alguien lo necesita lo puedo pasar.

1 respuesta
13500

#401 pero vamos a ver... tu utilizas un sólo archivo de código JS para toda la aplicación?

#407 a qué objeto o entidad le estas asignando el .js?

1 respuesta
Acrimiens

#406 Evidentemente no, este es solo el script que realiza un golpe de fuerza en la bala.

#406 A la propia bala, si es lo que os digo funcionar funciona, solo necesito un if que diga if (el touchpad derecho esta ended) ejecuta el codigo.

El problema es que el código que tengo me lo ejecuta tanto si esta ended el touchpad derecho como el izquierdo.

2 respuestas
13500

#407 es que ahí esta el problema. La solución no es poner un if. Yo te propongo otra cosa.

#pragma strict

public var fuerzaDisparo : float = 10f;
var disparoTouchPad : Joystick;
public var bala : GameObject

function Start () {

}

function Update () {

if ( disparoTouchPad != 0 ) {

for (var touch : Touch in Input.touches) {
      
if (touch.phase == TouchPhase.Ended) { bala.rigidbody.AddForce(transform.forward * fuerzaDisparo); bala.rigidbody.useGravity = true; } } } }

Asigna el script a cada joystick. Añade el objeto "bala" o como lo hayas llamado a cada script. De este modo, el Touch solo afectará al objeto que toques, y el rigidbody de la bala será modificado/aplicado desde el gameobject añadido

1 1 respuesta
Acrimiens

#408 he probado a ponerlo en el joystick y sigue sin funcionarme el "if (touch.phase == TouchPhase.Ended) {" se sigue cumpliendo se toque el joystick que se toque :/

1 respuesta
The-Force

input.touches "Returns list of objects representing status of all touches during last frame."

Da completamente igual donde hagas el touch, que si lo unico que miras es el estado del touch jamas vas a saber donde has tocado la pantalla, y los touch no son relativos al objeto, son a la pantalla del dispositivo, asi que da igual donde pongas el script siempre que sea en un monobehaviour.

Tienes que usar Touch.position para saber donde estas toncado, pero seguid ignorandome xD

protip:

Ray ray = Camera.main.ScreenPointToRay(touch.position);
1 1 respuesta
PiTiFiNi

Buenas, he vuelto con las pompas, gracias a la gente que me respondió anteriormente.
Me estoy centrando ahora en hacer que desaparezcan al hacer "click" y he conseguido que funcione con este codigo:

function Update() {
		if(Input.GetMouseButtonDown(0))
			Debug.Log("Pressed left click.");
		if(Input.GetMouseButtonDown(1))
			Debug.Log("Pressed right click.");
		if(Input.GetMouseButtonDown(2))
			Debug.Log("Pressed middle click.");
			 if(Input.GetMouseButton(0))
    Destroy (gameObject);
	}

Ahora bien, me han surgido más "problemas".

Al clickear, da igual donde sea, desaparece la pompa, debería ser solo al hacerlo encima.
Solucionado, sólo tenía que cambiar "function Update" por "function OnMouseDown"

Al desaparecer/estallar necesito linkear la animación del estallido.
Cuando desaparece no se generan más pompas.
Y luego a su vez, al clickear correctamente sobre una pompa se vaya rellenando una barra en la interfaz.
Estoy programándolo desde monodevelop con javascript.

2 respuestas
Potito

#411 http://docs.unity3d.com/Documentation/ScriptReference/Physics.Raycast.html

Cobre

#411 yo usaria el OnMouseUp o en la burbuja:

http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.OnMouseUp.html

13500

#409 haz caso a #410

RaycastHit hit = new RaycastHit();

       for (int i = 0; i < Input.touchCount; ++i) {
          if (Input.GetTouch(i).phase.Equals(TouchPhase.Began)) {
            // Construct a ray from the current touch coordinates
            Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);
            if (Physics.Raycast(ray, out hit)) {
               hit.transform.gameObject.SendMessage("OnMouseDown");
            }
         }
      }
2 1 respuesta
Acrimiens

#414 de momento había puesto un botón para disparar para seguir trabajando el resto de cosas ya que estamos bastante ajustados con las fechas, mañana en cuanto entre lo pruebo, muchas gracias a todos de verdad :qq:

Charlie52

#405 No te ha sido útil el Mono.Xml ? Es el que he usado para los tilemaps en OGMO.

Un saludo!

1 respuesta
eZpit

#416 Bueno no ese exactamente, pero tome como punto de partida otro que es muy parecido y le quite un par de cosas que no me interesaban.

Czhincksx

Hola, tengo una duda muy sencilla. Estoy usando una vista ortográfica con Unity 4.3 para una app 2D.

El problema es que veo todo muy pequeño en la ventana de edición, y si intento hacer zoom la cámara se va por detrás de los sprites y desaparecen. ¿Hay alguna forma de agrandarlos?

1 respuesta
The-Force

#418 con una camara ortografica para hacer zoom tienes que disminuir el Camera.orthographicSize, no vale con acercarla a la escena.

Seguramente estabas acercando la camara y los objectos estaban atravesando el Near Clip Plane.

1 respuesta
Czhincksx

#419 Ahora mismo tengo el size en 4.5 y los sprites adaptados a ese tamaño. Debería cambiarlo por otro mayor y trabajar a otra escala entonces, ¿no?

Edit: Vale sí, es eso. Muchas gracias.

Tema cerrado

Usuarios habituales