Как создать объект с помощью gdscript? - PullRequest
2 голосов
/ 21 марта 2020

как уже упоминалось в заголовке, я хочу знать, как создать 3d-объект с помощью gdscript в godot 3.1. Я новичок в Годо. Я искал и следовал некоторым учебникам, и это действительно помогло. Я хочу знать, как

  1. создать куб
  2. добавить к нему текстуру изображения
  3. прикрепить к нему скрипт

с помощью GDScript , Я только узнал это

var cube1 = MeshInstance.new ()

Я немного знаю о подходе к сцене, но я хочу следовать этому, если это возможно. Большое спасибо заранее

1 Ответ

0 голосов
/ 31 марта 2020

Mirza,

Изначально ваш сценарий должен быть присоединен к родительскому узлу . Я использую простой Node объект. Измените это на любой тип вашего родительского узла.

Код прокомментирован, объясняя каждый шаг, необходимый для выполнения ваших пунктов, насколько мне известно. Я изменил порядок выполнения шагов 1 и 3 , поскольку необходимо установить скрипт до того, как его узел будет определен как дочерний для родителя , В противном случае, он следует той же последовательности, что и вы.

Перед созданием me sh вам понадобится Physics Object. То, что вы используете, зависит от вас.

extends Node  # or whatever object type it's attached to

# Preloads script to be attached
const my_script = preload("res://Scripts/your_script.gd")

func _ready():  # Runs when scene is initialized
    # STEP 1: add a cube to the scene
        # Step 1.1, create a Physics body.
        # I'm using a static body but this can be any
        # other type of Physics Body
    var cube = StaticBody.new()
    cube.transform.origin = Vector3(0, 0, 0)  # change initial pos here

    # STEP 3: attach script
        # It is actually required to have the script
        # attached before a node is defined as a child node
        # to the parent. So your step 3 goes here
    cube.set_script(my_script)

    self.add_child(cube)  # Add as a child node to self
        # Step 1.2, add a collision shape to the
        # Physics body, defining its shape to a Box (cube)
    var coll = CollisionShape.new()
    coll.shape = BoxShape.new()
    cube.add_child(coll)  # Add as a child node to cube
        # Step 1.3, add a mesh, so that it's visible
    var mesh = MeshInstance.new()
    mesh.mesh = CubeMesh.new()
    cube.add_child(mesh)  # Add as a child to cube

    # STEP 2: change texture
        # Step 2.1, load your texture from pc
    var new_texture = ImageTexture.new()
    new_texture.load("res://path/to/new_texture.png")
        # Step 2.2, get material from cube
    var cube_material = mesh.get_surface_material(0)
        # Step 2.3, change texture from material to your new texture
    cube_material.albedo_texture = new_texture

Надеюсь, это поможет. Любые вопросы, дайте мне знать.

...