81 lines
3.5 KiB
C#
81 lines
3.5 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class ActionManager : MonoBehaviour
|
|
{
|
|
// ========= SerializeField =============
|
|
[SerializeField] private List<GameObject> friendPrefabs;
|
|
[SerializeField] private List<GameObject> enemyPrefabs;
|
|
[SerializeField] private Transform characterContainer;
|
|
[SerializeField] private Transform enemyContainer;
|
|
[SerializeField] private Camera mainCamera;
|
|
[SerializeField] private List<Vector3> characterPositionList;
|
|
[SerializeField] private List<Vector3> enemyPositionList;
|
|
// ========== Public ==============
|
|
|
|
|
|
// ========== Private ================
|
|
|
|
private GameObject debug_object;
|
|
|
|
|
|
private void Start()
|
|
{
|
|
if (mainCamera == null) mainCamera = Camera.main;
|
|
debug_object = Instantiate<GameObject>(friendPrefabs[0],
|
|
Vector3.zero + characterContainer.position, 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<GameObject> 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<GameObject>(
|
|
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.y = world_position.y + characterContainer.transform.position.y;
|
|
world_position.z = 0;
|
|
return world_position;
|
|
}
|
|
}
|
|
} |