[한수빈] 기존 코드로 변경
26.01.29 - 시작 시 설비 애니메이션 멈추고 층 별로 동작하게 만드는 로직 우선 스태시 - TopMenuPanel은 홈 화면으로 돌아가는 로직 추가한 버전으로 업로드
This commit is contained in:
@@ -33,7 +33,7 @@ namespace ChunilENG.Management
|
||||
[Range(0.1f, 2f)] public float scaleClamp;
|
||||
|
||||
private List<RectTransform> activeUIElements = new();
|
||||
private Vector3[] worldCorners = new Vector3[4]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: GC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>Ҵ<EFBFBD>
|
||||
private Vector3[] worldCorners = new Vector3[4]; // 개선사항: GC 방지용 미리 할당
|
||||
|
||||
public override async UniTask Init()
|
||||
{
|
||||
@@ -50,7 +50,7 @@ namespace ChunilENG.Management
|
||||
|
||||
private System.Collections.IEnumerator UpdateLoop()
|
||||
{
|
||||
var wait = new WaitForSeconds(updateInterval); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> updateInterval<61><6C><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
var wait = new WaitForSeconds(updateInterval); // 개선사항: 매 프레임 실행하던 로직을 updateInterval마다 실행하도록 변경
|
||||
while (true)
|
||||
{
|
||||
Profiler.BeginSample("MachineKPI_TotalUpdate");
|
||||
@@ -60,7 +60,7 @@ namespace ChunilENG.Management
|
||||
GroupOverlappingUIElements();
|
||||
}
|
||||
Profiler.EndSample();
|
||||
yield return wait; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD> <20>ۿ<EFBFBD><DBBF><EFBFBD> <20><> <20>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> ij<><C4B3><EFBFBD>ص<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> <20><EFBFBD> <20>Ҵ<EFBFBD> 0
|
||||
yield return wait; // 개선사항: 루프 밖에서 딱 한번 생성하여 캐싱해둔 것을 재사용 -> 메모리 할당 0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,14 +94,14 @@ namespace ChunilENG.Management
|
||||
machine.machineKPI = kpi;
|
||||
matchingMachines.Add(machine);
|
||||
kpiToMachines.Add(kpi, machine);
|
||||
machine.SetAnimationSpeed();
|
||||
// machine.SetAnimationSpeed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateMachineVisibilityAndScale()
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD> RangeDetection <EFBFBD>Լ<EFBFBD> -> <EFBFBD>ڷ<EFBFBD>ƾ <20>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD>ü<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 개선사항: 기존 RangeDetection 함수 -> 코루틴 안에서 실행되는 가시성 업데이트 루프에 포함
|
||||
int layerMask = LayerMask.GetMask("Camera", "Floor Wall");
|
||||
float t = Mathf.InverseLerp(cam.maxDistance, 0f, cam.currentDistance);
|
||||
float scaleValue = Mathf.Lerp(minScale, maxScale, t);
|
||||
@@ -118,7 +118,7 @@ namespace ChunilENG.Management
|
||||
{
|
||||
machine.machineKPI.Active();
|
||||
machine.machineKPI.transform.localScale = newScale;
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> <20><>ũ<EFBFBD><C5A9> <20><>ǥ<EFBFBD><C7A5> <20><>ȯ<EFBFBD>Ͽ<EFBFBD> 1<><31> <20><>ġ
|
||||
// 월드 좌표를 스크린 좌표로 변환하여 1차 배치
|
||||
Vector3 screenPos = Camera.main.WorldToScreenPoint(machine.centerPos + Vector3.up * defaultNameHeight);
|
||||
machine.machineKPI.transform.position = screenPos;
|
||||
activeUIElements.Add(machine.machineKPI.rectTransform);
|
||||
@@ -143,11 +143,11 @@ namespace ChunilENG.Management
|
||||
{
|
||||
if (activeUIElements.Count == 0) return;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uncheckedElements.Where(...) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Y<><59>ǥ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (LINQ <EFBFBD><EFBFBD><EFBFBD> List.Sort<EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
// 개선사항: uncheckedElements.Where(...) 같은 할당 연산 제거 -> 복잡한 그룹 계산 없이 정렬
|
||||
// 정렬: Y좌표 기준으로 정렬하여 아래서부터 쌓음 (LINQ 대신 List.Sort로 할당 방지)
|
||||
activeUIElements.Sort((a, b) => a.position.y.CompareTo(b.position.y));
|
||||
|
||||
// <EFBFBD>ܼ<EFBFBD>ȭ<EFBFBD><EFBFBD> <20><>ø <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><EFBFBD><D7B8>峪 <20><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ)
|
||||
// 단순화된 중첩 방지 로직 (그리드나 그룹핑 대신 순차적 체크)
|
||||
for (int i = 0; i < activeUIElements.Count; i++)
|
||||
{
|
||||
for (int j = i + 1; j < activeUIElements.Count; j++)
|
||||
@@ -157,7 +157,7 @@ namespace ChunilENG.Management
|
||||
|
||||
if (AreRectsOverlapping(rectA, rectB))
|
||||
{
|
||||
// <EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> B<><42> A <20><><EFBFBD><EFBFBD> <20>ø<EFBFBD>
|
||||
// 겹치면 B를 A 위로 올림
|
||||
float offset = rectA.rect.height * rectA.lossyScale.y;
|
||||
rectB.position = new Vector3(rectB.position.x, rectA.position.y + offset, rectB.position.z);
|
||||
}
|
||||
@@ -170,7 +170,7 @@ namespace ChunilENG.Management
|
||||
}
|
||||
private Rect GetWorldRect(RectTransform rectTransform)
|
||||
{
|
||||
rectTransform.GetWorldCorners(worldCorners); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: worldCorners<EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3> -> GetWorldRect ȣ<><C8A3> <20>ø<EFBFBD><C3B8><EFBFBD> <20><EFBFBD><DFBB>ϴ<EFBFBD> <20>迭 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
rectTransform.GetWorldCorners(worldCorners); // 개선사항: worldCorners를 멤버 변수로 캐싱 -> GetWorldRect 호출 시마다 발생하는 배열 생성 막음
|
||||
return new Rect(worldCorners[0], worldCorners[2] - worldCorners[0]);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace ChunilENG
|
||||
public class Machine : MonoBehaviour
|
||||
{
|
||||
public string machineName;
|
||||
public string code;
|
||||
public string code;
|
||||
public string[] typeOptions;
|
||||
public MachineInfoItem machineKPI;
|
||||
public Sprite previewImage;
|
||||
@@ -58,13 +58,13 @@ namespace ChunilENG
|
||||
animSpeed = 0f;
|
||||
}
|
||||
|
||||
foreach(var animator in animators)
|
||||
foreach (var animator in animators)
|
||||
{
|
||||
animator.speed = animSpeed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void ActiveHighLighter()
|
||||
{
|
||||
if (highLighter == null)
|
||||
@@ -79,7 +79,7 @@ namespace ChunilENG
|
||||
|
||||
highLighter.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int GetMachineFloorIndex()
|
||||
{
|
||||
@@ -98,6 +98,6 @@ namespace ChunilENG
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ using ChunilENG.Constants;
|
||||
using ChunilENG.UI;
|
||||
using ChunilENG.UI.Command;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using OCTOPUS_TWIN;
|
||||
using UnityEngine;
|
||||
using UVC.UI.Commands;
|
||||
using UVC.UI.Menu;
|
||||
@@ -62,7 +63,15 @@ namespace ChunilENG
|
||||
//홈 화면 돌아가기
|
||||
toolbarModel.AddStandardButton("홈 화면 돌아가기",
|
||||
$"{ResourceURL.uiSpriteFolderPath}TopToolBar/IMG_Exit",
|
||||
new ActionCommand(() => Debug.Log("홈 화면 돌아가기 창 열기")),
|
||||
new ActionCommand(() => {
|
||||
Debug.Log("홈 화면 돌아가기 창 열기");
|
||||
var controller = FindFirstObjectByType<ProjectListController>(FindObjectsInactive.Include);
|
||||
if (controller != null)
|
||||
{
|
||||
controller.ReturnHome();
|
||||
}
|
||||
}
|
||||
),
|
||||
"홈 화면 돌아가기 창을 엽니다.");
|
||||
|
||||
topToolBox.SetData(toolbarModel);
|
||||
|
||||
Reference in New Issue
Block a user