My first 3D game with Godot 4.4
This commit is contained in:
16
mob/spawner/mob_spawner_3d.gd
Normal file
16
mob/spawner/mob_spawner_3d.gd
Normal file
@@ -0,0 +1,16 @@
|
||||
extends Node3D
|
||||
|
||||
@export var mob_to_spawn: PackedScene = null
|
||||
|
||||
signal mob_spawned(mob: Node)
|
||||
|
||||
@onready var marker_3d: Marker3D = %Marker3D
|
||||
@onready var timer: Timer = %Timer
|
||||
|
||||
|
||||
func _on_timer_timeout() -> void:
|
||||
var new_mob := mob_to_spawn.instantiate()
|
||||
add_child(new_mob)
|
||||
new_mob.global_transform = marker_3d.global_transform
|
||||
|
||||
mob_spawned.emit(new_mob)
|
||||
1
mob/spawner/mob_spawner_3d.gd.uid
Normal file
1
mob/spawner/mob_spawner_3d.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cu4e7af7nx5al
|
||||
21
mob/spawner/mob_spawner_3d.tscn
Normal file
21
mob/spawner/mob_spawner_3d.tscn
Normal file
@@ -0,0 +1,21 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://c0ky5ie5cfgh2"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cu4e7af7nx5al" path="res://mob/spawner/mob_spawner_3d.gd" id="1_ewxdg"]
|
||||
[ext_resource type="PackedScene" uid="uid://dtf66or38qi43" path="res://mob/spawner/spawner_model.tscn" id="2_ewxdg"]
|
||||
|
||||
[node name="MobSpawner3D" type="Node3D"]
|
||||
script = ExtResource("1_ewxdg")
|
||||
|
||||
[node name="spawner_model" parent="." instance=ExtResource("2_ewxdg")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 2.5, 0)
|
||||
|
||||
[node name="Marker3D" type="Marker3D" parent="spawner_model"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, -1.4, 0)
|
||||
|
||||
[node name="Timer" type="Timer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
wait_time = 5.0
|
||||
autostart = true
|
||||
|
||||
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]
|
||||
17
mob/spawner/spawner_halo.gdshader
Normal file
17
mob/spawner/spawner_halo.gdshader
Normal file
@@ -0,0 +1,17 @@
|
||||
shader_type spatial;
|
||||
uniform vec3 color : source_color;
|
||||
|
||||
float fresnel(float amount, vec3 normal, vec3 view)
|
||||
{
|
||||
return pow((1.0 - clamp(dot(normalize(normal), normalize(view)), 0.0, 1.0 )), amount);
|
||||
}
|
||||
|
||||
|
||||
void fragment() {
|
||||
float f = fresnel(0.8, NORMAL, VIEW);
|
||||
float wave = abs((sin((UV.y - TIME * 0.1) * 10.0 * PI) + 1.0) / 2.0);
|
||||
ALBEDO = color;
|
||||
EMISSION = color * 2.0;
|
||||
ALPHA = step(UV.y, wave) * (1.0 - UV.y) * (1.0 - f);
|
||||
|
||||
}
|
||||
1
mob/spawner/spawner_halo.gdshader.uid
Normal file
1
mob/spawner/spawner_halo.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cfnwyva3u4qeb
|
||||
BIN
mob/spawner/spawner_model.glb
Normal file
BIN
mob/spawner/spawner_model.glb
Normal file
Binary file not shown.
37
mob/spawner/spawner_model.glb.import
Normal file
37
mob/spawner/spawner_model.glb.import
Normal file
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://diiskgqfi7kay"
|
||||
path="res://.godot/imported/spawner_model.glb-2fcf57184c75ae05a59f6df1a9d9c89b.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://mob/spawner/spawner_model.glb"
|
||||
dest_files=["res://.godot/imported/spawner_model.glb-2fcf57184c75ae05a59f6df1a9d9c89b.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
85
mob/spawner/spawner_model.tscn
Normal file
85
mob/spawner/spawner_model.tscn
Normal file
@@ -0,0 +1,85 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://dtf66or38qi43"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://diiskgqfi7kay" path="res://mob/spawner/spawner_model.glb" id="1_bk78j"]
|
||||
[ext_resource type="Shader" uid="uid://cfnwyva3u4qeb" path="res://mob/spawner/spawner_halo.gdshader" id="2_lvlhh"]
|
||||
[ext_resource type="Material" uid="uid://jvnbftghahty" path="res://mob/spawner/spawner_screen_material.tres" id="3_p6j4b"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_rug3p"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("2_lvlhh")
|
||||
shader_parameter/color = Color(0.13153, 0.557624, 0.421582, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2xi82"]
|
||||
albedo_color = Color(0.879323, 0.706001, 0.185322, 1)
|
||||
metallic = 0.45
|
||||
metallic_specular = 0.75
|
||||
roughness = 0.25
|
||||
rim_enabled = true
|
||||
rim = 0.1
|
||||
rim_tint = 0.4
|
||||
clearcoat_enabled = true
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bk78j"]
|
||||
albedo_color = Color(0.646029, 0.646029, 0.646029, 1)
|
||||
metallic = 0.5
|
||||
roughness = 0.1
|
||||
rim_enabled = true
|
||||
rim = 0.1
|
||||
clearcoat_enabled = true
|
||||
|
||||
[sub_resource type="Animation" id="Animation_lvlhh"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Top:rotation")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -2.0944, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_bk78j"]
|
||||
resource_name = "idle"
|
||||
length = 0.5
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Top:rotation")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 6.28319, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_p6j4b"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_lvlhh"),
|
||||
&"idle": SubResource("Animation_bk78j")
|
||||
}
|
||||
|
||||
[node name="spawner_model" instance=ExtResource("1_bk78j")]
|
||||
|
||||
[node name="halo" parent="." index="0"]
|
||||
material_override = SubResource("ShaderMaterial_rug3p")
|
||||
|
||||
[node name="Body" parent="." index="1"]
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_2xi82")
|
||||
surface_material_override/1 = ExtResource("3_p6j4b")
|
||||
|
||||
[node name="Top" parent="." index="2"]
|
||||
transform = Transform3D(-0.500004, 0, -0.866023, 0, 1, 0, 0.866023, 0, -0.500004, 0, 0.783957, 0)
|
||||
material_override = SubResource("StandardMaterial3D_bk78j")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="3"]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_p6j4b")
|
||||
}
|
||||
autoplay = "idle"
|
||||
29
mob/spawner/spawner_screen.gdshader
Normal file
29
mob/spawner/spawner_screen.gdshader
Normal file
@@ -0,0 +1,29 @@
|
||||
shader_type spatial;
|
||||
|
||||
uniform vec4 screen_color : source_color;
|
||||
uniform sampler2D text_sampler : filter_nearest, repeat_enable;
|
||||
|
||||
uniform float ratio = 1.0;
|
||||
|
||||
uniform float pixel_size = 20.0;
|
||||
|
||||
uniform float intensity = 1.5;
|
||||
|
||||
void fragment() {
|
||||
vec2 scaled_uv = round(UV * pixel_size) / pixel_size;
|
||||
|
||||
vec2 grid_2d = sin(fract(UV * pixel_size + 0.5) * 3.14);
|
||||
float grid = grid_2d.x * grid_2d.y;
|
||||
grid = grid * 0.6 + 0.4;
|
||||
|
||||
float text = 1.0 - texture(text_sampler, scaled_uv * vec2(ratio, 1.0) + vec2(mod(TIME * 0.1, 1.0), 0.0)).x;
|
||||
|
||||
|
||||
ALBEDO = vec3(0.0);
|
||||
SPECULAR = 0.25;
|
||||
ROUGHNESS = 0.45;
|
||||
|
||||
|
||||
EMISSION = mix(screen_color.rgb * text, screen_color.rgb, screen_color.a) * grid * intensity;
|
||||
|
||||
}
|
||||
1
mob/spawner/spawner_screen.gdshader.uid
Normal file
1
mob/spawner/spawner_screen.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dhuj314m3wv1c
|
||||
13
mob/spawner/spawner_screen_material.tres
Normal file
13
mob/spawner/spawner_screen_material.tres
Normal file
@@ -0,0 +1,13 @@
|
||||
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://jvnbftghahty"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://dhuj314m3wv1c" path="res://mob/spawner/spawner_screen.gdshader" id="1_3sboa"]
|
||||
[ext_resource type="Texture2D" uid="uid://cioq2g05svse6" path="res://mob/spawner/spawner_text.png" id="2_871b8"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_3sboa")
|
||||
shader_parameter/screen_color = Color(0.336095, 0.77375, 0.569932, 0.027451)
|
||||
shader_parameter/text_sampler = ExtResource("2_871b8")
|
||||
shader_parameter/ratio = 0.25
|
||||
shader_parameter/pixel_size = 32.0
|
||||
shader_parameter/intensity = 1.5
|
||||
BIN
mob/spawner/spawner_text.png
Normal file
BIN
mob/spawner/spawner_text.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
36
mob/spawner/spawner_text.png.import
Normal file
36
mob/spawner/spawner_text.png.import
Normal file
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cioq2g05svse6"
|
||||
path.s3tc="res://.godot/imported/spawner_text.png-cddf989d7fb9d0d1fac3e9ed8d7837e4.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/spawner_text.png-cddf989d7fb9d0d1fac3e9ed8d7837e4.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://mob/spawner/spawner_text.png"
|
||||
dest_files=["res://.godot/imported/spawner_text.png-cddf989d7fb9d0d1fac3e9ed8d7837e4.s3tc.ctex", "res://.godot/imported/spawner_text.png-cddf989d7fb9d0d1fac3e9ed8d7837e4.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
Reference in New Issue
Block a user