Cr1stal99 | Дата: Вторник, 17 Декабря 2024, 20:17 | Сообщение # 1 |
уже был
Сейчас нет на сайте
| Прошу прощения, если я вдруг создал тему не там где нужно, я тут совсем недавно
Хочу сразу уточнить что версия моего движка Godot 4.0 и я не могу перейти на версию выше, потому-что там какие-то проблемы с отображением интерфейса, текст отображается криво, видно только половину диагонально, сцена точно также - видно только половину по диагонали.
Уважаемые игроделы, перед тем как написать на форум, я правда долго пытался решить проблему сам, ну как сам, с помощью искусственного интеллекта и видео уроков, буду честен, я не имею опыта и знаний, но загорелся желанием создать относительно простую 3D игру с 2D пиксельными персонажами (2.5D). Мне удалось добавить в сцену анимированного персонажа, настроить управление и смену анимации, добавил в сцену три стены (ноды типа StaticBody в ветке которых есть MeshInstence и CollisionShade) для экспериментов с камерой и сижу теперь ломаю голову, пытаясь настроить камеру так, чтобы проходя мимо препятствий камера приближалась и возвращалась в обратное положение когда препятствий нет. Сначала я думал о том, что это понадобится для того, чтобы персонаж имел возможность войти внутрь здания, а потом понял, что интуитивная камера должна быть в моём проекте в любом случае, так как свободного осмотра камерой я делать пока не буду и в таком случае персонаж будет постоянно теряться за зданиями в сцене. У меня есть RayCast3D, он является дочерним нодом для Camera3D. Отладчик абсолютно молчит, никаких ошибок, но камера не реагирует вообще и двигается так, как двигалась раньше, то-есть только в зависимости от передвижения персонажа, так как камера является дочерней ему. Вот код который висит на камере:
extends Camera3D
@export var target: CharacterBody3D # Узел, к которому привязана камера (например, персонаж) @export var min_distance: float = 2.0 # Минимальная дистанция камеры до цели @export var max_distance: float = 10.0 # Максимальная дистанция камеры до цели @export var camera_speed: float = 5.0 # Скорость перемещения камеры
var current_distance: float = max_distance # Текущая дистанция var raycast: RayCast3D # RayCast для проверки препятствий
func _ready(): # Создаём и настраиваем RayCast3D raycast = RayCast3D.new() add_child(raycast) raycast.collide_with_areas = true raycast.collide_with_bodies = true
func _physics_process(delta): if not target: return
# Направляем RayCast от камеры к цели var target_position = target.global_position var camera_direction = (global_position - target_position).normalized() # Направление от камеры к цели
# Обновляем RayCast с расчётом позиции камеры raycast.global_position = global_position raycast.target_position = target_position # Луч должен идти от камеры к цели
# Проверяем, сталкивается ли луч с препятствием if raycast.is_colliding(): # При столкновении с препятствием - уменьшаем дистанцию камеры var collision_point = raycast.get_collision_point() var distance_to_collision = (collision_point - target_position).length() current_distance = lerp(current_distance, max(min_distance, distance_to_collision), camera_speed * delta) else: # Если препятствий нет, возвращаем дистанцию к максимальному значению current_distance = lerp(current_distance, max_distance, camera_speed * delta)
# Обновляем позицию камеры global_position = target_position - camera_direction * current_distance look_at(target_position) # Ориентируем камеру на цель
Прошу помощи у вас, те, кто читает этот пост, буду очень благодарен. Спасибо за внимание
Прикреплю пару скриншотов, чтобы было чуть более широкое представление о проекте Ссылка на imgur: https://imgur.com/a/TpOoUvd
P.S. На данный момент попробовал установить плагин высоконастраиваемой камеры, много ошибок, не работает как надо. Удалось настроить сближение и отдаление с помощью ArmSpring3D но камера слегка дёргается когда отдаляется или сближается
Сообщение отредактировал Cr1stal99 - Вторник, 17 Декабря 2024, 21:53 |
|
| |