Needle Engine
  • README
  • Code Of Conduct
  • HOW TO
  • documentation
    • SUMMARY
    • _backlog-mermaid
    • _backlog
    • _meta-test
    • Automatic Component Generation
    • Needle Core Components
    • How To Debug
    • Deployment and Optimization
    • embedding
    • Everywhere Actions
    • Example Projects ✨
    • Exporting Assets, Animations, Prefabs, Materials, Lightmaps...
    • Questions and Answers (FAQ) 💡
    • Feature Overview
    • This page has been moved: continue here
    • getting-started
    • Frameworks, Bundlers, HTML
    • index
    • Additional Modules
    • Networking
    • Needle Engine Project Structure
    • Samples Projects
    • Scripting Examples
    • Creating and using Components
    • Live
    • Live
    • About
    • Live
    • Live
    • Live
    • Live
    • Support, Community & AI
    • Technical Overview
    • Testimonials
    • Testing on local devices
    • Using Needle Engine directly from HTML
    • vision
    • VR & AR (WebXR)
    • blender
      • Needle Engine for Blender
    • cloud
      • Needle Cloud
    • custom-integrations
      • index
    • getting-started
      • Scripting Introduction for Unity Developers
      • Getting Started & Installation
      • Scripting in Needle Engine
    • reference
      • needle.config.json
      • <needle-engine> Configuration
      • @serializable and other decorators
    • three
      • index
    • unity
      • Editor Sync
      • Needle Engine for Unity
    • lang
      • de
        • 404
        • SUMMARY
        • Automatische Komponenten-Generierung
        • Needle-Kernkomponenten
        • Debugging
        • Bereitstellung und Optimierung
        • embedding
        • Everywhere Actions
        • Beispielprojekte ✨
        • Assets, Animationen, Prefabs, Materialien, Lightmaps exportieren...
        • Fragen und Antworten (FAQ) 💡
        • Funktionsübersicht
        • Diese Seite wurde verschoben: hier fortfahren
        • getting-started
        • Frameworks, Bundler, HTML
        • index
        • Zusätzliche Module
        • Netzwerkfunktionen
        • Needle Engine Projektstruktur
        • Beispielprojekte
        • Scripting Beispiele
        • Erstellen und Verwenden von Komponenten
        • Live
        • Live
        • Über
        • Live
        • Live
        • Live
        • Live
        • Support und Community
        • Technischer Überblick
        • Erfahrungsberichte
        • Testen auf lokalen Geräten
        • Needle Engine direkt aus HTML verwenden
        • vision
        • VR & AR (WebXR)
        • blender
          • Needle Engine für Blender
        • cloud
          • Needle Cloud
        • custom-integrations
          • index
        • getting-started
          • Einführung in das Scripting für Unity-Entwickler
          • Erste Schritte & Installation
          • Scripting in Needle Engine
        • reference
          • needle.config.json
          • <needle-engine> Konfiguration
          • @serializable und andere Decorators
        • three
          • index
        • unity
          • Editor Synchronisierung
          • Needle Engine für Unity
      • es
        • SUMMARY
        • Generación Automática de Componentes
        • Componentes principales de Needle
        • Cómo Depurar
        • Despliegue y optimización
        • embedding
        • Acciones Everywhere
        • Proyectos de Ejemplo ✨
        • Exportación de Assets, Animaciones, Prefabs, Materiales, Lightmaps...
        • Preguntas Frecuentes (FAQ) 💡
        • Resumen de Características
        • Esta página ha sido movida: continúe aquí
        • getting-started
        • Frameworks, Bundlers, HTML
        • index
        • Módulos Adicionales
        • Redes
        • Estructura de Proyecto de Needle Engine
        • Proyectos de ejemplo
        • Ejemplos de scripting
        • Crear y usar Components
        • En vivo
        • En Vivo
        • Acerca de
        • En vivo
        • En vivo
        • En vivo
        • En vivo
        • Soporte y Comunidad
        • Resumen técnico
        • Testimonios
        • Testing on local devices
        • Usando Needle Engine directamente desde HTML
        • vision
        • VR & AR (WebXR)
        • blender
          • Needle Engine para Blender
        • cloud
          • Needle Cloud
        • custom-integrations
          • index
        • getting-started
          • Introducción al Scripting para Desarrolladores de Unity
          • Primeros pasos e instalación
          • Scripting in Needle Engine
        • reference
          • needle.config.json
          • Configuración de <needle-engine>
          • @serializable y otros decoradores
        • three
          • index
        • unity
          • Editor Sync
          • Needle Engine para Unity
      • fr
        • SUMMARY
        • Génération automatique de composants
        • Composants principaux de Needle
        • Comment déboguer
        • Déploiement et Optimisation
        • embedding
        • Everywhere Actions
        • Exemples de Projets ✨
        • Exporter des Assets, des Animations, des Prefabs, des Matériaux, des Lightmaps...
        • Questions et Réponses (FAQ) 💡
        • Aperçu des fonctionnalités
        • Cette page a été déplacée : continuez ici
        • getting-started
        • Frameworks, Bundlers, HTML
        • index
        • Modules supplémentaires
        • Réseau
        • Structure du projet Needle Engine
        • Projets d'exemples
        • Exemples de Scripting
        • Créer et utiliser des Components
        • showcase-bike
        • En direct
        • À propos
        • En direct
        • Jouer
        • En direct
        • En direct
        • Support et Communauté
        • Vue d'ensemble technique
        • Témoignages
        • Tester sur les appareils locaux
        • Utiliser Needle Engine directement depuis HTML
        • vision
        • VR & AR (WebXR)
        • blender
          • Needle Engine pour Blender
        • cloud
          • Needle Cloud
        • custom-integrations
          • index
        • getting-started
          • Introduction au Scripting pour les Développeurs Unity
          • Premiers pas et installation
          • Scripting in Needle Engine
        • reference
          • needle.config.json
          • <needle-engine> Configuration
          • @serializable et autres décorateurs
        • three
          • index
        • unity
          • Synchronisation de l'Editor (Editor Sync)
          • Needle Engine pour Unity
      • hi
        • SUMMARY
        • कंपोनेंट का स्वतः जनरेशन
        • नीडल कोर कंपोनेंट्स
        • How To Debug
        • Deployment and Optimization
        • embedding
        • Everywhere Actions
        • उदाहरण प्रोजेक्ट ✨
        • एसेट, एनिमेशन, प्रीफैब, मटेरियल, लाइटमैप्स... को एक्सपोर्ट करना
        • प्रश्न और उत्तर (FAQ) 💡
        • सुविधा अवलोकन
        • यह पृष्ठ स्थानांतरित कर दिया गया है: यहां जारी रखें
        • getting-started
        • Frameworks, Bundlers, HTML
        • index
        • अतिरिक्त मॉड्यूल
        • नेटवर्किंग
        • Needle Engine प्रोजेक्ट स्ट्रक्चर
        • samples-and-modules
        • स्क्रिप्टिंग उदाहरण
        • कंपोनेंट बनाना और उपयोग करना
        • लाइव
        • लाइव
        • परिचय
        • लाइव
        • लाइव
        • लाइव
        • लाइव
        • समर्थन और समुदाय
        • तकनीकी अवलोकन
        • प्रशंसापत्र
        • Testing on local devices
        • HTML से सीधे Needle Engine का उपयोग करना
        • vision
        • VR & AR (WebXR)
        • blender
          • Needle Engine for Blender
        • cloud
          • Needle Cloud
        • custom-integrations
          • index
        • getting-started
          • Unity डेवलपर्स के लिए स्क्रिप्टिंग परिचय
          • आरंभ करना और इंस्टॉलेशन
          • Needle Engine में स्क्रिप्टिंग
        • reference
          • needle.config.json
          • <needle-engine> कॉन्फ़िगरेशन
          • @serializable and other decorators
        • three
          • index
        • unity
          • Editor Sync
          • Unity के लिए Needle Engine
      • ja
        • SUMMARY
        • 自動コンポーネント生成
        • Needleコアコンポーネント
        • デバッグの方法
        • デプロイと最適化
        • embedding
        • Everywhere Actions
        • サンプルプロジェクト ✨
        • アセット、アニメーション、Prefab、マテリアル、ライトマップなどのエクスポート
        • よくある質問(FAQ)💡
        • 機能概要
        • このページは移動しました: こちらからどうぞ
        • getting-started
        • フレームワーク、バンドラー、HTML
        • index
        • 追加モジュール
        • ネットワーキング
        • Needle Engineプロジェクトの構造
        • サンプルプロジェクト
        • スクリプティング例
        • Creating and using Components
        • ライブ
        • showcase-castle
        • 概要
        • ライブ
        • ライブ
        • ライブ
        • ライブ
        • サポートとコミュニティ
        • 技術概要
        • お客様の声
        • ローカルデバイスでのテスト
        • HTMLからNeedle Engineを直接使用する
        • vision
        • VR & AR (WebXR)
        • blender
          • Blender 用 Needle Engine
        • cloud
          • Needle Cloud
        • custom-integrations
          • index
        • getting-started
          • Scripting Introduction for Unity Developers
          • はじめに & インストール
          • Needle Engineでのスクリプティング
        • reference
          • needle.config.json
          • <needle-engine> 設定
          • @serializable およびその他のデコレーター
        • three
          • index
        • unity
          • Editor Sync
          • Unity用Needle Engine
      • pt
        • SUMMARY
        • Automatic Component Generation
        • Componentes Principais do Needle
        • Como Depurar
        • Implementação e Otimização
        • embedding
        • Everywhere Actions
        • Projetos de Exemplo ✨
        • Exportar Recursos, Animações, Prefabs, Materiais, Lightmaps...
        • Perguntas e Respostas (FAQ) 💡
        • Visão Geral dos Recursos
        • Esta página foi movida: continue aqui
        • getting-started
        • Frameworks, Bundlers, HTML
        • index
        • Módulos Adicionais
        • Redes
        • Estrutura do Projeto Needle Engine
        • Projetos de Exemplo
        • Exemplos de Scripting
        • Criar e usar Componentes
        • Ao Vivo
        • Ao Vivo
        • Sobre
        • Ao Vivo
        • Ao Vivo
        • Ao Vivo
        • Ao Vivo
        • Suporte e Comunidade
        • Visão Geral Técnica
        • Depoimentos
        • Testar em dispositivos locais
        • vanilla-js
        • vision
        • VR & AR (WebXR)
        • blender
          • Needle Engine para Blender
        • cloud
          • Needle Cloud
        • custom-integrations
          • index
        • getting-started
          • Introdução à Scripting para Developers Unity
          • Começar e Instalação
          • Scripting no Needle Engine
        • reference
          • needle.config.json
          • needle-engine-attributes
          • @serializable e outros decorators
        • three
          • index
        • unity
          • Sincronização do Editor
          • Needle Engine para Unity
      • vn
        • 404
        • SUMMARY
        • Automatic Component Generation
        • Các Component Cốt lõi của Needle
        • Cách gỡ lỗi
        • Triển khai và Tối ưu hóa
        • embedding
        • Hành động ở mọi nơi (Everywhere Actions)
        • Các Dự Án Ví Dụ ✨
        • Xuất Tài sản, Hoạt ảnh, Prefab, Vật liệu, Lightmap...
        • Câu hỏi thường gặp (FAQ) 💡
        • Tổng quan tính năng
        • Trang này đã được di chuyển: tiếp tục tại đây
        • getting-started
        • Frameworks, Bundlers, HTML
        • index
        • Các Module Bổ Sung
        • Kết nối mạng
        • Cấu trúc dự án Needle Engine
        • samples-and-modules
        • Ví dụ về Scripting
        • Tạo và sử dụng Component
        • Trực tiếp
        • Trực tiếp
        • Giới thiệu
        • Trực tiếp
        • Chơi thử
        • Trực tiếp
        • Demo trực tiếp
        • Hỗ trợ và Cộng đồng
        • Tổng quan kỹ thuật
        • Lời chứng thực
        • Testing on local devices
        • Sử dụng Needle Engine trực tiếp từ HTML
        • vision
        • VR & AR (WebXR)
        • blender
          • Needle Engine cho Blender
        • cloud
          • Needle Cloud
        • custom-integrations
          • index
        • getting-started
          • Giới thiệu về Scripting cho các nhà phát triển Unity
          • Getting Started & Installation
          • Scripting trong Needle Engine
        • reference
          • needle.config.json
          • Cấu hình <needle-engine>
          • @serializable và các decorator khác
        • three
          • index
        • unity
          • Editor Sync
          • Needle Engine cho Unity
      • zh
        • SUMMARY
        • 自动生成组件
        • Needle 核心组件
        • 如何调试
        • 部署与优化
        • embedding
        • Everywhere Actions
        • 示例项目 ✨
        • 导出资源、动画、预制体、材质、光照贴图...
        • 常见问题 (FAQ) 💡
        • 功能概览
        • 此页面已移动:请在此处继续
        • getting-started
        • 框架、打包器、HTML
        • index
        • 附加模块
        • 网络
        • Needle Engine 项目结构
        • 示例项目
        • Scripting Examples
        • Creating and using Components
        • 实时示例
        • 实时
        • 关于
        • 实时演示
        • 在线试玩
        • 实时演示
        • 现场演示
        • 支持与社区
        • 技术概述
        • 用户评价
        • Testing on local devices
        • 使用 Needle Engine 直接从 HTML
        • vision
        • VR & AR (WebXR)
        • blender
          • Needle Engine for Blender
        • cloud
          • Needle Cloud
        • custom-integrations
          • index
        • getting-started
          • Scripting Introduction for Unity Developers
          • 入门与安装
          • 在 Needle Engine 中编写脚本
        • reference
          • needle.config.json
          • <needle-engine> 配置
          • @serializable and other decorators
        • three
          • index
        • unity
          • 编辑器同步
          • Unity 版 Needle Engine
