Unity Script
Unity Script
El comportamiento de los GameObjects est controlada por los componentes que estn
conectados a ellos. Aunque los componentes integrados de Unity pueden ser muy verstil,
pronto encuentra que necesita ir ms all de lo que pueden ofrecer para implementar sus
propias caractersticas de juego. Unidad le permite crear sus propios componentes
utilizandoguiones . Estas te permiten disparar eventos del juego, modificar las propiedades de
los componentes con el tiempo y responder a la entrada del usuario en cualquier forma que
desee.
Unidad admite tres lenguajes de programacin de forma nativa:
modelo de JavaScript;
Boo , un lenguaje .NET con sintaxis similar a Python.
Adems de estos, muchos otros lenguajes .NET pueden utilizarse con Unity si pueden
compilar una DLL compatible - ver esta pgina para ms detalles.
Aprender el arte de la programacin y el uso de estos lenguajes particulares est ms all del
alcance de esta introduccin.Sin embargo, hay muchos libros, tutoriales y otros recursos para
aprender a programar con Unity. Vea la seccin Aprender de nuestro sitio web para ms
detalles.
Scripts Creando
A diferencia de la mayora de los otros activos, los scripts se crean generalmente dentro de la
Unidad directamente. Puedes crear un nuevo script en el men Crear en la parte superior
izquierda del panel Proyecto o seleccionando Activos> Crear> C # Guin (o JavaScript script /
Boo) en el men principal.
El nuevo script se crear en cualquier carpeta que haya seleccionado en el panel Proyecto. El
nombre del nuevo archivo de script ser seleccionado, le pide que introduzca un nuevo
nombre.
Es una buena idea para escribir el nombre de la nueva secuencia de comandos en este punto
en lugar de editar ms tarde. El nombre que introduzca se utilizar para crear el texto inicial
dentro del archivo, como se describe a continuacin.
utilizando UnityEngine;
utilizando System.Collections;
pblica clase
MainPlayer : MonoBehaviour {
}
}
Una secuencia de comandos hace que su relacin con el funcionamiento interno de la Unidad
mediante la implementacin de una clase que deriva de la clase incorporada
llamada MonoBehaviour . Usted puede pensar en una clase como una especie de modelo
para la creacin de un nuevo tipo de componente que se puede conectar a
GameObjects. Cada vez que se conecta un componente de secuencia de comandos para un
GameObject, se crea una nueva instancia del objeto definido por el plano. El nombre de la
clase se toma del nombre que proporcion cuando se cre el archivo. El nombre de la clase y
el nombre del archivo debe ser el mismo para que el componente de secuencia de comandos
para ser conectado a un GameObject.
Las principales cosas a tener en cuenta, sin embargo, son las dos funciones definidas dentro
de la clase. La actualizacin dela funcin es el lugar para colocar el cdigo que se encargar
de la actualizacin del marco para la GameObject. Esto podra incluir el movimiento, lo que
provoc las acciones y la respuesta a la entrada del usuario, bsicamente cualquier cosa que
necesita ser manejado con el tiempo durante el juego. Para activar la funcin de actualizacin
para hacer su trabajo, a menudo es til para poder establecer las variables, lea las
preferencias y hacer conexiones con otros GameObjects antes de cualquier accin del juego
tiene lugar. El Start funcin ser llamada por la Unidad antes de que comience el juego (es
decir, antes de la funcin de actualizacin se llama por primera vez) y es un lugar ideal para
hacer cualquier inicializacin.
Nota para los programadores experimentados: puede que se sorprenda de que la
inicializacin de un objeto no se hace usando una funcin constructora. Esto se debe a la
construccin de objetos es manejado por el editor y no tiene lugar al inicio del juego como se
podra esperar. Si intenta definir un constructor para un componente de secuencia de
comandos, interfiera con el normal funcionamiento de la Unidad y puede causar mayores
problemas con el proyecto.
Un script Boo sigue aproximadamente el mismo diseo que un script C # pero UnityScript
funciona un poco diferente: -
#pragma estricta
funcin
Start
() {
la funcin
de actualizacin
() {
En este caso, las funciones de inicio y Actualizar tienen el mismo significado, pero la clase no
se declara explcitamente. La secuencia de comandos en s se supone para definir la
clase; derivar implcitamente de MonoBehaviour y tome su nombre del nombre de archivo del
activo guin.
Una vez conectado, el guin comenzar a trabajar cuando usted presiona el juego y ejecutar
el juego. Usted puede comprobar esto aadiendo el siguiente cdigo en la funcin de inicio: -
Variables
Un script funciona como cualquier otro componente en su mayor parte, pero te dars cuenta
de que el tema Inspector para el script se parece un poco al lado de los otros componentes
con sus propiedades editables. Puede permitir que los valores de la secuencia de comandos
para editar desde el Inspector utilizando variables: -
utilizando UnityEngine;
utilizando System.Collections;
pblica clase
MainPlayer : MonoBehaviour {
En C # y Boo, debe declarar una variable como pblico a verlo en el Inspector. En UnityScript,
las variables son pblicos por defecto a menos que se especifique que deberan ser privadas:
-
# pragma estricta
privado
funcin Start () {
La unidad ser realidad permitir cambiar el valor de las variables de un guin mientras que el
juego est en marcha. Esto es muy til para ver los efectos de los cambios directamente sin
tener que detener y reiniciar. Cuando termina el juego, los valores de las variables se
restablecern a lo que eran antes de pulsar Play. Esto asegura que usted es libre de modificar
la configuracin de su objeto, sin temor a hacer ningn dao permanente.
void start () {
Rigidbody rb = getComponent < Rigidbody > ();
funcin
Start
() {
Una vez que tenga una referencia a una instancia de componente, puede establecer los valores de sus
propiedades tanto como lo hara en el Inspector: -
void start () {
Rigidbody rb = getComponent < Rigidbody > ();
Una caracterstica adicional que no est disponible en el Inspector es la posibilidad de llamar a funciones
en instancias de componentes: -
void start () {
Rigidbody rb = getComponent < Rigidbody > ();
Tenga en cuenta tambin que no hay ninguna razn por qu no puede tener ms de un script
personalizado adjunto al mismo objeto. Si necesita acceder a un script desde otra, puede utilizar
getComponent como de costumbre y slo tiene que utilizar el nombre de la clase de escritura (o el
nombre del archivo) para especificar el tipo de componentes que desea.
Si intenta recuperar un componente que en realidad no se ha agregado a la GameObject entonces
getComponent devolver null; obtendr un error nula referencia en tiempo de ejecucin si se intenta
cambiar los valores en un objeto nulo.
Dado que algunos tipos de componentes se utilizan con mucha frecuencia, la Unidad ofrece un plus en
las variables de acceder a ellos en la clase MonoBehaviour, para que puedas usar cosas como: -
vaco Inicio () {
transform.position = Vector3.zero;
}
... Sin primero tener que utilizar getComponent acceder a la transformada de componentes. La lista
completa de las variables integradas de componentes se da en la pgina de referencia de la escritura
MonoBehaviour. Tenga en cuenta que como con getComponent, si el componente deseado no est
conectado al objeto a continuacin, la variable contendr un valor nulo.
pblica clase
Enemigo : MonoBehaviour {
Ahora puede arrastrar un objeto de la escena o el panel Jerarqua en esta variable para asignarlo. Las
variables de la funcin getComponent y acceso a los componentes estn disponibles para este objeto
como con cualquier otro, por lo que puede utilizar cdigo como el siguiente: -
pblica clase
Enemigo : MonoBehaviour {
void start () {
// Inicia el enemigo diez unidades detrs del personaje
del jugador.
transform.position = player.transform.position Vector3.forward * 10 f;
}
}
Adems, si declarar una variable pblica de un tipo de componente en el script, puede arrastrar cualquier
GameObject que tiene ese componente conectado en la misma. Esto acceder al componente directamente
en lugar de la propia GameObject.
Vinculacin de objetos junto con las variables es ms til cuando usted est tratando con objetos
individuales que tienen conexiones permanentes. Puede utilizar una variable de matriz para enlazar
varios objetos del mismo tipo, pero las conexiones todava debe estar hecho en el editor de Unity en
lugar de en tiempo de ejecucin. A menudo es conveniente para localizar objetos en tiempo de ejecucin
y la unidad ofrece dos maneras bsicas de hacer esto, como se describe a continuacin.
reacciona a ellos (por ejemplo, todos los puntos de ruta pueden necesitar estar disponibles para el script
bsqueda de caminos). Utilizacin de variables para vincular estos objetos es una posibilidad, pero que
har que el proceso de diseo tedioso si cada nuevo waypoint tiene que ser arrastrado a una variable en
un guin. Del mismo modo, si se elimina un waypoint, entonces es una molestia tener que quitar la
referencia variable para el objeto que falta. En casos como este, a menudo es mejor para gestionar un
conjunto de objetos, hacindolos todos hijos de un mismo objeto padre. Los objetos secundarios se
pueden utilizar retreived del padre Transformar componentes (ya que todos los GameObjects tienen
implcito un Transform): -
pblica clase
WaypointManager : MonoBehaviour {
void start () {
waypoints = new Transformar [transform.childCount];
int i = 0 ;
transform.Find ("Gun");
Esto puede ser til cuando un objeto tiene un nio que puede ser aadido y eliminado durante el
juego. Un arma que puede ser recogido y dej es un buen ejemplo de esto.
Jugador GameObject;
vaco Inicio () {
jugador = GameObject.Find ( "MainHeroCharacter" );
}
Un objeto o una coleccin de objetos tambin se pueden localizar por su etiqueta utilizando
los GameObject.FindWithTag yGameObject.FindGameObjectsWithTag funciones: -
Jugador GameObject;
GameObject [] enemigos;
vaco Inicio () {
Funciones de eventos
Una secuencia de comandos en la Unidad no es como la idea tradicional de un programa en el que el
cdigo se ejecuta continuamente en un bucle hasta que complete su tarea. En lugar de ello, la Unidad
pasa el control a un guin intermitente llamando a ciertas funciones que se declaran dentro de ella. Una
vez que una funcin ha finalizado la ejecucin, el control pasa de nuevo a la Unidad. Estas funciones se
conocen como funciones de eventos, ya que se activan por la Unidad en respuesta a eventos que ocurren
durante el juego. Unidad utiliza un esquema de nombres para identificar qu funciona para llamar a un
evento en particular. Por ejemplo, usted ya habr visto la funcin Update (llamada antes de que ocurra
una actualizacin del marco) y la funcin de inicio (llamado justo antes de la primera actualizacin del
marco del objeto). Muchas ms funciones de eventos estn disponibles en la Unidad; La lista completa
se puede encontrar en la pgina de referencia de la escritura para la clase MonoBehaviour junto con los
detalles de su uso. Los siguientes son algunos de los eventos ms comunes e importantes.
void Update () {
float distancia = velocidad * Time.deltaTime *
Input.GetAxis ( "Horizontal" );
transform.Translate (Vector3.right * velocidad);
}
El motor de fsica tambin actualiza en pasos de tiempo discretos en una manera similar a la prestacin
marco. Una funcin evento separado llamado FixedUpdate se llama justo antes de cada actualizacin de
la fsica. Dado que los cambios fsicos y los cambios de marco no ocurren con la misma frecuencia,
obtendr resultados ms precisos a partir de cdigo de la fsica si se coloca en la funcin FixedUpdate
lugar de actualizacin.
vaco FixedUpdate () {
Fuerza Vector3 = transform.forward * driveForce *
Input.GetAxis ( "vertical" );
rigidbody.AddForce (fuerza);
}
Tambin es til a veces para poder realizar cambios adicionales en un punto despus de la actualizacin
y funciones FixedUpdate haber sido llamado para todos los objetos de la escena y despus de haberse
calculado todas las animaciones.Un ejemplo es cuando una cmara debe permanecer entrenado en un
objeto de destino; el ajuste de la orientacin de la cmara debe ser hecha despus de que el objeto de
destino se ha movido. Otro ejemplo es cuando el cdigo de secuencia de comandos debe anular el efecto
de una animacin (por ejemplo, para que la cabeza del personaje mira hacia un objeto de destino en la
escena). El LateUpdate funcin se puede utilizar para este tipo de situaciones.
vaco LateUpdate () {
Camera.main.transform.LookAt (target.transform);
}
Inicializacin Eventos
A menudo es til poder llamar a cdigo de inicializacin antes de las actualizaciones que se producen
durante el juego. ElStart funcin se llama antes de que el primer fotograma o actualizacin de la fsica en
un objeto. El Awake funcin se llama para cada objeto en la escena en el momento cuando se carga la
escena. Tenga en cuenta que aunque las funciones de inicio y Awake los diversos objetos 'son llamados
en orden arbitrario, toda la Awakes habr terminado antes de que se llama el primer inicio. Esto significa
que el cdigo en una funcin Start puede hacer uso de otras inicializaciones realizadas previamente en la
fase Awake.
Eventos GUI
Unidad cuenta con un sistema para la prestacin de controles GUI sobre la accin principal en la escena
y responder a los clics en estos controles. Este cdigo se maneja de manera algo diferente a la
actualizacin de cuadro normal y por lo que debe ser colocado en el Ongui funcin, que se llamar
peridicamente.
vaco Ongui () {
GUI.Label (labelRect, "Game Over" );
}
Tambin puede detectar eventos de ratn que se producen durante un GameObject tal como aparece en la
escena. Esto se puede utilizar para armas destinada a una audiencia o mostrar informacin sobre el
carcter actualmente bajo el puntero del ratn. Un conjunto de funciones de eventos OnMouseXXX (por
ejemplo, OnMouseOver , OnMouseDown ) est disponible para permitir un script para reaccionar a las
acciones del usuario con el ratn. Por ejemplo, si se pulsa el botn del ratn mientras el puntero est
sobre un objeto en particular, entonces una funcin OnMouseDown en el guin de ese objeto ser
llamado si es que existe.
Eventos Fsica
El motor de fsica informar colisiones contra un objeto llamando a funciones de eventos en el guin de
ese objeto. LosOnCollisionEnter , OnCollisionStay y OnCollisionExit funciones sern llamados como se
hace el contacto, celebrada y roto. Los
correspondientes OnTriggerEnter , OnTriggerStay y OnTriggerExit funciones sern llamados cuando
colisionador del objeto se configura como un disparador (es decir, un colisionador que simplemente
detecta cuando algo entra en ella en lugar de reaccionar fsicamente). Estas funciones pueden ser
llamados varias veces en sucesin si se detecta ms de un contacto durante la actualizacin de la fsica y
por lo que un parmetro se pasa a la funcin de dar detalles de la colisin (posicin, la identidad del
objeto entrante, etc).
void Start() {
for (int i = 0; i < 5; i++) {
Instantiate(enemy);
}
}
Observe que el objeto del cual la copia es realizada no requiere estar presente en la escena.
Es ms comn usar un prefab arrastrado a una variable pblica desde el Project panel (panel
del Proyecto) en el editor. Tambin, crear instancias de un GameObject copiar todos los
Componentes presentes en el original.
Tambin hay una funcin Destroy que permite destruir un objeto despus que la actualizacin
de frame ha terminado u opcionalmente despus de un retardo de tiempo corto:-
Observe que la funcin Destroy puede destruir componentes individuales sin afectar el
GameObject en s. Un error comn es escribir algo como:-
Destroy(this);
lo cual realmente solo destruir el componente del script que le llama en vez de destruir el
GameObject al cual el script est atado.
Coroutines
Cuando usted llama a una funcin, esta se ejecuta en su totalidad antes de retornar. Esto
significa efectivamente que cualquier accin tomando lugar en una funcin debe suceder en
una sola actualizacin de frame (cuadro); un llamado a una funcin no puede ser usado para
contener una animacin procedimental o una secuencia de eventos en el tiempo. Como un
ejemplo, considere la tarea de reducir gradualmente el valor alfa (alpha) de un objeto
(opacidad) hasta que se convierta completamente invisible.
void Fade() {
for (float f = 1f; f >= 0; f -= 0.1f) {
Color c = renderer.material.color;
c.a = f;
renderer.material.color = c;
}
}
Tal como est, la funcin Fade (Desvanecer) no tendr el efecto que usted espera. Para que
el desvanecimiento sea visible, el alfa debe ser reducido sobre una secuencia de frames
(cuadros) para mostrar los valores intermedios siendo renderizados. Sin embargo, la funcin
se ejecutar en su totalidad en una sola actualizacin de cuadro. Los valores intermedios
nunca se vern y el objeto desaparecer instantneamente.
Es posible manejar situaciones como estas agregando cdigo a la funcin Update que ejecuta
el desvanecer en una base cuadro-a-cuadro (frame-by-frame). Sin embargo, es usualmente
mas conveniente usar una coroutine (corrutina) para este tipo de tarea.
Una coroutine (corrutina) es como una funcin que tiene la habilidad de pausar su ejecucin y
retornar el control a Unity para luego continuar donde dej en el siguiente frame. En C#, una
coroutine es declarada as:-
IEnumerator Fade() {
for (float f = 1f; f >= 0; f -= 0.1f) {
Color c = renderer.material.color;
c.a = f;
renderer.material.color = c;
yield return null;
}
}
Es es esencialmente una funcin declarada con un tipo de retorno de IEnumerator y con una
instruccin de retorno yield (yield return) incluida en algn lugar de su cuerpo. La linea de
retorno yield es el punto en el cual la ejecucin se pausar y reanudar en el siguiente frame
(cuadro). Para establecer una coroutine en ejecucin, usted necesita usar la
funcinStartCoroutine
void Update() {
if (Input.GetKeyDown("f")) {
StartCoroutine("Fade");
}
}
En UnityScript, las cosas son un poco mas simples. Cualquier funcin que incluya una
sentencia yield se entiende que es una coroutine y el tipo de retorno IEnumerator no requiere
ser declarado explicitamente:-
function Fade() {
for (var f = 1.0; f >= 0; f -= 0.1) {
var c = renderer.material.color;
c.a = f;
renderer.material.color = c;
yield;
}
}
Adems, una coroutine puede ser iniciada en UnityScript llamandola como si fuese una
funcin normal:-
function Update() {
if (Input.GetKeyDown("f")) {
Fade();
}
}
Notar que el contador en el ciclo en la funcin Fade mantiene su valor correcto sobre el
tiempo de vida de la coroutine. De hecho, cualquier variable o parametro ser preservado
correctamente entre los yields.
Por defecto, una coroutine es reanudada en el frame despus de que haga yield, pero tambin
es posible introducir un tiempo de retardo usando WaitForSeconds:-
IEnumerator Fade() {
for (float f = 1f; f >= 0; f -= 0.1f) {
Color c = renderer.material.color;
c.a = f;
renderer.material.color = c;
en UnityScript
function Fade() {
for (var f = 1.0; f >= 0; f -= 0.1) {
var c = renderer.material.color;
c.a = f;
renderer.material.color = c;
yield WaitForSeconds(0.1);
}
}
Esto puede ser usado como una forma de propagar un efecto sobre un periodo de tiempo pero
tambin es una til optimizacin. Muchas tareas en un juego necesitan ser llevadas a cabo
peridicamente y la forma mas obvia de hacer esto es incluirles en la funcin Update. Sin
embargo, esta funcin usualmente ser llamada muchas veces por segundo. Cuando una
tarea no requiere ser repetida tan frecuentemente, le puede poner en una coroutine para
obtener una actualizacin regularmente pero no en cada frame. Un ejemplo de esto puede ser
una alarma que alerta al usuario si un enemigo est cerca. El cdigo podra verse algo como
esto:-
function ProximityCheck() {
for (int i = 0; i < enemies.Length; i++) {
if (Vector3.Distance(transform.position,
enemies[i].transform.position) < dangerDistance) {
return true;
}
}
return false;
}
Si hay muchos enemigos, entonces llamar esta funcin cada cuadro podra introducir una
sobrecarga significativa. Sin embargo, podra usar una coroutine para llamarle cada dcima de
segundo:-
IEnumerator DoCheck() {
for(;;) {
ProximityCheck;
yield return new WaitForSeconds(.1f);
}
}
Esto reducir en gran cantidad el nmero de comprobaciones llevados a cabo sin ningn
efecto notable en la experiencia de juego.
Namespaces
Dado que los proyectos se hacen ms grandes y el nmero de secuencias de comandos
aumenta, la probabilidad de tener enfrentamientos entre los nombres de clases de la escritura
se hace cada vez mayor. Esto es especialmente cierto cuando varios programadores estn
trabajando en diferentes aspectos del juego por separado y finalmente combinar sus
esfuerzos en un proyecto. Por ejemplo, un programador puede escribir el cdigo para
controlar al personaje principal del reproductor, mientras que otro escribe el cdigo
equivalente para el enemigo. Ambos programadores pueden optar por llamar a su clase
principal de la escritura del controlador , pero esto causar un choque cuando se combinan
sus proyectos.
En cierta medida, este problema se puede evitar mediante la adopcin de una convencin de
nombres o por cambiar el nombre de las clases cada vez que se descubre un choque (por
ejemplo, las clases anteriores se podra dar nombres
comoPlayerController y EnemyController ). Sin embargo, esto es problemtico cuando hay
varias clases con chocando nombres o cuando las variables se declaran utilizando esos
nombres - cada mencin del nombre de la clase de edad deben ser sustituidos por el cdigo
para compilar.
El lenguaje C # ofrece una caracterstica llamada espacios de nombres que resuelve este
problema de una manera robusta.Un espacio de nombres es simplemente una coleccin de
clases que se refiere al uso de un prefijo elegido en el nombre de la clase. En el siguiente
ejemplo, las clases Controller1 y Controller2 son miembros de un espacio de nombres
llamado Enemigo : -
namespace Enemy {
public class Controller1 : MonoBehaviour {
...
}
public class Controller2 : MonoBehaviour {
...
}
}
En el cdigo, estas clases se denominan Enemy.Controller1 y Enemy.Controller2 ,
respectivamente. Esto es mejor que cambiar el nombre de las clases en la medida en la
declaracin de espacio de nombres se puede corchetes alrededor de declaraciones de clases
existentes (es decir, no es necesario cambiar los nombres de todas las clases en forma
individual).Adems, puede utilizar varias secciones de espacios de nombres entre corchetes
alrededor de las clases donde quiera que ocurran, incluso si esas clases estn en diferentes
archivos de origen.
Usted puede evitar tener que escribir el prefijo de espacio de nombres en varias ocasiones por
la adicin de un uso de la directiva en la parte superior del archivo.
using Enemy;
Esta lnea indica que cuando los nombres de clase Controller1 y Controller2 se encuentran,
deben tomarse en el sentido deEnemy.Controller1 y Enemy.Controller2 , respectivamente. Si
el guin tambin tiene que hacer referencia a las clases con el mismo nombre de un espacio
de nombres diferentes (uno llamado jugador , dicen), el prefijo todava se puede utilizar. Si dos
espacios de nombres que contienen nombres de las clases en pugna se importan con el uso
de directivas al mismo tiempo, el compilador informar de un error.
Atributos
Attributes son marcadores que pueden ser colocados sobre una clase, propiedad o funcin en
un script indicando un comportamiento especial. Por ejemplo, el
atributo HideInInspector puede ser agregado sobre una declaracin de propiedad para
prevenir que esta propiedad sea mostrada en el inspector, incluso si es pblica. En JavaScript,
el nombre de un atributo comienza con un signo @, mientras que en C# y Boo, est
contenido entre corchetes:-
// JS
@HideInInspector
var strength: float;
// C#
[HideInInspector]
public float strength;
Unity provee un nmero de atributos que son listados en la referencia de script (seleccione la
seccin Editor or Runtime Attributes (Editor Atributos en tiempo de ejecucin) desde el men
emergente en la barra lateral). Hay tambin atributos definidos en las libreras .NET que
pueden en ocasiones ser tiles en el cdigo de Unity.
Nota: el atributo ThreadStatic definido en la librera .NET no debe ser usado ya que ocasiona
un fallo del software (crash) si es agregado a un script de Unity.
Editor
Awake: Esta funcin siempre se llama antes de cualquier funcin Start y tambin justo
despus se instancia una casa prefabricada. (Si un GameObject estar activa durante la
puesta en marcha despierto No se conoce hasta que se hace activa, o una funcin en
Start: Start se llama antes de la primera actualizacin del marco slo si est habilitada
la instancia guin.
Para los objetos aadidos a la escena, la funcin Start se pidi a todos los scripts antes de
Update, etc son llamados para ninguno de ellos. Naturalmente, esto no se puede hacer
cumplir cuando un objeto se instancia durante el juego.
Actualizar Orden
Cuando usted est manteniendo un seguimiento de la lgica del juego y de las interacciones,
las animaciones, posiciones de cmara, etc., hay algunos eventos diferentes que puede
utilizar. El patrn comn es llevar a cabo la mayora de las tareas dentro de la actualizacin
de la funcin, pero tambin hay otras funciones que puede utilizar.
Rendering
lleva a cabo.
OnBecameVisible / OnBecameInvisible: Se le llama cuando un objeto se hace
este punto.
OnPostRender: Llamado despus de un cmara termine de dibujar la escena.
Corrutinas
Actualizaciones co-rutina normales se ejecutan despus de la funcin de actualizacin
devoluciones. Una co-rutina es una funcin que puede suspender su ejecucin (rendimiento)
hasta que termine el YieldInstruction dadas. Los diferentes usos de corrutinas:
despus de todas las funciones de actualizacin han sido llamados para el marco
rendimiento WaitForFixedUpdate Continuar despus de todo FixedUpdate se ha
Cuando Dejar
Estas funciones llaman a ellas todos los objetos activos en la escena,:
OnApplicationQuit: Esta funcin se llama en todos los objetos del juego antes de
salir de la aplicacin. En el editor se llama cuando el usuario deja de modo de
reproduccin. En el reproductor web que se llama cuando la vista web est cerrado.
OnDisable: Esta funcin se llama cuando el comportamiento se vuelve discapacitado
o inactivo.
nicamente puede ser accedido en la medida que todava hayan variables por referencia que
puedan localizarlo. Si todas las referencias a un bloque de memoria se han ido (es decir, las
variables por referencia han sido reasignadas, o hay variables locales que estn fuera de
alcance) entonces la memoria que ocupan puede ser reasignada en forma segura.
Para determinar cules bloques de la pila no estn ms en uso, el gestor de memoria busca a
travs de todas las variables por referencia activas y marca los bloques que stas estn
sealando como bloques vivos. Al final de la bsqueda, cualquier espacio entre los bloques
vivos es considerado como vaco por el gestor de memoria y puede ser usado para
posteriores asignaciones. Por motivos obvios, el proceso de localizar y liberar memoria no
usada es conocido como recoleccin de basura (o abreviadamente, GC por Garbage
Collection).
Optimizacin
La recoleccin de basura es automtica e invisible para el programador; pero detrs de
escena, el proceso de recoleccin requiere en realidad de un tiempo de CPU significativo.
Cuando se usa correctamente, la gestin automtica de memoria por lo general igualar o
superar a la asignacin manual en trminos de rendimiento global. Sin embargo, es
importante que el programador evite errores que accionen el recolector ms frecuentemente
de lo que es necesario, a fin de evitar interrupciones en la ejecucin.
Hay algunos algoritmos famosos que son verdaderas pesadillas para el recolector, aunque
parezcan inocentes a primera vista. Un ejemplo clsico es la concatenacin repetida de
cadenas:-
return line;
}
El detalle clave aqu es que los nuevos pedazos no estn siendo agregados uno por uno a la
cadena en el mismo sitio en que est. Lo que realmente ocurre es que cada vez que se repite
el ciclo, el contenido previo de la variable line se marca como muerto, y una nueva cadena
completa es asignada para que contenga el pedazo original ms la nueva parte al final. Dado
que la cadena se vuelve ms larga a medida que el valor de i se incrementa, la suma del
espacio en la pila (tambin conocido como espacio de almacenamiento dinmico) que est
siendo consumido tambin se incrementa, por lo que fcilmente son empleados cientos de
bytes de espacio libre en la pila cada vez que esta funcin es invocada. Si necesitas
concatenar juntas muchas cadenas, una opcin mucho mejor es la
clase System.Text.StringBuilder de la librera de Mono.
Sin embargo, incluso la concatenacin repetida no causar muchos problemas si no es
llamada con frecuencia, y en Unity esto usualmente implica la actualizacin de frames. Algo
como:-
function Update() {
asignar nuevas cadenas cada vez que Update sea invocado, y generar una filtracin
constante de basura nueva. Gran parte de esto puede ser evitado actualizando el texto slo
cuando el puntaje cambie:-
function Update() {
if (score != oldScore) {
scoreText = "Score: " + score.ToString();
scoreBoard.text = scoreText;
oldScore = score;
}
}
Otro problema potencial ocurre cuando una funcin devuelva un valor de array:-
return result;
}
Este tipo de funcin es muy elegante y conveniente cuando se crea un nuevo array que es
ocupado con valores. No obstante, si es llamado repetidamente entonces va a ser asignado
un nuevo espacio en la memoria en cada ocasin. Dado que los arrays pueden ser muy
grandes, el espacio libre en la pila puede quedar utilizado rpidamente, resultando en
frecuentes recolecciones de basura. Una forma de evitar este problema es hacer uso del
hecho que un array es un tipo de referencia. Un array pasado a una funcin en forma de un
parmetro puede ser modificado dentro de esta funcin, y el resultado permanecer despus
que la funcin retorne y concluya. Una funcin como la de arriba con frecuencia puede ser
reemplazado con algo como:-
Lo que esto hace es slo reemplazar el contenido existente del array con valores nuevos.
Aunque esto requiere que la asignacin inicial del array sea hecho en el cdigo que invoca a
la funcin (que no pareciera ser tan elegante), esta funcin no generar basura nueva cuando
sea ejecutada.
if (Time.frameCount % 30 == 0)
{
System.GC.Collect]();
}
Sin embargo, debes usar esta tcnica con precaucin y verificar las estadsticas del profiler
para asegurarte que realmente se est reduciendo el tiempo de recoleccin para tu juego.
function Start() {
var tmp = new System.Object[1024];
// release reference
tmp = null;
}
Una pila suficientemente grande no deber quedar completamente llena al estar realizando
una recoleccin durante las pausas en el ritmo del juego. Cuando una pausa ocurre, puedes
solicitar una recoleccin de forma explcita:-
System.GC.Collect();
Una vez ms, debes tener cuidado al usar esta estrategia, y pon atencin a las estadsticas
del profiles en lugar de slo asumir que est teniendo el efecto deseado.
Ms informacin
La gestin de memoria es un tema sutil y complejo al cual se le ha dedicado una gran
cantidad de esfuerzo acadmico. Si ests interesado en aprender ms sobre esto, la
pgina memorymanagement.org es un excelente recurso que agrupa muchas publicaciones y
artculos en lnea. Ms informacin sobre pooling de objetos puede ser encontrada en esta
pgina de Wikipedia y tambin en Sourcemaking.com.
Plataforma Define
La plataforma define que la Unidad apoya para sus guiones son:
Propiedad:
Funcin:
UNITY_EDITOR
UNITY_EDITOR_WIN
UNITY_EDITOR_OSX
UNITY_STANDALONE_OSX
UNITY_DASHBOARD_WIDGE
UNITY_STANDALONE_WIN
UNITY_STANDALONE_LINUX
UNITY_STANDALONE
Propiedad:
Funcin:
UNITY_WEBPLAYER
UNITY_WII
UNITY_IPHONE
UNITY_ANDROID
UNITY_PS3
UNITY_XBOX360
UNITY_FLASH
UNITY_BLACKBERRY
UNITY_WP8
UNITY_METRO
UNITY_WINRT
Tambin usted puede compilar el cdigo de forma selectiva en funcin de la versin del motor
que se est trabajando. Actualmente los tipos soportados los son:
UNITY_2_6
UNITY_2_6_1
UNITY_3_0
UNITY_3_0_0
UNITY_3_1
UNITY_3_2
UNITY_3_3
UNITY_3_4
UNITY_3_5
UNITY_4_0
UNITY_4_0_1
UNITY_4_1
UNITY_4_2
UNITY_4_3
UNITY_4_5
Nota: Para las versiones 2.6.0 No hay plataforma define ya que esta caracterstica se
introdujo por primera vez en esa versin.
Const
ruir ventana Configuracin con el WebPlayer Seleccionado como Plataforma de
destino.
// JS
function Awake() {
#if UNITY_EDITOR
Debug.Log("Unity Editor");
#endif
#if UNITY_IPHONE
Debug.Log("Iphone");
#endif
#if UNITY_STANDALONE_OSX
Debug.Log("Stand Alone OSX");
#endif
#if UNITY_STANDALONE_WIN
Debug.Log("Stand Alone Windows");
#endif
}
// C#
using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
Debug.Log("Unity Editor");
#endif
#if UNITY_IPHONE
Debug.Log("Iphone");
#endif
#if UNITY_STANDALONE_OSX
Debug.Log("Stand Alone OSX");
#endif
#if UNITY_STANDALONE_WIN
Debug.Log("Stand Alone Windows");
#endif
}
}
// Boo
import UnityEngine
ifdef UNITY_IPHONE:
Debug.Log("IPhone")
ifdef UNITY_STANDALONE_OSX:
Debug.Log("Stand Alone OSX")
#if UNITY_EDITOR
Debug.Log("Unity Editor");
#elif UNITY_IPHONE
Debug.Log("Unity iPhone");
#else
Debug.Log("Any other platform");
#endif
Aqu, puede introducir los nombres de los smbolos que desea definir para que plataforma en
particular, separados por punto y coma. Estos smbolos se pueden utilizar como las
condiciones para #if directivas iguales a las incorporadas.
Puede definir sus propias directivas de preprocesador para controlar qu cdigo se incluye al
compilar. Para ello se debe agregar un archivo de texto con las directrices adicionales para la
"Activos /" carpeta. El nombre del archivo depende del idioma que est utilizando, y la
extensin es .rsp:
C#
C # - Scripts Editor
UnityScript
Abucheo
Funciones genricas
funcin
Estos se conocen como funciones genricas. La importancia que tienen para scripting es que
se llega a especificar los tipos de parmetros y / o el tipo de retorno cuando se llama a la
funcin. En JavaScript, esto se puede utilizar para moverse por las limitaciones de tipado
dinmico: -
Cualquier funcin que tiene una variante genrica que aparece en su pgina de referencia
guin permitir esta sintaxis llamado especial.
Serializacin Guin
La serializacin de "cosas" es la esencia misma de la Unidad. Muchos de nuestros rasgos
conforman ontop del sistema de serializacin:
textura) mantenemos esa referencia como es, si est apuntando a algo "interno" (como un
GameObject nio), que parcheamos la referencia a la copia correspondiente).
Recarga caliente de cdigo de editor. Cuando se cambia un script editor, que serializar
todas las ventanas (que se derivan deUnityEngine.Object !). entonces nos destruimos todas
las ventanas. descargamos el viejo cdigo C #, cargamos el nuevo cdigo C #, recreamos las
ventanas, y luego nos deserializar los flujos de datos de las ventanas de nuevo en las nuevas
ventanas.
El sistema de serializacin est escrito en C ++. Lo usamos para todos nuestros tipos de
objetos internos. (Texturas, AnimationClip, cmara, etc). La serializacin ocurre
al UnityEngine.Object nivel. Cada UnityEngine.Object siempre se serializa como un
todo. Pueden contener referencias a otras UnityEngine.Objects , y esas referencias
obtener serializado correctamente.
Ahora usted dira que nada de esto muy mucho que las preocupaciones, no eres ms que feliz
de que funciona y quieren seguir con realidad la creacin de algn contenido.
En caso de que se referir a usted es que usamos esta misma serializador para
serializar MonoBehaviour componentes, que estn respaldados por los scripts. Debido a los
requisitos de rendimiento muy alto que el serializador tiene, no en todos los casos se
comportan exactamente igual que lo ac # desarrollador podra esperar de un serializador. En
esta parte de la documentacin que vamos a describir cmo funciona el serializador, y algunas
de las mejores prcticas sobre cmo hacer mejor uso de ella.
no ser esttica
no ser const
Cules son esas situaciones en las que el serializador se comporta de manera diferente
de lo que yo esperaba?
[Serializable]
class Trouble
{
public Trouble t1;
public Trouble t2;
public Trouble t3;
}
No sera extrao esperar 1 asignacin. La del objeto de prueba. Tampoco sera extrao
esperar 2 asignaciones. Uno para el objeto de la prueba, una para un objeto Trouble. La
respuesta correcta es 729. El serializador no admite nulos. Si se serializa un objeto y un
campo es nulo, slo una instancia de un nuevo objeto de ese tipo, y que
serializar. Obviamente, esto podra conducir a un ciclo infinito, as que tenemos un lmite de
profundidad relativamente mgico de 7 niveles. En ese momento dejamos de serializacin de
campos que tienen tipos de encargo clases / estructuras y las listas y matrices.
Dado que muchos de nuestros subsistemas construyen en la parte superior del sistema de
serializacin, esta inesperadamente grande serializationStream para el monobehaviour prueba
har que todos estos subsistemas para llevar a cabo ms lentamente de lo necesario. Cuando
investigamos los problemas de rendimiento en proyectos de clientes, casi siempre nos
encontramos este problema. Hemos aadido una advertencia para esta situacin en la Unidad
4.5.
using UnityEngine;
using System.Collections.Generic;
using System;
[Serializable]
public class Node
{
public string interestingValue = "value";
void OnGUI()
{
Display (root);
}
GUILayout.BeginHorizontal ();
GUILayout.Space (20);
GUILayout.BeginVertical ();
GUILayout.EndVertical ();
GUILayout.EndHorizontal ();
}
}
using UnityEngine;
using System.Collections.Generic;
using System;
void AddNodeToSerializedNodes(Node n)
{
var serializedNode = new SerializableNode () {
interestingValue = n.interestingValue,
childCount = n.children.Count,
indexOfFirstChild = serializedNodes.Count+1
};
serializedNodes.Add (serializedNode);
foreach (var child in n.children)
AddNodeToSerializedNodes (child);
}
values.
if (serializedNodes.Count > 0)
root = ReadNodeFromSerializedNodes (0);
else
root = new Node ();
}
children.Add(ReadNodeFromSerializedNodes(serializedNode.indexOfF
irstChild + i));
void OnGUI()
{
Display (root);
}
node.interestingValue =
GUILayout.TextField(node.interestingValue,
GUILayout.Width(200));
GUILayout.BeginHorizontal ();
GUILayout.Space (20);
GUILayout.BeginVertical ();
GUILayout.EndVertical ();
GUILayout.EndHorizontal ();
}
}
embargo a las transformaciones de los datos necesarios pueden hacer llegar sus datos a
partir de un formato no-unidad serializador-amigable a una unidad-serializador-friendlyformato.
UnityEvents
UnityEvents son una forma de permitir devolucin de llamada impulsada por los usuarios que
se mantuvo desde el tiempo de edicin de tiempo de ejecucin sin necesidad de
programacin adicional y la configuracin de la escritura.
UnityEvents son tiles para una serie de cosas:
Sistemas de desacople
Callbacks Persistentes
Para configurar una devolucin de llamada en el editor hay algunos pasos a seguir:
1.
Seleccione el icono + para aadir una ranura para una devolucin de llamada
2.
3.
4.
Al configurar un UnityEvent en el inspector de que hay dos tipos de llamadas a funciones que
son compatibles:
Esttico
Dinmica
devoluciones de llamada y slo se muestran las llamadas dinmicas que son vlidos para el
UnityEvent.
UnityEvents genricos
Por defecto, un UnityEvent en un Monobehaviour une dinmicamente a una funcin void. Esto
no tiene por qu ser el caso como invocacin dinmica de UnityEvents soporta la unin a
funciones con hasta 4 argumentos. Para ello es necesario definir una clase personalizada
UnityEvent que soporta mltiples argumentos. Esto es bastante fcil de hacer:
[Serializable]
pblica clase
Mediante la adicin de una instancia de esta clase a su vez de la base UnityEvent que
permitir la devolucin de llamada para unirse de forma dinmica a las funciones de cadena.
Esto puede ser invocada por llamar a la funcin de invocacin con una 'cadena' como
argumento.
UnityEvents pueden definirse con hasta 4 argumentos en su definicin genrica.
Herramientas de Scripting
Esta seccin cubre las herramientas en el Editor de Unity o proporcionadas con Unity que le
ayudarn a desarrollar sus scripts.
Consola
Haciendo doble click en un error en la barra de estado o eligiendo Window->Console se
mostrar la Console.
Consola
en el editor.
La Consola muestra mensajes, advertencias, errores o salidas de depuracin del juego.
Puedes definir el envo de tus propios mensajes a la consola
usando Debug.Log(), Debug.LogWarning, o Debug.LogError(). Puedes hacer doble click en
cualquier mensaje para ir al script que est causando el mensaje. Adems de esto tambin
tienes varias opciones en la barra de herramientas de la consola.
Los controles
de la barra de herramientas en la Consola permiten filtrar las salidas de tu depuracin.
Presionando Clear se borrarn todos los mensajes que actualmente estn en la Consola.
Cuando la opcin Collapse est habilitada, los mensajes idnticos solo se mostrarn una
vez.
Cuando la opcin Clear on play est habilitada, todos los mensajes sern removidos de la
consola cada vez que entres en el modo de juego.
Cuando la opcin Error Pause est habilitada, Debug.LogError() causar una pausa en el
juego, pero Debug.Log() no la causar.
Presionando Open Player Log abrir el Player Log en un editor de texto (o usando la
aplicacin de Consola en Mac si est establecida como aplicacin por defecto para archivos .log).
Presionando Open Editor Log abrir el Editor Log en un editor de texto (o usando la
aplicacin de Consola en Mac si est establecida como aplicacin por defecto para archivos .log).
MonoDevelop
MonoDevelop es el entorno de desarrollo integrado (IDE) que se suministra con la unidad. Un
IDE combina el funcionamiento familiar de un editor de texto con caractersticas adicionales
para la depuracin y otras tareas de gestin de proyectos. El editor de texto no se cubrir
aqu, ya que es bastante intuitivo, pero la integracin del editor y depurador con Unity se
describen a continuacin.
Configuracin de MonoDevelop
MonoDevelop se instala por defecto con Unity, aunque existe la opcin de excluirla de la
instalacin en Windows. Debe comprobar que MonoDevelop se establece como el editor de
script externo en el Preferencias (men: Unity> Preferencias y seleccione el panel
Herramientas externa). Con esta opcin activada, Unidad lanzar MonoDevelop y utilizarlo
como el editor por defecto para todos los archivos de script.
Habilitar la depuracin en el
WebPlayer
Justo antes de comenzar una sesin de depuracin, seleccione Ejecutar> Asociar al proceso
en el men en MonoDevelop y luego seleccione la aplicacin Unity de la lista de procesos que
aparece. Con estos pasos completados, ya est listo para ser la depuracin de secuencias de
comandos de Unity.
estndar. Sin embargo, tambin hay un gris barra de punto de interrupcin a la izquierda del
panel editor. Al hacer clic en esta barra se sumar el llamado punto de interrupcin marcador
junto a la lnea de cdigo.
Brea
kpoint que se aade al cdigo en la lnea 16
Aadiendo un punto de ruptura a una lnea instruye a la Unidad para detener la ejecucin del
script justo antes de que llegue esa lnea durante el modo de reproduccin. Cuando el script
se "congela" como esto, puede utilizar el depurador para determinar exactamente lo que el
guin est haciendo.
La
ejecucin flecha indica una pausa en el punto de ruptura
Informacin sobre el estado de ejecucin se muestra en las pestaas en la parte inferior de la
ventana MonoDevelop cuando la ejecucin se detuvo en un punto de interrupcin. Tal vez el
ms importante de ellos es el lugareos ficha.
Tab
mostrando valores de las variables
Esto muestra los valores de las variables locales en la funcin que se est ejecutando
actualmente. (Una variable pseudo-local llamado "esto" est disponible automticamente en
todas las funciones sin ser definido explcitamente, sino que es una referencia a la instancia
del script actual y lo que todas las variables definidas en el script se puede acceder a travs
de "esto".) Puede utilizar puntos de corte en combinacin con el lugareosficha para obtener
un efecto similar a agregar impresin declaraciones de su cdigo - se puede interrogar a los
valores de las variables en cualquier momento que desee. Sin embargo, tambin puede editar
los valores de las variables en el lugareos ficha. Esto puede ser til cuando usted encuentra
una variable mal configurado y que le gustara ver si el problema desaparece cuando el valor
se establece como debe ser.
Una caracterstica til adicional de MonoDevelop es ejecucin paso a paso . Cuando la
ejecucin se detuvo en un punto de interrupcin, una barra de herramientas de depuracin
estar disponible en la parte superior de la ventana MonoDevelop: -
Profiler (Pro)
La Unidad Profiler ayuda a optimizar su juego. En ella se informa de cunto tiempo se dedica
en las distintas reas de su juego. Por ejemplo, puede reportar el porcentaje de tiempo
dedicado a la prestacin, la animacin o en su lgica del juego.
Usted puede jugar a tu juego en el Editor de perfiles en, y registrar los datos de
rendimiento. La ventana de perfiles a continuacin, muestra los datos en una lnea de tiempo,
as que usted puede ver los cuadros o las reas que Spike (toman ms tiempo) que otros. Al
hacer clic en cualquier parte de la lnea de tiempo, la seccin inferior de la ventana de perfiles
mostrar informacin detallada para el marco seleccionado.
Tenga en cuenta que el perfil tiene que instrumento el cdigo. Esta instrumentacin tiene un
pequeo impacto en el rendimiento de su juego.Tpicamente esta sobrecarga es lo
suficientemente pequea para no afectar la tasa de fotogramas juego. Cuando el uso de
perfiles es tpico de considerar slo la proporcin (o porcentaje) de tiempo invertido en
determinadas zonas. Tambin, para mejorar el enfoque de rendimiento en esas partes del
juego que consumen la mayor parte del tiempo. Comparacin de perfiles de los resultados
antes y despus de los cambios de cdigo y determinar las mejoras que se pueden medir. A
veces los cambios realizados para mejorar el rendimiento que podra tener un efecto negativo
sobre la velocidad de cuadro; se debe esperar consecuencias inesperadas de la optimizacin
del cdigo.
Vase tambin
Webplayer
Para perfiles WebPlayer, siga estos pasos:
1.
2.
3.
iOS
Perfiles remoto se puede habilitar en dispositivos iOS siguiendo estos pasos:
1.
Conecte el dispositivo iOS a tu red WiFi (red WiFi local / adhoc es utilizado por perfilador
para enviar datos de perfiles de dispositivo para el Editor de la Unidad).
2.
3.
4.
Si est utilizando un servidor de seguridad, es necesario asegurarse de que los puertos desde
54.998 hasta 55.511 estn abiertos en las reglas de salida del firewall - estos son los puertos
utilizados por la Unidad para el perfil remoto.
Nota: A veces Unidad Editor podra no autoconectarse al dispositivo. En tales casos, la
conexin de perfiles podra iniciarse desde Profiler ventanaactiva Profiler men desplegable
seleccione el dispositivo apropiado.
Androide
Perfiles remoto se puede activar en los dispositivos Android a travs de dos caminos
diferentes: WiFi o ADB .
Para perfiles de Wi-Fi, siga estos pasos:
1.
2.
3.
4.
5.
6.
Android y el ordenador principal (que se ejecuta el Editor de la Unidad) debe tanto estar en la
misma subredpara la deteccin de dispositivos a trabajar.
activa el men desplegable. Nota: El editor de Unity crear automticamente un tnel adb para su
aplicacin al pulsar "Build & Run". Si desea perfilar otra aplicacin o reiniciar el servidor adb es
necesario configurar este tnel manualmente. Para ello, abra un smbolo ventana Terminal / CMD y
entrar ADB adelante tcp: 54999 localabstract: identificador del paquete
Unityinsert aqu
Archivos de registro
Puede haber ocasiones durante el desarrollo cuando se necesita para obtener informacin de
los registros de la WebPlayer que se ha construido, su reproductor independiente, el
dispositivo de destino o el editor. Por lo general, usted necesita ver a estos archivos cuando
usted ha experimentado un problema y usted tiene que saber exactamente dnde se produjo
el problema.
En Mac los registros Webplayer, jugador y editor se puede acceder de manera uniforme a
travs de la norma Console.app utilidad.
En Windows los registros Webplayer y editor se colocan en carpetas que no se muestran en el
Explorador de Windows por defecto. Vea abajo.
Editor
El registro de editor puede ser llevado a travs del Abra el Editor de registro botn en la
ventana de la consola de la Unidad.
Mac OS X
Windows XP
Windows
Vista / 7
Editor \ Editor.log
Webplayer
Mac OS X
Windows XP
Windows Vista /
Windows Vista /
7 + IE7 + UAC
Jugador
Mac OS
Ventanas
_EXECNAME_Data_ \ Output_log.txt
Linux
iOS
El registro de dispositivo se puede acceder en XCode travs de la consola GDB o la Consola
Organizador. Este ltimo es til para obtener CrashLogs cuando su aplicacin no se ejecuta a
travs del depurador XCode.
Por favor, vea la depuracin de aplicaciones en la Gua de iOS Desarrollo. Tambin
nuestra Solucin de problemas y Bugreporting guas pueden ser tiles para usted.
Androide
El registro de dispositivo se puede ver a travs de la consola Logcat . Utilice el adb aplicacin
que se encuentra en Android directorio / plataforma de herramientas de SDK con un
trailing Logcat parmetro:
$ Logcat adb
Otra forma de inspeccionar el LogCat es usar el Dalvik Debug Monitor Server (DDMS) . DDMS
se puede iniciar desde Eclipse o desde el interior de los Android SDK / herramientas . DDMS
tambin proporciona un nmero de otras herramientas de depuracin relacionados.
Zarzamora
El Blackberry, el registro est disponible en la configuracin del reproductor (Men: Edicin>
Ajustes del proyecto> Reproductor ). Selecciona la pestaa plataforma Blackberry y entre los
ajustes de publicacin, usted encontrar una Obtn Entrar botn. Al hacer clic en este botn
obtendr el ltimo registro del dispositivo y mostrarlo usando el editor de texto por defecto del
sistema.
Tenga en cuenta que el registro slo registra los detalles para el proyecto Unity ms
recientemente funcionar, por lo que tendr que guardar copias de los registros de usted mismo
si desea realizar un seguimiento de los detalles sobre varias carreras.
EventSystem
El EventSystem es una forma de enviar eventos a los objetos de la aplicacin basada en la entrada, ya
sea el teclado, el ratn, el tacto, o entrada personalizada. El EventSystem consta de unos pocos
componentes que trabajan juntos para enviar eventos.
Visin de conjunto
Cuando se agrega un componente EventSystem a un GameObject te dars cuenta de que no tiene mucha
funcionalidad expuesta, esto se debe a la propia EventSystem est diseado como un gestor y facilitador
de la comunicacin entre los mdulos EventSystem.
Las funciones principales de la EventSystem son los siguientes:
Mdulos de entradas
Un mdulo de entrada es donde la lgica principal de cmo desea que el EventSystem comportarse
vidas, que se utilizan para
Entrada de Manejo
La gestin de estado de evento
Envo de eventos a objetos de la escena.
Slo una InputModule puede ser activo en el EventSystem a la vez, y deben ser componentes en la
misma GameObject como el componente EventSystem.
Si desea escribir un mdulo de entrada personalizado, se recomienda que usted enve eventos apoyados
por componentes de interfaz de usuario existente en la Unidad, pero tambin son capaces de extender y
escribir sus propios eventos que se detallan en la documentacin del sistema de mensajera.
Raycasters
Raycasters se utilizan para el envo de averiguar lo que el puntero est sobre, es comn para
InputModules para utilizar las Raycasters configurados en la escena para calcular lo que el dispositivo de
sealizacin ha terminado.
Hay 3 Raycasters siempre que la marca de forma predeterminada:
Sistema de mensajera
El nuevo sistema de interfaz de usuario utiliza un sistema de mensajera diseado para
sustituir SendMessage. El sistema es pura C # y tiene por objeto abordar algunos de los
problemas actuales con SendMessage. El sistema funciona mediante interfaces
personalizadas que se pueden implementar en un MonoBehaviour para indicar que el
componente es capaz de recibir una devolucin de llamada desde el sistema de
mensajera.Cuando se realiza la llamada se especifica un GameObject objetivo; la
convocatoria se publicar en todos los componentes de la GameObject que implementan la
interfaz especificado que el llamado es a ser emitida en su contra. El sistema de mensajera
permite que los datos de usuario personalizadas que se pasan, as como en qu medida a
travs de la jerarqua GameObject el evento debe propagar; es decir en caso de que slo hay
que ejecutar para el GameObject especificado, o debe tambin ejecutar en los nios y los
padres. Adems de esto, el marco de mensajera proporciona funciones de ayuda para buscar
y encontrar GameObjects que implementan una interfaz de mensajera dado.
El sistema de mensajera es genrico y diseado para el uso no slo por el sistema de interfaz
de usuario, sino tambin por cdigo de juego general. Es relativamente trivial para aadir
eventos de mensajera personalizada y que funcionar con el mismo marco que el sistema
utiliza la interfaz de usuario para todo el manejo de eventos.
Una vez que esta interfaz se define entonces puede ser implementado por un
MonoBehaviour. Cuando se implementa que define las funciones que se ejecutarn si el
mensaje dado se emiti en contra de esta MonoBehaviours GameObject..
{
Debug.Log ("Message 1 received");
}
Ahora que existe un script que puede recibir el mensaje que tenemos que emitir el
mensaje. Normalmente esto sera en respuesta a algn evento de acoplamiento flexible que
se produce. Por ejemplo, en el sistema de interfaz de usuario que emitimos eventos para
cosas tales como PointerEnter y PointerExit, as como una variedad de otras cosas que
pueden suceder en respuesta a la entrada del usuario en la aplicacin.
Para enviar un mensaje existe una clase auxiliar esttica para hacer esto. Como argumentos
que requiere un objeto de destino para el mensaje, algunos datos especficos del usuario, y un
funtor que asigna a la funcin especfica en la interfaz de mensaje que desea orientar la
campaa.
ExecuteEvents.Execute<ICustomMessageTarget>(target, null,
(x,y)=>x.Message1());
Eventos compatibles
El EventSystem apoya una serie de eventos, y se puede personalizar an ms en
InputModules escritos de usuario personalizadas usuario.
Los eventos que son apoyadas por la StandaloneInputModule y TouchInputModule son
proporcionados por la interfaz y se pueden implementar en un MonoBehaviour implementando
la interfaz. Si usted tiene un EventSystem vlido configurado los eventos sern llamados en el
momento correcto.
Raycasters
El EventSystem necesita un mtodo para detectar donde los eventos de entrada de corriente
deben ser enviados a, y esto es proporcionado por los Raycasters. Dada una posicin espacio
en la pantalla van a cobrar todos los objetivos potenciales, averiguar si estn bajo la posicin
dada, y luego devolver el objeto que est ms cerca de la pantalla. Hay unos cuantos tipos de
Raycasters que se proporcionan:
GraphicRaycaster - Se utiliza para los elementos de la interfaz de usuario, vive en una lona
y bsquedas dentro del lienzo
Cuando un raycaster est presente y activado en la escena que ser utilizado por el
EventSystem cada vez que se emite una consulta de un InputModule.
Si varios Raycasters se utilizan entonces todos tendrn fundicin suceda a ellos ya los
resultados se ordenan en funcin de la distancia a los elementos.
Este subsistema se encarga de controlar todos los dems elementos que conforman el
concurso completo. Coordina InputModule que est activo actualmente, que GameObject est
actualmente considerado 'seleccionado', y una serie de otros conceptos EventSystem de alto
nivel.
Cada "actualizacin" del EventSystem recibe la llamada y se ve a travs de l de
InputModules y se da cuenta de que es el InputModule que se debe utilizar para esta
garrapata y luego los delegados del procesamiento de los mdulos.
Propiedades
Property:
Function:
Script
Raycaster Grfico
El raycaster grfico se utiliza para raycast contra un lienzo. El raycaster mira a todos los
grficos en el lienzo y determina si alguno de ellos se han visto afectados.
El raycaster grfico se puede configurar para ignorar caras ocultas de grficos, as como ser
bloqueada por objetos 2D o 3D que existen en frente de ella. Una prioridad manual tambin se
puede aplicar si desea que el procesamiento de este elemento que se vio obligado a la parte
delantera o trasera de la Raycasting.
Propiedades
Property:
Function:
Script
Fsica 2D raycaster
Los raycasts raycaster 2D 2D contra objetos en la escena. Esto permite que los mensajes
sean enviados a los objetos 2D fsica que implementan interfaces de eventos.
Propiedades
Propiedad:
Funcin:
Script
Fsica raycaster
Los raycasts raycaster contra objetos 3D en la escena. Esto permite que los mensajes sean
enviados a los objetos de la fsica 3D que implementan interfaces de eventos.
Propiedades
Propiedad:
Funcin:
Script
Propiedades
Propiedad:
script
Funcin:
Propiedad:
Funcin:
Detalles
El Modulo EE.UU.:
Tiene un tiempo de espera entre los eventos slo para permitir que un nmero mximo de
eventos de un segundo.
Enva un evento Mover al objeto seleccionado si se introduce un eje vlido desde el gestor
de entrada
puede manejarlo)
Propiedades
Propiedad:
Funcin:
Script
Detalles
El flujo para el mdulo es la siguiente:
puede manejarlo)