|
@@ -21,12 +21,15 @@ Creating your first script
|
|
In this lesson, you will code your first script to make the Godot icon turn in
|
|
In this lesson, you will code your first script to make the Godot icon turn in
|
|
circles using GDScript. As we mentioned :ref:`in the introduction
|
|
circles using GDScript. As we mentioned :ref:`in the introduction
|
|
<toc-learn-introduction>`, we assume you have programming foundations.
|
|
<toc-learn-introduction>`, we assume you have programming foundations.
|
|
|
|
+The equivalent C# code has been included in another tab for convenience.
|
|
|
|
|
|
.. image:: img/scripting_first_script_rotating_godot.gif
|
|
.. image:: img/scripting_first_script_rotating_godot.gif
|
|
|
|
|
|
.. seealso:: To learn more about GDScript, its keywords, and its syntax, head to
|
|
.. seealso:: To learn more about GDScript, its keywords, and its syntax, head to
|
|
the :ref:`GDScript reference<doc_gdscript>`.
|
|
the :ref:`GDScript reference<doc_gdscript>`.
|
|
|
|
|
|
|
|
+.. seealso:: To learn more about C#, head to the :ref:`C# basics <doc_c_sharp>` page.
|
|
|
|
+
|
|
Project setup
|
|
Project setup
|
|
-------------
|
|
-------------
|
|
|
|
|
|
@@ -91,6 +94,25 @@ following line of code:
|
|
|
|
|
|
extends Sprite
|
|
extends Sprite
|
|
|
|
|
|
|
|
+ .. code-tab:: csharp C#
|
|
|
|
+
|
|
|
|
+ public class Sprite : Godot.Sprite
|
|
|
|
+ // Declare member variables here. Examples:
|
|
|
|
+ // private int a = 2;
|
|
|
|
+ // private string b = "text";
|
|
|
|
+
|
|
|
|
+ // Called when the node enters the scene tree for the first time.
|
|
|
|
+ public override void _Ready()
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // // Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
|
|
+ // public override void _Process(float delta)
|
|
|
|
+ // {
|
|
|
|
+ //
|
|
|
|
+ // }
|
|
|
|
+
|
|
Every GDScript file is implicitly a class. The ``extends`` keyword defines the
|
|
Every GDScript file is implicitly a class. The ``extends`` keyword defines the
|
|
class this script inherits or extends. In this case, it's ``Sprite``, meaning
|
|
class this script inherits or extends. In this case, it's ``Sprite``, meaning
|
|
our script will get access to all the properties and functions of the Sprite
|
|
our script will get access to all the properties and functions of the Sprite
|
|
@@ -127,6 +149,14 @@ Add the following code to your script:
|
|
func _init():
|
|
func _init():
|
|
print("Hello, world!")
|
|
print("Hello, world!")
|
|
|
|
|
|
|
|
+ .. code-tab:: csharp C#
|
|
|
|
+
|
|
|
|
+ public Sprite()
|
|
|
|
+ {
|
|
|
|
+ GD.Print("Hello, world!");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
Let's break it down. The ``func`` keyword defines a new function named
|
|
Let's break it down. The ``func`` keyword defines a new function named
|
|
``_init``. This is a special name for our class's constructor. The engine calls
|
|
``_init``. This is a special name for our class's constructor. The engine calls
|
|
``_init()`` on every object or node upon creating it in memory, if you define
|
|
``_init()`` on every object or node upon creating it in memory, if you define
|
|
@@ -158,6 +188,11 @@ angular speed in radians per second.
|
|
var speed = 400
|
|
var speed = 400
|
|
var angular_speed = PI
|
|
var angular_speed = PI
|
|
|
|
|
|
|
|
+ .. code-tab:: csharp C#
|
|
|
|
+
|
|
|
|
+ private int Speed = 400;
|
|
|
|
+ private float AngularSpeed = Mathf.Pi;
|
|
|
|
+
|
|
Member variables sit near the top of the script, after any "extends" lines,
|
|
Member variables sit near the top of the script, after any "extends" lines,
|
|
but before functions. Every node
|
|
but before functions. Every node
|
|
instance with this script attached to it will have its own copy of the ``speed``
|
|
instance with this script attached to it will have its own copy of the ``speed``
|
|
@@ -194,6 +229,13 @@ At the bottom of the script, define the function:
|
|
func _process(delta):
|
|
func _process(delta):
|
|
rotation += angular_speed * delta
|
|
rotation += angular_speed * delta
|
|
|
|
|
|
|
|
+ .. code-tab:: csharp C#
|
|
|
|
+
|
|
|
|
+ public override void _Process(float delta)
|
|
|
|
+ {
|
|
|
|
+ Rotation += AngularSpeed * delta;
|
|
|
|
+ }
|
|
|
|
+
|
|
The ``func`` keyword defines a new function. After it, we have to write the
|
|
The ``func`` keyword defines a new function. After it, we have to write the
|
|
function's name and arguments it takes in parentheses. A colon ends the
|
|
function's name and arguments it takes in parentheses. A colon ends the
|
|
definition, and the indented blocks that follow are the function's content or
|
|
definition, and the indented blocks that follow are the function's content or
|
|
@@ -231,6 +273,12 @@ them.
|
|
|
|
|
|
position += velocity * delta
|
|
position += velocity * delta
|
|
|
|
|
|
|
|
+ .. code-tab:: csharp C#
|
|
|
|
+
|
|
|
|
+ var velocity = Vector2.Up.Rotated(Rotation) * Speed;
|
|
|
|
+
|
|
|
|
+ Position += velocity * delta;
|
|
|
|
+
|
|
As we already saw, the ``var`` keyword defines a new variable. If you put it at
|
|
As we already saw, the ``var`` keyword defines a new variable. If you put it at
|
|
the top of the script, it defines a property of the class. Inside a function, it
|
|
the top of the script, it defines a property of the class. Inside a function, it
|
|
defines a local variable: it only exists within the function's scope.
|
|
defines a local variable: it only exists within the function's scope.
|
|
@@ -277,3 +325,22 @@ Here is the complete ``Sprite.gd`` file for reference.
|
|
var velocity = Vector2.UP.rotated(rotation) * speed
|
|
var velocity = Vector2.UP.rotated(rotation) * speed
|
|
|
|
|
|
position += velocity * delta
|
|
position += velocity * delta
|
|
|
|
+
|
|
|
|
+ .. code-tab:: csharp C#
|
|
|
|
+
|
|
|
|
+ using Godot;
|
|
|
|
+
|
|
|
|
+ public class Sprite : Godot.Sprite
|
|
|
|
+ {
|
|
|
|
+ private int Speed = 400;
|
|
|
|
+ private float AngularSpeed = Mathf.Pi;
|
|
|
|
+
|
|
|
|
+ public override void _Process(float delta)
|
|
|
|
+ {
|
|
|
|
+ Rotation += AngularSpeed * delta;
|
|
|
|
+ var velocity = Vector2.Up.Rotated(Rotation) * Speed;
|
|
|
|
+
|
|
|
|
+ Position += velocity * delta;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|