Generación Automática de Componentes

Generación automática de componentes de Editor

Cuando trabajas en Unity o Blender, notarás que al crear un nuevo componente de Needle Engine en Typescript o Javascript, se generará automáticamente un componente C# stub de Unity O un panel de Blender para ti.

Esto es gracias a la magia del compilador de componentes de Needle que se ejecuta en segundo plano en un entorno de editor y observa los cambios en tus archivos de script. Cuando nota que has creado un nuevo componente de Needle Engine, generará el componente de Unity o el panel de Blender correctos, incluyendo variables o propiedades públicas que luego podrás configurar o enlazar desde dentro del Editor.

Nota: El compilador de componentes actualmente solo genera componentes. Por lo tanto, si necesitas exponer un Typescript Enum en Unity, puedes añadirlo a tu C# manualmente, ya sea en un nuevo archivo C# o fuera del código generado (consulta los ejemplos a continuación)

Control de la generación de componentes

Puedes usar los siguientes comentarios en tu código typescript para controlar el comportamiento de generación de código C#:

Atributo
Resultado

// @generate-component

Forzar la generación de la siguiente clase

// @dont-generate-component

Deshabilitar la generación de la siguiente clase, esto es útil en casos donde ya tienes un script C# existente en tu proyecto

// @serializeField

Decorar el campo generado con [SerializeField]

// @type UnityEngine.Camera

Especificar el tipo del campo C# generado

// @nonSerialized

Omitir la generación del siguiente campo o método

Ejemplos

Fuerza al compilador de componentes a generar un campo C# AudioClip llamado myAudioClip

import { Behaviour, serializable } from "@needle-tools/engine";

export class MyComponent extends Behaviour {
	//@type UnityEngine.AudioClip
	@serializable()
	myAudioClip?: string;
}

Fuerza al compilador de componentes a derivar de una subclase específica

import { Behaviour } from "@needle-tools/engine";
export class MyCustomBaseClass extends Behaviour { /* ... */ }
// ---cut-before---
//@type MyNamespace.MyCustomBaseClass
export class MyComponent extends MyCustomBaseClass {
}

Compilador de Componentes en Unity

Si quieres añadir scripts dentro de la carpeta src/scripts en tu proyecto, necesitas tener un Component Generator en el GameObject con tu componente ExportInfo. Ahora, al añadir nuevos componentes en your/threejs/project/src/scripts, generará automáticamente scripts de Unity en Assets/Needle/Components.codegen. Si quieres añadir scripts a cualquier archivo NpmDef, simplemente puedes crearlos - cada NpmDef observa automáticamente los cambios de script y maneja la generación de componentes, por lo que no necesitas ningún componente adicional en tu escena.

Para que los campos C# se generen correctamente, actualmente es importante que declares explícitamente un tipo Typescript. Por ejemplo myField : number = 5

Puedes cambiar entre la entrada Typescript y los componentes C# stub generados usando las pestañas de abajo ::: code-tabs @tab Typescript

import { AssetReference, Behaviour, serializable } from "@needle-tools/engine";
import { Object3D } from "three";

export class MyCustomComponent extends Behaviour {
    @serializable()
    myFloatValue: number = 42;

    @serializable(Object3D)
    myOtherObject?: Object3D;

    @serializable(AssetReference)
    prefabs: AssetReference[] = [];

    start() {
        this.sayHello();
    }

    private sayHello() {
        console.log("Hello World", this);
    }
}

@tab C# Generado

// NEEDLE_CODEGEN_START
// auto generated code - do not edit directly

#pragma warning disable

namespace Needle.Typescript.GeneratedComponents
{
	public partial class MyCustomComponent : UnityEngine.MonoBehaviour
	{
		public float @myFloatValue = 42f;
		public UnityEngine.Transform @myOtherObject;
		public UnityEngine.Transform[] @prefabs = new UnityEngine.Transform[]{ };
		public void start(){}
		public void update(){}
	}
}

// NEEDLE_CODEGEN_END

@tab Extensión del C# Generado

using UnityEditor;

// you can add code above or below the NEEDLE_CODEGEN_ blocks

// NEEDLE_CODEGEN_START
// auto generated code - do not edit directly

#pragma warning disable

namespace Needle.Typescript.GeneratedComponents
{
	public partial class MyCustomComponent : UnityEngine.MonoBehaviour
	{
		public float @myFloatValue = 42f;
		public UnityEngine.Transform @myOtherObject;
		public UnityEngine.Transform[] @prefabs = new UnityEngine.Transform[]{ };
		public void start(){}
		public void update(){}
	}
}

// NEEDLE_CODEGEN_END

namespace Needle.Typescript.GeneratedComponents
{
    // This is how you extend the generated component (namespace and class name must match!)
	public partial class MyCustomComponent : UnityEngine.MonoBehaviour
	{
		
		public void MyAdditionalMethod()
		{
		}

		private void OnValidate()
		{
			myFloatValue = 42;
		}
	}

    // of course you can also add custom editors
	[CustomEditor(typeof(MyCustomComponent))]
	public class MyCustomComponentEditor : Editor
	{
		public override void OnInspectorGUI()
		{
			EditorGUILayout.HelpBox("This is my sample component", MessageType.None);
			base.OnInspectorGUI();
		}
	}
}

:::

Extensión de componentes generados

Las clases C# de componentes se generan con el flag partial para facilitar su extensión con funcionalidad. Esto es útil para dibujar gizmos, añadir menús contextuales o añadir campos o métodos adicionales que no forman parte de un componente built-in.

:::tip Uso de mayúsculas en miembros Los miembros exportados comenzarán con una letra minúscula. Por ejemplo, si tu miembro C# se llama MyString, se asignará a myString. :::

Página traducida automáticamente usando IA

Last updated