Powered by GitBook
On this page
Edit on GitHub
  1. documentation
  2. lang
  3. de
  4. getting-started

Scripting in Needle Engine

Unterschiede, Gemeinsamkeiten und Schlüsselkonzepte von Typescript, Javascript und C#.

PreviousErste Schritte & InstallationNextreference

Last updated 26 days ago

Der folgende Leitfaden versucht, einige der wichtigsten Unterschiede zwischen C#, Javascript und Typescript hervorzuheben. Dies ist besonders nützlich für Entwickler, die neu im Web-Ökosystem sind.

Hier sind auch einige nützliche Ressourcen, um Typescript zu lernen:

Hauptunterschiede zwischen C#, Javascript oder Typescript

CSharp oder C# ist eine statically typed & compiled language. Das bedeutet, dass bevor Ihr Code laufen (oder ausgeführt werden) kann, er kompiliert – übersetzt – werden muss in IL oder CIL, eine intermediate language, die etwas näher am machine code ist. Wichtig ist hier zu verstehen, dass Ihr Code analysiert wird und bestimmte Prüfungen und Regeln bestehen muss, die vom Compiler durchgesetzt werden. Sie erhalten compiler errors in Unity, und Ihre Anwendung startet nicht einmal, wenn Sie Code schreiben, der gegen eine der Regeln der C#-Sprache verstößt. Sie können den Play-Mode nicht mit compiler errors starten.

