- 그룹 상호작용에 따른 하이라이트 효과 적용 1. 마우스 커서 올림 - 하얀색 외곽선 2. 그룹 선택 - 파란색 외곽선 - Arrow, Archer 코루틴 문제 구조 변경 - FieldOfView 인터페이스화 - new input system Unit Action 추가 - GameManager 슬로우모드(부대 선택시) 추가 - Ai 전체 프리팹 stat 수치 변경 - 원거리 이동 중에 공격시 멈추면서 공격하도록 변경 - Layer, ProjectSetting Physics 추가 및변경
121 lines
3.6 KiB
C#
121 lines
3.6 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
namespace BlueWaterProject
|
|
{
|
|
public class UnitSelection : MonoBehaviour
|
|
{
|
|
#region Property and variable
|
|
|
|
[Tooltip("선택된 부대")]
|
|
[SerializeField] private UnitController selectedUnitController;
|
|
public UnitController SelectedUnitController
|
|
{
|
|
get => selectedUnitController;
|
|
set
|
|
{
|
|
tempUnitController = selectedUnitController;
|
|
selectedUnitController = value;
|
|
|
|
if (selectedUnitController == null)
|
|
{
|
|
if (tempUnitController != null)
|
|
{
|
|
foreach (var soldier in tempUnitController.unit.soldierList)
|
|
{
|
|
soldier.ResetHighlight();
|
|
}
|
|
tempUnitController = null;
|
|
}
|
|
|
|
GameManager.Inst.DefaultSpeedMode();
|
|
}
|
|
else
|
|
{
|
|
GameManager.Inst.SlowSpeedMode();
|
|
}
|
|
}
|
|
}
|
|
|
|
[SerializeField] private LayerMask unitLayer;
|
|
[SerializeField] private LayerMask groundLayer;
|
|
|
|
private UnitController tempUnitController;
|
|
private Camera mainCamera;
|
|
|
|
#endregion
|
|
|
|
#region Unity built-in function
|
|
|
|
private void Reset()
|
|
{
|
|
unitLayer = LayerMask.GetMask("Pirate") | LayerMask.GetMask("Enemy");
|
|
groundLayer = LayerMask.GetMask("Ground");
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
var controls = new BlueWater();
|
|
|
|
controls.Unit.LeftClick.performed += OnLeftClick;
|
|
controls.Unit.RightClick.performed += OnRightClick;
|
|
controls.Enable();
|
|
|
|
unitLayer = LayerMask.GetMask("Pirate") | LayerMask.GetMask("Enemy");
|
|
groundLayer = LayerMask.GetMask("Ground");
|
|
|
|
mainCamera = Camera.main;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region New input system
|
|
|
|
private void OnLeftClick(InputAction.CallbackContext context)
|
|
{
|
|
if (!context.performed) return;
|
|
|
|
var ray = mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue());
|
|
|
|
if (Physics.Raycast(ray, out var hit, Mathf.Infinity, unitLayer))
|
|
{
|
|
var unitController = hit.collider.transform.parent.GetComponent<UnitController>();
|
|
if (unitController != null)
|
|
{
|
|
SelectedUnitController = unitController;
|
|
|
|
foreach (var soldier in selectedUnitController.unit.soldierList)
|
|
{
|
|
soldier.SelectedHighlight();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SelectedUnitController = null;
|
|
}
|
|
}
|
|
|
|
private void OnRightClick(InputAction.CallbackContext context)
|
|
{
|
|
if (!context.performed || SelectedUnitController == null) return;
|
|
|
|
var ray = mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue());
|
|
|
|
if (Physics.Raycast(ray, out var hit, Mathf.Infinity, groundLayer))
|
|
{
|
|
var targetPos = hit.point;
|
|
SelectedUnitController.MoveCommand(targetPos);
|
|
SelectedUnitController = null;
|
|
}
|
|
else
|
|
{
|
|
SelectedUnitController = null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |