Godot Version
4.4
Question
I have a question about inheriting classes in gdscript and using them in nodes.
Suppose I create a class BetterMarker2D inheriting from the built-in Marker2D and EvenBetterMarker2D inheriting from BetterMarker2D. Code:
better_marker_2d.gd
class_name BetterMarker2D
extends Marker2D
even_better_marker_2d.gd
class_name EvenBetterMarker2D
extends BetterMarker2D
I then create a new scene with Node2D and add markers to it:
- (add child node) Marker2D
- (add child node) Marker2D - (rename) Marker2DBetter - (attach script)
better_marker_2d.gd
- (add child node) Marker2D - (rename) Marker2DEvenBetter - (attach script)
even_better_marker_2d.gd
- (add child node) BetterMarker2D
- (add child node) EvenBetterMarker2D
Is there a difference for the engine between markers #2/#3 and #4/#5? The inspector recognizes their types from the extended classes, but in the saved tscn
file they differ with the added metadata/_custom_type_script
field.
In addition, in the case of #2/#3, you can detach the script at any time which causes them to return to the parent Marker3D class. In #4/#5, the script is grayed out and can only be overwritten by another.
Is any of these ways of creating nodes from custom classes recommended?
source code for test scene
[gd_scene load_steps=3 format=3 uid="uid://00y0nmjdardp"]
[ext_resource type="Script" uid="uid://cevksbngkitto" path="res://shenanigans/better_marker_2d.gd" id="1_i1iwd"]
[ext_resource type="Script" uid="uid://cq2pc8e55fxh1" path="res://shenanigans/even_better_marker_2d.gd" id="2_5ljrq"]
[node name="Test" type="Node2D"]
[node name="Marker2D" type="Marker2D" parent="."]
[node name="Marker2DBetter" type="Marker2D" parent="."]
script = ExtResource("1_i1iwd")
[node name="Marker2DEvenBetter" type="Marker2D" parent="."]
script = ExtResource("2_5ljrq")
[node name="BetterMarker2D" type="Marker2D" parent="."]
script = ExtResource("1_i1iwd")
metadata/_custom_type_script = "uid://cevksbngkitto"
[node name="EvenBetterMarker2D" type="Marker2D" parent="."]
script = ExtResource("2_5ljrq")
metadata/_custom_type_script = "uid://cq2pc8e55fxh1"