Javascript hingegen wird zur runtime interpretiert. Das bedeutet, Sie können Code schreiben, der nicht gültig ist und Fehler verursacht – aber Sie werden diese Fehler erst sehen, wenn Ihr Programm läuft oder versucht, genau die Zeile mit dem Fehler zu auszuführen. Zum Beispiel können Sie var points = 100; points += "hello world"; schreiben, und niemand wird sich beschweren, bis Sie den Code in einem Browser ausführen.

Typescript ist eine von Microsoft entwickelte Sprache, die zu Javascript kompiliert. Sie fügt viele Funktionen hinzu, wie zum Beispiel type-safety. Das bedeutet, wenn Sie Code in Typescript schreiben, können Sie Typen deklarieren und erhalten somit Fehler zur Compile-Zeit, wenn Sie zum Beispiel ungültige Zuweisungen vornehmen oder Methoden mit unerwarteten Typen aufrufen. Lesen Sie weiter unten mehr über Typen in Javascript und Typescript.

Typen – oder deren Fehlen

Vanilla Javascript hat (stand heute) kein Konzept von Typen: Es gibt keine Garantie, dass eine Variable, die Sie als let points = 100 deklariert haben, später in Ihrer Anwendung immer noch eine Zahl sein wird. Das bedeutet, dass es in Javascript vollkommen gültiger Code ist, später in Ihrem Code points = new Vector3(100, 0, 0); zuzuweisen. Oder sogar points = null oder points = myRandomObject – Sie verstehen die Idee. Das ist alles in Ordnung, während Sie den Code schreiben, aber es kann schrecklich abstürzen, wenn Ihr Code ausgeführt wird, weil Sie später points -= 1 schreiben und jetzt Fehler im Browser erhalten, während Ihre Anwendung bereits läuft.

