Commit 371ec1d7 authored by Gavin An's avatar Gavin An

최대 시야로 바꾸었을 때 맵 스크롤 안되도록

parent ad7d7f9a
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
- [x] RTS 3D 탑다운 카메라 컨트롤러 구현 (`src/core/rts_camera.gd`) - [x] RTS 3D 탑다운 카메라 컨트롤러 구현 (`src/core/rts_camera.gd`)
- WASD 키보드 입력 및 화면 가장자리(Screen Edge) 마우스 스크롤 대응 - WASD 키보드 입력 및 화면 가장자리(Screen Edge) 마우스 스크롤 대응
- 마우스 휠을 활용한 고도 기반 줌인/줌아웃 (피치 60도 고정각 보정) - 마우스 휠을 활용한 고도 기반 줌인/줌아웃 (피치 60도 고정각 보정)
- 맵 크기에 딱 들어차 여백을 최소화하도록 최대 줌 아웃 한계(`max_zoom`)를 15.0으로 튜닝
- 줌 아웃을 최대로 당겼을 때(전체 맵이 화면에 다 보일 때) 카메라 이동을 불가능하게 막고, 초점(`_target_focus`)을 맵 중앙`(0, 0)`으로 부드럽게 정렬(lerp)시키는 기능 구현 완료
### [x] 2단계: 글로벌 게임 매니저와 스테이지 시스템 ### [x] 2단계: 글로벌 게임 매니저와 스테이지 시스템
- [x] 글로벌 게임 매니저 AutoLoad 싱글톤 (`src/autoload/game_manager.gd`) 구현 - [x] 글로벌 게임 매니저 AutoLoad 싱글톤 (`src/autoload/game_manager.gd`) 구현
......
...@@ -11,7 +11,7 @@ extends Camera3D ...@@ -11,7 +11,7 @@ extends Camera3D
# 줌 범위 설정 # 줌 범위 설정
@export var min_zoom: float = 5.0 @export var min_zoom: float = 5.0
@export var max_zoom: float = 18.0 @export var max_zoom: float = 15.0
# 화면 가장자리 마우스 감지 여백 (픽셀 단위) # 화면 가장자리 마우스 감지 여백 (픽셀 단위)
@export var edge_margin: float = 15.0 @export var edge_margin: float = 15.0
...@@ -45,8 +45,13 @@ func _physics_process(delta: float) -> void: ...@@ -45,8 +45,13 @@ func _physics_process(delta: float) -> void:
# 1. 입력 방향 계산 # 1. 입력 방향 계산
var direction: Vector3 = _get_input_direction() var direction: Vector3 = _get_input_direction()
# 줌아웃이 최대치(max_zoom) 근처일 때는 카메라 이동을 차단하고 맵 중앙으로 초점을 부드럽게 복구
var is_max_zoom: bool = _target_zoom >= (max_zoom - 0.1)
# 2. 포커스 타겟 이동 # 2. 포커스 타겟 이동
if direction != Vector3.ZERO: if is_max_zoom:
_target_focus = _target_focus.lerp(Vector3.ZERO, delta * move_speed * 0.2)
elif direction != Vector3.ZERO:
_target_focus += direction * move_speed * delta _target_focus += direction * move_speed * delta
_target_focus.x = clampf(_target_focus.x, limit_min.x, limit_max.x) _target_focus.x = clampf(_target_focus.x, limit_min.x, limit_max.x)
_target_focus.z = clampf(_target_focus.z, limit_min.y, limit_max.y) _target_focus.z = clampf(_target_focus.z, limit_min.y, limit_max.y)
......
...@@ -317,7 +317,7 @@ func _attach_weapon() -> void: ...@@ -317,7 +317,7 @@ func _attach_weapon() -> void:
# 검의 로컬 스케일, 회전 및 오프셋 보정 (손안에 쏙 들어가도록) # 검의 로컬 스케일, 회전 및 오프셋 보정 (손안에 쏙 들어가도록)
# FBX 원본 메쉬 크기(AABB 약 0.008)가 매우 작으므로 150배 확대하여 캐릭터 스펙에 맞춤 # FBX 원본 메쉬 크기(AABB 약 0.008)가 매우 작으므로 150배 확대하여 캐릭터 스펙에 맞춤
weapon_inst.scale = Vector3(1.0, 1.0, 1.0) # 150배 확대 보정 weapon_inst.scale = Vector3(1.0, 1.0, 1.0) # 1배 확대 보정
weapon_inst.rotation_degrees = Vector3(90.0, 0.0, 90.0) # 검날 방향 보정 weapon_inst.rotation_degrees = Vector3(90.0, 0.0, 90.0) # 검날 방향 보정
weapon_inst.position = Vector3(0.0, 0.0, 0.0) weapon_inst.position = Vector3(0.0, 0.0, 0.0)
......
...@@ -47,7 +47,7 @@ func _initialize_unit_templates() -> void: ...@@ -47,7 +47,7 @@ func _initialize_unit_templates() -> void:
striker.unit_name = "Striker" striker.unit_name = "Striker"
striker.damage = 12.0 striker.damage = 12.0
striker.cooldown = 0.5 striker.cooldown = 0.5
striker.move_speed = 6.0 striker.move_speed = 10.0
striker.attack_range = 1.5 striker.attack_range = 1.5
striker.is_ranged = false striker.is_ranged = false
striker.unit_color = Color(0.12, 0.45, 0.85, 1.0) # 청색 striker.unit_color = Color(0.12, 0.45, 0.85, 1.0) # 청색
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
- WASD / 방향키를 통한 화면 이동 - WASD / 방향키를 통한 화면 이동
- 마우스 휠을 통한 줌인/줌아웃 - 마우스 휠을 통한 줌인/줌아웃
- 화면 가장자리에 마우스 위치 시 카메라 스크롤 (선택 사항) - 화면 가장자리에 마우스 위치 시 카메라 스크롤 (선택 사항)
- 최대 줌 아웃 시 화면을 맵에 가득 채우고(max_zoom = 15.0) 카메라 이동 차단 및 중앙 초점 정렬 연동
## [x] 2단계: 글로벌 게임 매니저와 스테이지 시스템 ## [x] 2단계: 글로벌 게임 매니저와 스테이지 시스템
- [x] 글로벌 게임 매니저 싱글톤 (`src/autoload/game_manager.gd`) 구현 - [x] 글로벌 게임 매니저 싱글톤 (`src/autoload/game_manager.gd`) 구현
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment