Automatische Generierung von Editor-Komponenten
Beim Arbeiten in Unity oder Blender wirst du feststellen, dass, wenn du eine neue Needle Engine Komponente in Typescript oder Javascript erstellst, automatisch ein Unity C# Stub Komponente ODER ein Blender Panel für dich generiert wird.
Dies ist der Magie des Needle component compiler zu verdanken, der im Hintergrund in einer Editor-Umgebung läuft und Änderungen an deinen Skriptdateien überwacht. Wenn er bemerkt, dass du eine neue Needle Engine Komponente erstellt hast, generiert er die korrekte Unity Komponente oder das Blender Panel inklusive öffentlicher Variablen oder Properties, die du dann im Editor setzen oder verknüpfen kannst.
Steuerung der Komponenten-Generierung
Du kannst die folgenden Kommentare in deinem Typescript Code verwenden, um das Verhalten der C#-Code-Generierung zu steuern:
Attribut | Ergebnis |
---|---|
// @generate-component | Erzwingt die Generierung der nächsten Klasse |
// @dont-generate-component | Deaktiviert die Generierung der nächsten Klasse; dies ist nützlich in Fällen, in denen du bereits ein bestehendes C#-Skript in deinem Projekt hast |
// @serializeField | Dekoriert das generierte Feld mit [SerializeField] |
// @type UnityEngine.Camera | Spezifiziert den Typ des generierten C#-Feldes |
// @nonSerialized | Überspringt die Generierung des nächsten Feldes oder der nächsten Methode |
Beispiele
Erzwingt, dass der component compiler ein C# AudioClip-Feld namens myAudioClip
generiert
import { Behaviour, serializable } from "@needle-tools/engine";
export class MyComponent extends Behaviour {
//@type UnityEngine.AudioClip
@serializable()
myAudioClip?: string;
}
Erzwingt, dass der component compiler von einer spezifischen Unterklasse ableitet
import { Behaviour } from "@needle-tools/engine";
export class MyCustomBaseClass extends Behaviour { /* ... */ }
// ---cut-before---
//@type MyNamespace.MyCustomBaseClass
export class MyComponent extends MyCustomBaseClass {
}
Component Compiler in Unity
Wenn du Skripte im Ordner src/scripts
in deinem Projekt hinzufügen möchtest, benötigst du einen Component Generator
auf dem GameObject mit deiner ExportInfo
Komponente. Wenn du nun neue Komponenten in your/threejs/project/src/scripts
hinzufügst, werden automatisch Unity Skripte in Assets/Needle/Components.codegen
generiert. Wenn du Skripte zu einer NpmDef Datei hinzufügen möchtest, kannst du sie einfach erstellen - jede NpmDef überwacht automatisch Skriptänderungen und handhabt die Komponenten-Generierung, sodass du keine zusätzliche Komponente in deiner Szene benötigst.
Damit C#-Felder korrekt generiert werden, ist es derzeit wichtig, dass du explizit einen Typescript-Typ deklarierst. Zum Beispiel myField : number = 5
Du kannst über die Tabs unten zwischen Typescript Eingabe und generierten C# Stub-Komponenten wechseln :::: code-group ::: code-group-item 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);
}
}
::: ::: code-group-item Generated C#
// 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
::: ::: code-group-item Extending Generated C#
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();
}
}
}
::: ::::
Erweitern generierter Komponenten
C#-Klassen von Komponenten werden mit dem partial
Flag generiert, um sie einfach um Funktionalität zu erweitern. Dies ist hilfreich, um Gizmos zu zeichnen, Kontextmenüs hinzuzufügen oder zusätzliche Felder oder Methoden hinzuzufügen, die nicht Teil einer integrierten Komponente sind.
Member Casing
Exportierte Member beginnen mit einem Kleinbuchstaben. Wenn dein C#-Member zum Beispiel MyString
benannt ist, wird es myString
zugewiesen.
Page automatically translated using AI