Wie oben erwähnt, wurde Typescript entwickelt, um dieses Problem zu beheben, indem Syntax zur Definition von Typen hinzugefügt wurde.

Es ist wichtig zu verstehen, dass Sie im Grunde immer noch Javascript schreiben, wenn Sie Typescript schreiben, und obwohl es möglich ist, alle Typprüfungen und Sicherheitsprüfungen zu umgehen, indem Sie z. B. //@ts-ignore über eine fehlerhafte Zeile hinzufügen oder alle Typen als any definieren, ist dies definitiv nicht empfohlen. Typen sind dazu da, Ihnen zu helfen, Fehler zu finden, bevor sie tatsächlich auftreten. Sie möchten Ihre Website wirklich nicht auf Ihrem Server bereitstellen, nur um später Berichte von Benutzern oder Besuchern zu erhalten, die Ihnen mitteilen, dass Ihre App abgestürzt ist, während sie lief.

Während vanilla Javascript keine Typen anbietet, können Sie Ihren Javascript-Variablen, Klassen und Methoden dennoch type-annotations hinzufügen, indem Sie verwenden.

Variablen

In C# schreiben Sie Variablen entweder unter Verwendung des Typs oder des var keyword. Zum Beispiel können Sie entweder int points = 100; schreiben oder alternativ var verwenden und den Compiler den richtigen Typ für Sie herausfinden lassen: var points = 100

In Javascript oder Typescript haben Sie zwei moderne Optionen zur Deklaration einer Variable. Für eine Variable, die Sie neu zuweisen möchten, verwenden Sie let, zum Beispiel let points = 100; Für eine Variable, die Sie nicht neu zuweisen möchten, verwenden Sie const, zum Beispiel const points = 100;

Bitte beachten Sie, dass Sie Variablen, die mit const deklariert wurden, dennoch Werte zuweisen können, wenn sie (zum Beispiel) ein benutzerdefinierter Typ sind. Betrachten Sie das folgende Beispiel:

import { Vector3 } from "three";
// ---cut-before---
const myPosition : Vector3 = new Vector3(0, 0, 0);
myPosition.x = 100; // Die Zuweisung von x ist völlig in Ordnung

Das Obige ist vollkommen gültiger Typescript-Code, weil Sie myPosition nicht neu zuweisen, sondern nur das x Mitglied von myPosition. Andererseits wäre das folgende Beispiel nicht erlaubt und würde einen runtime- oder Typescript-Fehler verursachen:

// @errors: 2588
import { Vector3 } from "three";
// ---cut-before---
const myPosition : Vector3 = new Vector3(0, 0, 0);
myPosition = new Vector3(100, 0, 0); // ⚠ ZUWEISUNG ZU CONST IST NICHT ERLAUBT

Verwenden oder Importieren von Typen

