114 lines
5.1 KiB
C#
Raw Normal View History

2025-11-18 02:08:07 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
2025-11-20 15:18:11 +08:00
public class CharacterManager1 : MonoBehaviour
2025-11-18 02:08:07 +08:00
{
// ========= SerializeField =============
2025-11-20 00:57:10 +08:00
[SerializeField] private List<GameObject> friendPrefabs;
[SerializeField] private List<GameObject> enemyPrefabs;
[SerializeField] private Transform characterContainer;
[SerializeField] private Transform enemyContainer;
[SerializeField] private Camera mainCamera;
[SerializeField] private bool showDebugObject = false;
2025-11-18 02:08:07 +08:00
2025-11-20 00:57:10 +08:00
// ========== Public ==============
private readonly List<Vector3> enemyPositionList = new List<Vector3>();
private readonly List<Vector3> characterPositionList = new List<Vector3>();
2025-11-20 14:43:50 +08:00
private readonly List<Character1> renderCharacterList = new List<Character1>();
private readonly List<Character1> renderEnemyList = new List<Character1>();
2025-11-18 02:08:07 +08:00
// ========== Private ================
2025-11-20 00:57:10 +08:00
private GameObject debug_object;
2025-11-18 02:08:07 +08:00
private void Start()
{
2025-11-20 00:57:10 +08:00
if (mainCamera == null) mainCamera = Camera.main;
// debug_object = Instantiate<GameObject>(friendPrefabs[0],
// Vector3.zero + characterContainer.position, Quaternion.identity, characterContainer);
// debug_object.name = "DebugObject";
// debug_object.SetActive(showDebugObject);
// math_world_position_point();
// render_character_sprite(true);
// render_character_sprite(false);
}
public void RenderCharacterSprite()
{
for (var i = 0; i < friendPrefabs.Count; i++)
2025-11-18 02:08:07 +08:00
{
2025-11-20 00:57:10 +08:00
STRUCT_TURN_CHARACTER.CHARACTER_RENDER_DATA characterRenderData;
characterRenderData.IS_ENEMY = false;
characterRenderData.RENDER_POSITION = characterPositionList[i];
characterRenderData.RENDER_PREFAB = friendPrefabs[i];
characterRenderData.NAME = "Character_" + i;
characterRenderData.ROTATION = Quaternion.identity;
Transform parent_transform = characterContainer;
GameObject character = Instantiate<GameObject>(
characterRenderData.RENDER_PREFAB,
position: characterRenderData.RENDER_POSITION,
rotation: Quaternion.identity,
parent: parent_transform);
character.name = characterRenderData.NAME;
2025-11-20 14:43:50 +08:00
Character1 character_component = character.GetComponent<Character1>();
2025-11-20 00:57:10 +08:00
character_component.SetCharacterRenderData(characterRenderData);
renderCharacterList.Add(character_component);
2025-11-18 02:08:07 +08:00
}
}
2025-11-20 00:57:10 +08:00
public void RenderEnemySprite()
2025-11-18 02:08:07 +08:00
{
2025-11-20 00:57:10 +08:00
for (var i = 0; i < enemyPrefabs.Count; i++)
2025-11-18 02:08:07 +08:00
{
2025-11-20 00:57:10 +08:00
STRUCT_TURN_CHARACTER.CHARACTER_RENDER_DATA characterRenderData;
characterRenderData.IS_ENEMY = true;
characterRenderData.RENDER_POSITION = enemyPositionList[i];
characterRenderData.RENDER_PREFAB = enemyPrefabs[i];
characterRenderData.NAME = "Enemy_" + i;
characterRenderData.ROTATION = Quaternion.Euler(0, 180, 0);
Transform parent_transform = enemyContainer;
GameObject character = Instantiate<GameObject>(
characterRenderData.RENDER_PREFAB,
position: characterRenderData.RENDER_POSITION,
rotation: Quaternion.identity,
parent: parent_transform);
character.name = characterRenderData.NAME;
character.transform.GetChild(0).rotation = characterRenderData.ROTATION;
2025-11-20 14:43:50 +08:00
Character1 character_component = character.GetComponent<Character1>();
2025-11-20 00:57:10 +08:00
character_component.SetCharacterRenderData(characterRenderData);
renderEnemyList.Add(character_component);
2025-11-18 02:08:07 +08:00
}
2025-11-20 00:57:10 +08:00
}
public void MathWorldPositionPoint()
{
// 计算屏幕边界
float screen_half = Screen.width / 2f;
float screen_offset_right = screen_half / 6f; // 屏幕右边的偏移
float screen_offset_left = screen_half / 8f; // 屏幕左边的偏移
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(switch_screen_position_to_world_position(position_x));
enemyPositionList.Add(switch_screen_position_to_world_position(position_x_enemy));
}
Vector3 switch_screen_position_to_world_position(float screen_position_x)
2025-11-18 02:08:07 +08:00
{
2025-11-20 00:57:10 +08:00
Vector3 world_position = mainCamera!.ScreenToWorldPoint(
new Vector3(screen_position_x, Screen.height / 2f, 0));
world_position.y = world_position.y + characterContainer.transform.position.y;
world_position.z = 0;
return world_position;
2025-11-18 02:08:07 +08:00
}
}
}