using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class ActionManager : MonoBehaviour { // ========= SerializeField ============= [SerializeField] private List friendPrefabs; [SerializeField] private List enemyPrefabs; [SerializeField] private Transform characterContainer; [SerializeField] private Transform enemyContainer; [SerializeField] private Camera mainCamera; [SerializeField] private List characterPositionList; [SerializeField] private List enemyPositionList; // ========== Public ============== // ========== Private ================ private GameObject debug_object; private void Start() { if (mainCamera == null) mainCamera = Camera.main; debug_object = Instantiate(friendPrefabs[0], Vector3.zero, Quaternion.identity, characterContainer); debug_object.name = "DebugObject"; m_self_math_world_position_point(); m_self_render_character_sprite(true); m_self_render_character_sprite(false); } private void m_self_render_character_sprite(bool is_character = false) { List prefab_list = is_character ? friendPrefabs : enemyPrefabs; for (int i = 0; i < prefab_list.Count; i++) { GameObject prefab = is_character ? friendPrefabs[i] : enemyPrefabs[i]; string prefab_name = is_character ? "Character" + prefab.name : "Enemy" + prefab.name; Transform parent_transform = is_character ? characterContainer : enemyContainer; Vector3 position = is_character ? characterPositionList[i] : enemyPositionList[i]; GameObject prefab_clone = Instantiate( prefab, position: position, rotation: Quaternion.identity, parent_transform); prefab_clone.name = prefab_name; } } private void m_self_math_world_position_point() { // 计算屏幕边界 float screen_half = Screen.width / 2f; float screen_offset_right = screen_half / 4f; // 屏幕右边的偏移 float screen_offset_left = screen_half / 5f; // 屏幕左边的偏移 float screen_in_fact_space = screen_half - screen_offset_right - screen_offset_left; // 屏幕内实际可用空间 float sprite_space = screen_in_fact_space / 3f; // 3张牌的实际可用空间 float _sprite_offset = (sprite_space * 0 + sprite_space * 1) / 2f; // 3张牌每张偏移 for (int i = 0; i < 3; i++) { float position_x = screen_offset_left + i * sprite_space + _sprite_offset; float position_x_enemy = screen_half + screen_offset_right + i * sprite_space + _sprite_offset; characterPositionList.Add(m_switch_screen_position_to_world_position(position_x)); enemyPositionList.Add(m_switch_screen_position_to_world_position(position_x_enemy)); } Vector3 m_switch_screen_position_to_world_position(float screen_position_x) { Vector3 world_position = mainCamera!.ScreenToWorldPoint( new Vector3(screen_position_x, Screen.height / 2f, 0)); world_position.z = 0; return world_position; } } }