In Unity fügen Sie normalerweise using statements am Anfang Ihres Codes hinzu, um bestimmte namespaces aus Assemblies zu importieren, auf die in Ihrem Projekt verwiesen wird, oder – in bestimmten Fällen – importieren Sie möglicherweise einen bestimmten Typ mit einem Namen aus einem namespace. Siehe das folgende Beispiel:

using UnityEngine;
// nur einen bestimmten Typ importieren und ihm einen Namen geben
using MonoBehaviour = UnityEngine.MonoBehaviour;

So machen Sie dasselbe in Typescript, um bestimmte Typen aus einem package zu importieren:

import { Vector3 } from 'three';
import { Behaviour } from '@needle-tools/engine';

Sie können auch alle Typen aus einem bestimmten package importieren, indem Sie ihm einen Namen geben, was Sie hier und da sehen könnten:

import * as THREE from 'three';
const myVector : THREE.Vector3 = new THREE.Vector3(1, 2, 3);

Primitive Typen

Vector2, Vector3, Vector4... Wenn Sie einen C#-Hintergrund haben, kennen Sie möglicherweise den Unterschied zwischen einer class und einer struct. Während eine class ein reference type ist, ist eine struct ein benutzerdefinierter value type. Das bedeutet, dass sie je nach Kontext auf dem stack zugewiesen wird und bei der Übergabe an eine Methode standardmäßig eine Kopie erstellt wird. Betrachten Sie das folgende Beispiel in C#:

void MyCallerMethod(){
    var position = new Vector3(0,0,0);
    MyExampleVectorMethod(position);
    UnityEngine.Debug.Log("Position.x is " + position.x); // Hier ist x 0
}
void MyExampleVectorMethod(Vector3 position){
    position.x = 42;
}

Eine Methode wird mit einem Vector3 namens position aufgerufen. Innerhalb der Methode wird der übergebene Vektor position geändert: x wird auf 42 gesetzt. Aber in C# wird der ursprüngliche Vektor, der an diese Methode übergeben wird (siehe Zeile 2), nicht geändert, und x wird immer noch 0 sein (Zeile 4).

Dasselbe gilt nicht für Javascript/Typescript. Hier haben wir keine benutzerdefinierten value types, was bedeutet, dass Sie, wenn Sie in Needle Engine oder three.js auf einen Vektor stoßen, immer einen reference type haben werden. Betrachten Sie das folgende Beispiel in Typescript:

import { Vector3 } from 'three'

function myCallerMethod() : void {
    const position = new Vector3(0,0,0);
    myExampleVectorMethod(position);
    console.log("Position.x is " + position.x); // Hier ist x 42
}
function myExampleVectorMethod(position: Vector3) : void {
    position.x = 42;
}

Sehen Sie den Unterschied? Da Vektoren und alle benutzerdefinierten Objekte tatsächlich reference types sind, haben wir die ursprüngliche Variable position (Zeile 3) geändert, und x ist nun 42.

Dies ist nicht nur wichtig für Methoden, sondern auch beim Arbeiten mit Variablen. In C# erzeugt der folgende Code zwei Instanzen von Vector3, und das Ändern einer hat keinen Einfluss auf die andere:

var myVector = new Vector3(1,1,1);
var myOtherVector = myVector;
myOtherVector.x = 42;
// loggt: 1, 42
UnityEngine.Debug.Log(myVector.x + ", " + myOtherVector.x);

Wenn Sie dasselbe in Typescript tun, werden Sie keine Kopie erstellen, sondern stattdessen eine reference auf dieselbe myVector Instanz erhalten:

import { Vector3 } from 'three'

const myVector = new Vector3(1,1,1);
const myOtherVector = myVector;
myOtherVector.x = 42;
// loggt: 42, 42
console.log(myVector.x, myOtherVector.x);

Vektor-Mathematik und Operatoren

Während Sie in C# operator overloading verwenden können, ist dies in Javascript leider nicht verfügbar. Das bedeutet, dass Sie einen Vector3 in C# zwar so multiplizieren können:

