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. fr
  4. getting-started

Scripting in Needle Engine

Differences, similarities and key concepts of Typescript, Javascript and C#.

PreviousPremiers pas et installationNextreference

Last updated 25 days ago

Le guide suivant tente de mettre en évidence certaines des différences clés entre C#, Javascript et Typescript. Ceci est particulièrement utile pour les développeurs qui découvrent l'écosystème web.

Voici également quelques ressources utiles pour apprendre à écrire du Typescript :

Différences clés entre C#, Javascript ou Typescript

CSharp ou C# est un langage statiquement typé et compilé. Cela signifie qu'avant que votre code puisse s'exécuter (ou être exécuté), il doit être compilé - traduit - en IL ou CIL, un langage intermédiaire qui est un peu plus proche du code machine. L'élément important à comprendre ici est que votre code est analysé et doit passer certaines vérifications et règles qui sont appliquées par le compilateur. Vous obtiendrez des erreurs de compilation dans Unity et votre application ne démarrera même pas si vous écrivez du code qui viole l'une des règles du langage C#. Vous ne pourrez pas entrer en mode Play avec des erreurs de compilation.

Javascript, quant à lui, est interprété à l'exécution. Cela signifie que vous pouvez écrire du code qui n'est pas valide et provoquer des erreurs - mais vous ne verrez pas ces erreurs avant que votre programme ne s'exécute ou n'essaie d'exécuter exactement la ligne qui contient l'erreur. Par exemple, vous pouvez écrire var points = 100; points += "hello world"; et personne ne se plaindra tant que vous n'aurez pas exécuté le code dans un navigateur.

Typescript est un langage conçu par Microsoft qui se compile en javascript. Il ajoute de nombreuses fonctionnalités comme par exemple la sécurité des types. Cela signifie que lorsque vous écrivez du code en Typescript, vous pouvez déclarer des types et ainsi obtenir des erreurs au moment de la compilation si vous essayez par exemple d'effectuer des assignations invalides ou d'appeler des méthodes avec des types inattendus. Lisez la suite sur les types en Javascript et Typescript ci-dessous.

Types — ou leur absence

Le Javascript pur (à ce jour) n'a pas de concept de types : il n'y a aucune garantie qu'une variable que vous avez déclarée comme let points = 100 restera un nombre plus tard dans votre application. Cela signifie qu'en Javascript, il est parfaitement valide d'assigner points = new Vector3(100, 0, 0); plus tard dans votre code. Ou même points = null ou points = myRandomObject - vous avez compris l'idée. Tout cela est OK pendant que vous écrivez le code mais cela peut planter horriblement lorsque votre code est exécuté parce que plus tard vous écrivez points -= 1 et maintenant vous obtenez des erreurs dans le navigateur alors que votre application est déjà en cours d'exécution.

Comme mentionné ci-dessus, Typescript a été créé pour aider à résoudre ce problème en ajoutant une syntaxe pour définir les types.

Il est important de comprendre que vous écrivez essentiellement toujours du Javascript lorsque vous écrivez du Typescript et bien qu'il soit possible de contourner toutes les vérifications de type et de sécurité en ajoutant par exemple //@ts-ignore au-dessus d'une ligne erronée ou en définissant tous les types comme any, ce n'est définitivement pas recommandé. Les types sont là pour vous aider à trouver des erreurs avant qu'elles ne se produisent réellement. Vous ne voulez vraiment pas déployer votre site web sur votre serveur pour ensuite recevoir des rapports d'utilisateurs ou de visiteurs vous disant que votre application a planté pendant son exécution.

Bien que le Javascript pur n'offre pas de types, vous pouvez toujours ajouter des annotations de type à vos variables, classes et méthodes javascript en utilisant .

Variables

En C#, vous déclarez des variables en utilisant le type ou le mot-clé var. Par exemple, vous pouvez écrire int points = 100; ou alternativement utiliser var et laisser le compilateur déterminer le type correct pour vous : var points = 100

En Javascript ou Typescript, vous avez deux options modernes pour déclarer une variable. Pour une variable que vous prévoyez de réassigner, utilisez let, par exemple let points = 100; Pour une variable que vous ne voulez pas pouvoir réassigner, utilisez const, par exemple const points = 100;

Veuillez noter que vous pouvez toujours assigner des valeurs aux variables déclarées avec const si elles sont (par exemple) un type personnalisé. Considérez l'exemple suivant :

import { Vector3 } from "three";
// ---cut-before---
const myPosition : Vector3 = new Vector3(0, 0, 0);
myPosition.x = 100; // L'assignation de x est parfaitement valide

L'exemple ci-dessus est un code Typescript parfaitement valide car vous ne réassignez pas myPosition mais seulement le membre x de myPosition. D'un autre côté, l'exemple suivant ne serait pas autorisé et provoquerait une erreur d'exécution ou Typescript :

// @errors: 2588
import { Vector3 } from "three";
// ---cut-before---
const myPosition : Vector3 = new Vector3(0, 0, 0);
myPosition = new Vector3(100, 0, 0); // ⚠ L'ASSIGNATION À CONST N'EST PAS AUTORISÉE

Utilisation ou importation de types

Dans Unity, vous ajoutez généralement des instructions using en haut de votre code pour importer des namespaces spécifiques à partir d'assemblies référencées dans votre projet ou - dans certains cas - vous pourriez vous retrouver à importer un type spécifique avec un nom à partir d'un namespace. Voir l'exemple suivant :

using UnityEngine;
// importation d'un type spécifique et lui donner un nom
using MonoBehaviour = UnityEngine.MonoBehaviour;

Voici comment faire la même chose en Typescript pour importer des types spécifiques d'un package :

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

Vous pouvez également importer tous les types d'un package spécifique en lui donnant un nom, ce que vous pourriez voir ici et là :

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

Types primitifs

Vector2, Vector3, Vector4... Si vous avez un background C#, vous connaissez peut-être la différence entre une classe et une struct. Alors qu'une classe est un type par référence, une struct est un type par valeur personnalisé. Cela signifie qu'elle est, selon le contexte, allouée sur la pile et lorsqu'elle est passée à une méthode, une copie est créée par défaut. Considérez l'exemple suivant en C# :

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

Une méthode est appelée avec un Vector3 nommé position. À l'intérieur de la méthode, le vecteur position passé est modifié : x est mis à 42. Mais en C#, le vecteur original qui est passé dans cette méthode (voir ligne 2) n'est pas modifié et x sera toujours 0 (ligne 4).

La même chose n'est pas vraie pour Javascript/Typescript. Ici, nous n'avons pas de types par valeur personnalisés, ce qui signifie que si vous rencontrez un Vector dans Needle Engine ou three.js, vous aurez toujours un type par référence. Considérez l'exemple suivant en typescript :

import { Vector3 } from 'three'

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

Voyez-vous la différence ? Parce que les vecteurs et tous les objets personnalisés sont en fait des types par référence, nous aurons modifié la variable position originale (ligne 3) et x est maintenant 42.

Ceci n'est pas seulement important à comprendre pour les méthodes mais aussi lors de l'utilisation de variables. En C#, le code suivant produira deux instances de Vector3 et changer l'une n'affectera pas l'autre :

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

Si vous faites la même chose en Typescript, vous ne créerez pas de copie mais obtiendrez une référence à la même instance myVector à la place :

import { Vector3 } from 'three'

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

Mathématiques vectorielles et opérateurs

Alors qu'en C# vous pouvez utiliser la surcharge d'opérateurs, cela n'est malheureusement pas disponible en Javascript. Cela signifie que bien que vous puissiez multiplier un Vector3 en C# comme ceci :

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

vous devez utiliser une méthode sur le type Vector3 pour obtenir le même résultat (juste avec un peu plus de code standard)

import { Vector3 } from "three"

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

Vérifications d'égalité

Comparaison lâche vs stricte

En C#, lorsque vous voulez vérifier si deux variables sont identiques, vous pouvez l'écrire comme suit :

var playerIsNull = myPlayer == null;

en Javascript/Typescript, il y a une différence entre == et ===, où === vérifie plus strictement le type :

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

Événements, Binding et this

Lorsque vous vous abonnez à un événement en C#, vous le faites comme suit :

// voici comment un événement est déclaré
event Action MyEvent;
// vous vous abonnez en ajoutant (ou supprimant)
void OnEnable() {
    MyEvent += OnMyEvent;
}
void OnDisable() {
    MyEvent -= OnMyEvent;
}
void OnMyEvent() {}

En Typescript et Javascript, lorsque vous ajoutez une méthode à une liste, vous devez "lier this". Cela signifie essentiellement que vous créez une méthode où vous définissez explicitement this à (généralement) votre instance de classe actuelle. Il y a deux façons d'y parvenir.

Veuillez noter que nous utilisons ici le type EventList, qui est un type Needle Engine pour déclarer des événements (l'EventList sera également automatiquement converti en UnityEvent et/ou en liste d'événements dans Blender lorsque vous les utilisez avec nos intégrations d'éditeur).

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);
    }

    // Déclarer la fonction comme une fonction fléchée pour lier automatiquement `this`
    private onMyEvent = () => {
        console.log(this !== undefined, this)
    }
}

Il existe également la manière "classique" plus verbeuse pour obtenir le même résultat en liant manuellement this (et en sauvegardant la méthode dans une variable pour ensuite la retirer à nouveau de la liste d'événements) :

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

export class MyComponent extends Behaviour {

    @serializable(EventList)
    myEvent?: EventList;

    private _onMyEventFn?: Function;

    onEnable() {
        // lier this
        this._onMyEventFn = this.onMyEvent.bind(this);
        // ajouter la méthode liée à l'événement
        this.myEvent?.addEventListener(this._onMyEventFn);
    }

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

    // Déclarer la fonction comme une fonction fléchée pour lier automatiquement `this`
    private onMyEvent = () => { }
}

Et ensuite ?

Page automatiquement traduite par l'IA

Faites attention à var Vous pourriez rencontrer le mot-clé var en javascript également, mais il n'est pas recommandé de l'utiliser et son remplacement moderne est let. Apprenez-en plus sur .

Vous remarquez que la deuxième variable playerIsNullOrUndefined utilise ==, qui effectue une vérification d'égalité lâche, auquel cas null et undefined donneront tous deux true ici. Vous pouvez en savoir plus à ce sujet

La syntaxe courte et recommandée pour ce faire est d'utiliser les .

Typescript Tutorial
Learn Typescript
Typescript Documentation
JSDoc
var vs let
ici
Fonctions fléchées
Needle Engine Scripting