Duda con funcion en Unity

Z

Estoy siguiendo un tutorial de youtube y tengo una duda con la funcion OverlapCircle

using UnityEngine;
using System.Collections;

public class ControladorPersonaje : MonoBehaviour {
	
private bool enSuelo = true;
     ....
void Start () {

}

void FixedUpdate(){
	enSuelo = Physics2D.OverlapCircle (comprobadorSuelo.position,comprobadorRadio,mascaraSuelo);
}

.....
}

En la documentacion Physics2D.OverlapCircle devuelve un objeto del tipo Collider2D pero aqui se le esta asignando lo que devueve la funcion a un boolean...no lo pillo

r2d2rigo

Puede que el tutorial sea viejo y el API de Unity haya cambiado recientemente. Si no necesitas guardar la instancia del GameObject prueba usando OverlapCircleNonAlloc, que devuelve un entero con el numero de objetos intersectados: http://docs.unity3d.com/ScriptReference/Physics2D.OverlapCircleNonAlloc.html

B

#1 Te aconsejo que no uses OverlapCircle ya que desde mi punto de vista no está pensado para detectar si el controlador está tocando el suelo o no, en su lugar yo usaría Physics.Raycast o, si el controlador está basado en rigidbody, simplemente con el método OnCollisionEnter puedes detectar cuándo el jugador ha colisionado con el suelo.

Z

la cosa es que el codigo funciona

1 respuesta
13500

#4 si te funciona, porque en ese caso concreto Physics2D.OverlapCircle te devuelve null, y el booleano del UnityEngine es Nullable (osea que acepta true, false, y null)

Desde luego, hay modos mejores de detectar si un GameObject se encuentra "enSuelo". No me fiaría mucho de ese tuto.

Z

La variable Transform.localscale que es lo que hace exactamente ?a ver he visto que haciendo localscale *=-1 el personaje se giraba 180 grados pero es que con la explicación de la documentación me quedo igual dice "The scale of the transform relative to the parent.".

1 respuesta
Czhincksx

#6 Visualmente el efecto es como rotar 180º, pero lo que hace no es eso y no debes usarlo para rotar un sprite 180º.

Si el valor por defecto de la escala es un vector (1, 1, 1), al multiplicarlo por -1 se convierte en un vector (-1, -1, -1). Eso significa que estás invirtiendo el objeto en el eje X, en el eje Y, y en el eje Z.

La forma más fácil de verlo es desde el editor. Arriba a la derecha cambia los valores de Scale. Si aumentas el del eje X el sprite se hará más ancho (asumo que trabajas en 2D con sprites por el primer post), si lo disminuyes se hará más delgado, y si llega a cero desaparecerá. Con valores negativos aparecerá invertido en ese eje. Prueba también cambiando el eje Y.

1 respuesta
Z

#7 ¿No debo usarlo?es que lo vi en un tutorial en la web de unity

2 respuestas
Naith

#8 en es mismo tutorial decía que no era la mejor forma de hacerlo, sino una fácil y rápida (vamos chapucera) xD

Czhincksx

#8 no debes usarlo para rotar porque en realidad no lo estás rotando y cuando quieras realizar transformaciones posteriores puede hacer que no se comporte como esperabas.

Usuarios habituales

Tags