var myFirstVector = new Vector3(1,1,1);
var myFactor = 100f;
myFirstVector *= myFactor;
// → myFirstVector ist jetzt 100, 100, 100

müssen Sie eine Methode auf dem Vector3-Typ verwenden, um dasselbe Ergebnis zu erzielen (nur mit etwas mehr boilerplate code)

import { Vector3 } from "three"

const myFirstVector : Vector3 = new Vector3(1, 1, 1)
const myFactor = 100;
myFirstVector.multiplyScalar(myFactor);
// → myFirstVector ist jetzt 100, 100, 100

Gleichheitsprüfungen

loose vs strict comparison

In C# können Sie es wie folgt schreiben, wenn Sie prüfen möchten, ob zwei Variablen gleich sind:

var playerIsNull = myPlayer == null;

in Javascript/Typescript gibt es einen Unterschied zwischen == und ===, wobei === strenger auf den Typ prüft:

const myPlayer: any = null;
// ---cut-before---
const playerIsNull = myPlayer === null;
const playerIsNullOrUndefined = myPlayer == null;

Events, Binding und this

Wenn Sie ein Event in C# abonnieren, tun Sie dies wie folgt:

// So wird ein Event deklariert
event Action MyEvent;
// Sie abonnieren, indem Sie hinzufügen (oder entfernen)
void OnEnable() {
    MyEvent += OnMyEvent;
}
void OnDisable() {
    MyEvent -= OnMyEvent;
}
void OnMyEvent() {}

In Typescript und Javascript müssen Sie "this binden", wenn Sie eine Methode zu einer Liste hinzufügen. Das bedeutet im Wesentlichen, dass Sie eine Methode erstellen, bei der Sie this explizit auf (normalerweise) Ihre aktuelle Klasseninstanz setzen. Es gibt zwei Möglichkeiten, dies zu erreichen.

Bitte beachten Sie, dass wir hier den Typ EventList verwenden, der ein Needle Engine Typ zur Deklaration von events ist (die EventList wird auch automatisch in ein UnityEvent oder eine event list in Blender umgewandelt, wenn Sie sie mit unseren Editor-Integrationen verwenden).

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

export class MyComponent extends Behaviour {

    @serializable(EventList)
    myEvent!: EventList;

    onEnable() {
        this.myEvent.addEventListener(this.onMyEvent);
    }

    onDisable() {
        this.myEvent.removeEventListener(this.onMyEvent);
    }

    // Deklarieren der Funktion als Arrow Function, um `this` automatisch zu binden
    private onMyEvent = () => {
        console.log(this !== undefined, this)
    }
}

Es gibt auch die ausführlichere "klassische" Methode, dasselbe zu erreichen, indem Sie this manuell binden (und die Methode in einer Variable speichern, um sie später wieder aus der event list zu entfernen):

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

export class MyComponent extends Behaviour {

    @serializable(EventList)
    myEvent?: EventList;

    private _onMyEventFn?: Function;

    onEnable() {
        // this binden
        this._onMyEventFn = this.onMyEvent.bind(this);
        // die gebundene Methode zum event hinzufügen
        this.myEvent?.addEventListener(this._onMyEventFn);
    }

    onDisable() {
        this.myEvent?.removeEventListener(this._onMyEventFn);
    }

    // Deklarieren der Funktion als Arrow Function, um `this` automatisch zu binden
    private onMyEvent = () => { }
}

Was kommt als Nächstes?

Seite automatisch mit AI übersetzt

Achtung bei var Möglicherweise stoßen Sie auch in Javascript auf das var keyword, aber es wird nicht empfohlen, es zu verwenden, und der moderne Ersatz dafür ist let. Erfahren Sie mehr über .

Sie stellen fest, dass die zweite Variable playerIsNullOrUndefined == verwendet, was eine loose equality check durchführt, bei der null und undefined beide zu true führen. Sie können mehr darüber lesen.

Die kurze und empfohlene Syntax dafür ist die Verwendung von .

Typescript Tutorial
Learn Typescript
Typescript Documentation
JSDoc
var vs let
hier
Arrow Functions
Needle Engine Scripting