파일 인코딩 utf-8 아닌것 수정

This commit is contained in:
logonkhi
2025-08-11 18:49:20 +09:00
parent f12219872e
commit 6c1931a2c6
9 changed files with 804 additions and 805 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,4 @@
using Cysharp.Threading.Tasks;
using NUnit.Framework;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -357,7 +356,7 @@ namespace UVC.Data.Mqtt
var newPackets = buffer.Where(p => !p.IsPropagated).ToList();
if (newPackets.Count > 0)
{
@@ -366,7 +365,7 @@ namespace UVC.Data.Mqtt
//타임스탬프 순으로 정렬
newPackets.Sort((p1, p2) => p1.Timestamp.CompareTo(p2.Timestamp));
// 중요: 이 콜백은 Worker 스레드에서 직접 호출됩니다.
listeners[topic]?.Invoke(topic, newPackets);
}
catch (Exception ex)

View File

@@ -4,29 +4,29 @@ using UVC.Log;
namespace UVC.Extension
{
/// <summary>
/// RenderTexture 확장 메서드를 제공하는 클래스입니다.
/// RenderTexture 확장 메서드를 제공하는 클래스입니다.
/// </summary>
public static class RenderTextureEx
{
/// <summary>
/// RenderTexture를 Texture2D로 변환합니다.
/// RenderTexture를 Texture2D로 변환합니다.
/// </summary>
/// <param name="renderTexture">변환할 RenderTexture 객체</param>
/// <returns>변환된 Texture2D 객체</returns>
/// <param name="renderTexture">변환할 RenderTexture 객체</param>
/// <returns>변환된 Texture2D 객체</returns>
/// <example>
/// 사용 예시:
/// 사용 예시:
/// <code>
/// // RenderTexture 생성
/// // RenderTexture 생성
/// RenderTexture renderTexture = new RenderTexture(256, 256, 24);
///
/// // 카메라에서 renderTexture에 렌더링
/// // 카메라에서 renderTexture에 렌더링
/// Camera.main.targetTexture = renderTexture;
/// Camera.main.Render();
///
/// // RenderTexture를 Texture2D로 변환
/// // RenderTexture를 Texture2D로 변환
/// Texture2D texture2D = renderTexture.ToTexture2D();
///
/// // 사용 후 정리
/// // 사용 후 정리
/// Camera.main.targetTexture = null;
/// Camera.main.ResetAspect();
/// </code>
@@ -41,13 +41,13 @@ namespace UVC.Extension
}
/// <summary>
/// RenderTexture를 바이트 배열로 변환합니다.
/// RenderTexture를 바이트 배열로 변환합니다.
/// </summary>
/// <param name="renderTexture">변환할 RenderTexture 객체</param>
/// <param name="format">이미지 형식 (기본값: PNG)</param>
/// <returns>바이트 배열</returns>
/// <param name="renderTexture">변환할 RenderTexture 객체</param>
/// <param name="format">이미지 형식 (기본값: PNG)</param>
/// <returns>바이트 배열</returns>
/// <example>
/// 사용 예시:
/// 사용 예시:
/// <code>
/// RenderTexture rt = new RenderTexture(256, 256, 24);
/// byte[] bytes = rt.ToBytes();
@@ -63,13 +63,13 @@ namespace UVC.Extension
}
/// <summary>
/// RenderTexture를 지정된 경로에 PNG 파일로 저장합니다.
/// RenderTexture를 지정된 경로에 PNG 파일로 저장합니다.
/// </summary>
/// <param name="renderTexture">저장할 RenderTexture 객체</param>
/// <param name="filePath">저장할 파일 경로</param>
/// <returns>성공 여부</returns>
/// <param name="renderTexture">저장할 RenderTexture 객체</param>
/// <param name="filePath">저장할 파일 경로</param>
/// <returns>성공 여부</returns>
/// <example>
/// 사용 예시:
/// 사용 예시:
/// <code>
/// RenderTexture rt = new RenderTexture(256, 256, 24);
/// Camera.main.targetTexture = rt;
@@ -88,24 +88,24 @@ namespace UVC.Extension
}
catch (System.Exception e)
{
ULog.Error($"RenderTexture를 PNG로 저장하는 데 실패했습니다: {e.Message}", e);
ULog.Error($"RenderTexture를 PNG로 저장하는 데 실패했습니다: {e.Message}", e);
return false;
}
}
/// <summary>
/// RenderTexture의 크기를 조정합니다.
/// RenderTexture의 크기를 조정합니다.
/// </summary>
/// <param name="renderTexture">원본 RenderTexture</param>
/// <param name="width">새 너비</param>
/// <param name="height">새 높이</param>
/// <returns>크기가 조정된 새로운 RenderTexture</returns>
/// <param name="renderTexture">원본 RenderTexture</param>
/// <param name="width">새 너비</param>
/// <param name="height">새 높이</param>
/// <returns>크기가 조정된 새로운 RenderTexture</returns>
/// <example>
/// 사용 예시:
/// 사용 예시:
/// <code>
/// RenderTexture originalRT = new RenderTexture(1024, 1024, 24);
/// RenderTexture resizedRT = originalRT.Resize(512, 512);
/// // 사용 후 정리
/// // 사용 후 정리
/// resizedRT.Release();
/// originalRT.Release();
/// </code>

View File

@@ -6,7 +6,7 @@ namespace UVC.Linq
{
public static partial class GameObjectExtensions
{
/// <summary>소스 컬렉션에 있는 모든 GameObject의 조상을 포함하는 GameObject 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션에 있는 모든 GameObject의 조상을 포함하는 GameObject 컬렉션을 반환합니다.</summary>
public static IEnumerable<GameObject> Ancestors(this IEnumerable<GameObject> source)
{
foreach (var item in source)
@@ -19,7 +19,7 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션의 모든 GameObject와 이들의 조상 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션의 모든 GameObject와 이들의 조상 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
public static IEnumerable<GameObject> AncestorsAndSelf(this IEnumerable<GameObject> source)
{
foreach (var item in source)
@@ -32,8 +32,8 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션에 있는 모든 GameObject의 자손 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
/// <param name="descendIntoChildren">자식 객체를 순회할지 결정하는 조건 함수입니다. null이면 모든 자식을 순회합니다.</param>
/// <summary>소스 컬렉션에 있는 모든 GameObject의 자손 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
/// <param name="descendIntoChildren">자식 객체를 순회할지 결정하는 조건 함수입니다. null이면 모든 자식을 순회합니다.</param>
public static IEnumerable<GameObject> Descendants(this IEnumerable<GameObject> source, Func<Transform, bool> descendIntoChildren = null)
{
foreach (var item in source)
@@ -46,7 +46,7 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션의 모든 GameObject와 이들의 자손 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션의 모든 GameObject와 이들의 자손 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
public static IEnumerable<GameObject> DescendantsAndSelf(this IEnumerable<GameObject> source, Func<Transform, bool> descendIntoChildren = null)
{
foreach (var item in source)
@@ -59,7 +59,7 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션에 있는 모든 GameObject의 자식 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션에 있는 모든 GameObject의 자식 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
public static IEnumerable<GameObject> Children(this IEnumerable<GameObject> source)
{
foreach (var item in source)
@@ -72,7 +72,7 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션의 모든 GameObject와 이들의 자식 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션의 모든 GameObject와 이들의 자식 GameObject를 포함하는 컬렉션을 반환합니다.</summary>
public static IEnumerable<GameObject> ChildrenAndSelf(this IEnumerable<GameObject> source)
{
foreach (var item in source)
@@ -85,9 +85,9 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션에 있는 모든 GameObject를 안전하게(null 체크 포함) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드에서는 true로 설정하거나 !Application.isPlaying을 전달하세요.</param>
/// <param name="detachParent">부모를 null로 설정합니다.</param>
/// <summary>소스 컬렉션에 있는 모든 GameObject를 안전하게(null 체크 포함) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드에서는 true로 설정하거나 !Application.isPlaying을 전달하세요.</param>
/// <param name="detachParent">부모를 null로 설정합니다.</param>
public static void Destroy(this IEnumerable<GameObject> source, bool useDestroyImmediate = false, bool detachParent = false)
{
if (detachParent)
@@ -108,9 +108,9 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션에서 지정된 컴포넌트 타입의 컬렉션을 반환합니다.</summary>
/// <typeparam name="T">검색할 컴포넌트의 타입입니다.</typeparam>
/// <remarks>에디터 모드에서는 메모리 할당을 최소화하기 위한 캐시 메커니즘을 사용합니다.</remarks>
/// <summary>소스 컬렉션에서 지정된 컴포넌트 타입의 컬렉션을 반환합니다.</summary>
/// <typeparam name="T">검색할 컴포넌트의 타입입니다.</typeparam>
/// <remarks>에디터 모드에서는 메모리 할당을 최소화하기 위한 캐시 메커니즘을 사용합니다.</remarks>
public static IEnumerable<T> OfComponent<T>(this IEnumerable<GameObject> source)
where T : UnityEngine.Component
{
@@ -144,10 +144,10 @@ namespace UVC.Linq
}
#endif
/// <summary>요소를 버퍼에 저장하고, 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <param name="source">저장할 요소들의 소스 컬렉션입니다.</param>
/// <param name="array">요소를 저장할 배열 참조입니다. 필요에 따라 크기가 조정됩니다.</param>
/// <returns>배열에 저장된 요소의 수를 반환합니다.</returns>
/// <summary>요소를 버퍼에 저장하고, 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <param name="source">저장할 요소들의 소스 컬렉션입니다.</param>
/// <param name="array">요소를 저장할 배열 참조입니다. 필요에 따라 크기가 조정됩니다.</param>
/// <returns>배열에 저장된 요소의 수를 반환합니다.</returns>
public static int ToArrayNonAlloc<T>(this IEnumerable<T> source, ref T[] array)
{
var index = 0;

View File

@@ -7,30 +7,30 @@ using UnityEngine;
namespace UVC.Linq
{
/// <summary>
/// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입입니다.
/// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입입니다.
/// </summary>
public enum TransformCloneType
{
/// <summary>원본과 동일하게 설정합니다. Add 메소드의 기본값입니다.</summary>
/// <summary>원본과 동일하게 설정합니다. Add 메소드의 기본값입니다.</summary>
KeepOriginal,
/// <summary>부모와 동일하게 설정합니다.</summary>
/// <summary>부모와 동일하게 설정합니다.</summary>
FollowParent,
/// <summary>Position = 영벡터, Scale = 단위벡터, Rotation = 항등 회전으로 설정합니다.</summary>
/// <summary>Position = 영벡터, Scale = 단위벡터, Rotation = 항등 회전으로 설정합니다.</summary>
Origin,
/// <summary>Position/Scale/Rotation을 그대로 유지합니다.</summary>
/// <summary>Position/Scale/Rotation을 그대로 유지합니다.</summary>
DoNothing
}
/// <summary>
/// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입입니다.
/// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입입니다.
/// </summary>
public enum TransformMoveType
{
/// <summary>부모와 동일하게 설정합니다.</summary>
/// <summary>부모와 동일하게 설정합니다.</summary>
FollowParent,
/// <summary>Position = 영벡터, Scale = 단위벡터, Rotation = 항등 회전으로 설정합니다.</summary>
/// <summary>Position = 영벡터, Scale = 단위벡터, Rotation = 항등 회전으로 설정합니다.</summary>
Origin,
/// <summary>Position/Scale/Rotation을 그대로 유지합니다.</summary>
/// <summary>Position/Scale/Rotation을 그대로 유지합니다.</summary>
DoNothing
}
@@ -57,14 +57,14 @@ namespace UVC.Linq
#region Add
/// <summary>
/// <para>GameObject/Component를 이 GameObject의 자식으로 추가합니다. 대상이 복제됩니다.</para>
/// <para>GameObject/Component를 이 GameObject의 자식으로 추가합니다. 대상이 복제됩니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginal">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginal">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T Add<T>(this GameObject parent, T childOriginal, TransformCloneType cloneType = TransformCloneType.KeepOriginal, bool? setActive = null, string? specifiedName = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -75,7 +75,7 @@ namespace UVC.Linq
var childGameObject = GetGameObject(child);
// uGUI의 경우 SetParent(parent, false)를 사용해야 합니다
// uGUI의 경우 SetParent(parent, false)를 사용해야 합니다
var childTransform = childGameObject.transform;
#if !(UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5)
var rectTransform = childTransform as RectTransform;
@@ -132,21 +132,21 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject의 자식으로 추가합니다. 대상이 복제됩니다.</para>
/// <para>GameObject/Component를 이 GameObject의 자식으로 추가합니다. 대상이 복제됩니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginals">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginals">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T[] AddRange<T>(this GameObject parent, IEnumerable<T> childOriginals, TransformCloneType cloneType = TransformCloneType.KeepOriginal, bool? setActive = null, string specifiedName = null, bool setLayer = false)
where T : UnityEngine.Object
{
if (parent == null) throw new ArgumentNullException("parent");
if (childOriginals == null) throw new ArgumentNullException("childOriginals");
// 반복 최적화
// 반복 최적화
{
var array = childOriginals as T[];
if (array != null)
@@ -188,14 +188,14 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject의 첫 번째 자식으로 추가합니다. 대상이 복제됩니다.</para>
/// <para>GameObject/Component를 이 GameObject의 첫 번째 자식으로 추가합니다. 대상이 복제됩니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginal">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginal">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T AddFirst<T>(this GameObject parent, T childOriginal, TransformCloneType cloneType = TransformCloneType.KeepOriginal, bool? setActive = null, string specifiedName = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -208,14 +208,14 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject의 첫 번째 자식으로 추가합니다. 대상이 복제됩니다.</para>
/// <para>GameObject/Component를 이 GameObject의 첫 번째 자식으로 추가합니다. 대상이 복제됩니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginals">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginals">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T[] AddFirstRange<T>(this GameObject parent, IEnumerable<T> childOriginals, TransformCloneType cloneType = TransformCloneType.KeepOriginal, bool? setActive = null, string specifiedName = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -230,14 +230,14 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject 앞에 추가합니다. 대상이 복제됩니다.</para>
/// <para>GameObject/Component를 이 GameObject 앞에 추가합니다. 대상이 복제됩니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginal">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginal">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T AddBeforeSelf<T>(this GameObject parent, T childOriginal, TransformCloneType cloneType = TransformCloneType.KeepOriginal, bool? setActive = null, string specifiedName = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -256,14 +256,14 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject 앞에 추가합니다. 대상이 복제됩니다.</para>
/// <para>GameObject/Component를 이 GameObject 앞에 추가합니다. 대상이 복제됩니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginals">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginals">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T[] AddBeforeSelfRange<T>(this GameObject parent, IEnumerable<T> childOriginals, TransformCloneType cloneType = TransformCloneType.KeepOriginal, bool? setActive = null, string specifiedName = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -283,14 +283,14 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject 뒤에 추가합니다. 대상이 복제됩니다.</para>
/// <para>GameObject/Component를 이 GameObject 뒤에 추가합니다. 대상이 복제됩니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginal">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginal">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T AddAfterSelf<T>(this GameObject parent, T childOriginal, TransformCloneType cloneType = TransformCloneType.KeepOriginal, bool? setActive = null, string specifiedName = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -307,14 +307,14 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject 뒤에 추가합니다. 대상이 복제됩니다.</para>
/// <para>GameObject/Component를 이 GameObject 뒤에 추가합니다. 대상이 복제됩니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginals">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childOriginals">복제할 대상입니다.</param>
/// <param name="cloneType">복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="specifiedName">자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T[] AddAfterSelfRange<T>(this GameObject parent, IEnumerable<T> childOriginals, TransformCloneType cloneType = TransformCloneType.KeepOriginal, bool? setActive = null, string specifiedName = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -338,13 +338,13 @@ namespace UVC.Linq
#region Move
/// <summary>
/// <para>GameObject/Component를 이 GameObject의 자식으로 이동합니다.</para>
/// <para>GameObject/Component를 이 GameObject의 자식으로 이동합니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="child">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="child">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T MoveToLast<T>(this GameObject parent, T child, TransformMoveType moveType = TransformMoveType.DoNothing, bool? setActive = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -354,7 +354,7 @@ namespace UVC.Linq
var childGameObject = GetGameObject(child);
if (child == null) return child;
// uGUI의 경우 SetParent(parent, false)를 사용해야 합니다
// uGUI의 경우 SetParent(parent, false)를 사용해야 합니다
var childTransform = childGameObject.transform;
#if !(UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5)
var rectTransform = childTransform as RectTransform;
@@ -400,20 +400,20 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject의 자식으로 이동합니다.</para>
/// <para>GameObject/Component를 이 GameObject의 자식으로 이동합니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childs">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childs">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T[] MoveToLastRange<T>(this GameObject parent, IEnumerable<T> childs, TransformMoveType moveType = TransformMoveType.DoNothing, bool? setActive = null, bool setLayer = false)
where T : UnityEngine.Object
{
if (parent == null) throw new ArgumentNullException("parent");
if (childs == null) throw new ArgumentNullException("childs");
// 반복 최적화
// 반복 최적화
{
var array = childs as T[];
if (array != null)
@@ -454,13 +454,13 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject의 첫 번째 자식으로 이동합니다.</para>
/// <para>GameObject/Component를 이 GameObject의 첫 번째 자식으로 이동합니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="child">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="child">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T MoveToFirst<T>(this GameObject parent, T child, TransformMoveType moveType = TransformMoveType.DoNothing, bool? setActive = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -473,13 +473,13 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject의 첫 번째 자식으로 이동합니다.</para>
/// <para>GameObject/Component를 이 GameObject의 첫 번째 자식으로 이동합니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childs">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childs">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T[] MoveToFirstRange<T>(this GameObject parent, IEnumerable<T> childs, TransformMoveType moveType = TransformMoveType.DoNothing, bool? setActive = null, bool setLayer = false)
where T : UnityEngine.Object
{
@@ -495,18 +495,18 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject 앞으로 이동합니다.</para>
/// <para>GameObject/Component를 이 GameObject 앞으로 이동합니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="child">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="child">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T MoveToBeforeSelf<T>(this GameObject parent, T child, TransformMoveType moveType = TransformMoveType.DoNothing, bool? setActive = null, bool setLayer = false)
where T : UnityEngine.Object
{
var root = parent.Parent();
if (root == null) throw new InvalidOperationException("부모 루트가 null입니다");
if (root == null) throw new InvalidOperationException("부모 루트가 null입니다");
var sibilingIndex = parent.transform.GetSiblingIndex();
@@ -519,18 +519,18 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject 앞으로 이동합니다.</para>
/// <para>GameObject/Component를 이 GameObject 앞으로 이동합니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childs">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childs">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T[] MoveToBeforeSelfRange<T>(this GameObject parent, IEnumerable<T> childs, TransformMoveType moveType = TransformMoveType.DoNothing, bool? setActive = null, bool setLayer = false)
where T : UnityEngine.Object
{
var root = parent.Parent();
if (root == null) throw new InvalidOperationException("부모 루트가 null입니다");
if (root == null) throw new InvalidOperationException("부모 루트가 null입니다");
var sibilingIndex = parent.transform.GetSiblingIndex();
var child = MoveToLastRange(root, childs, moveType, setActive, setLayer);
@@ -546,18 +546,18 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject 뒤로 이동합니다.</para>
/// <para>GameObject/Component를 이 GameObject 뒤로 이동합니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="child">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="child">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T MoveToAfterSelf<T>(this GameObject parent, T child, TransformMoveType moveType = TransformMoveType.DoNothing, bool? setActive = null, bool setLayer = false)
where T : UnityEngine.Object
{
var root = parent.Parent();
if (root == null) throw new InvalidOperationException("부모 루트가 null입니다");
if (root == null) throw new InvalidOperationException("부모 루트가 null입니다");
var sibilingIndex = parent.transform.GetSiblingIndex() + 1;
MoveToLast(root, child, moveType, setActive, setLayer);
@@ -569,18 +569,18 @@ namespace UVC.Linq
}
/// <summary>
/// <para>GameObject/Component를 이 GameObject 뒤로 이동합니다.</para>
/// <para>GameObject/Component를 이 GameObject 뒤로 이동합니다.</para>
/// </summary>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childs">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
/// <param name="parent">부모 GameObject입니다.</param>
/// <param name="childs">대상입니다.</param>
/// <param name="moveType">이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다.</param>
/// <param name="setActive">자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다.</param>
/// <param name="setLayer">자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다.</param>
public static T[] MoveToAfterSelfRange<T>(this GameObject parent, IEnumerable<T> childs, TransformMoveType moveType = TransformMoveType.DoNothing, bool? setActive = null, bool setLayer = false)
where T : UnityEngine.Object
{
var root = parent.Parent();
if (root == null) throw new InvalidOperationException("부모 루트가 null입니다");
if (root == null) throw new InvalidOperationException("부모 루트가 null입니다");
var sibilingIndex = parent.transform.GetSiblingIndex() + 1;
var child = MoveToLastRange(root, childs, moveType, setActive, setLayer);
@@ -597,9 +597,9 @@ namespace UVC.Linq
#endregion
/// <summary>이 GameObject를 안전하게(null 체크) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드에서는 true로 설정하거나 !Application.isPlaying을 전달하세요.</param>
/// <param name="detachParent">부모를 null로 설정합니다.</param>
/// <summary>이 GameObject를 안전하게(null 체크) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드에서는 true로 설정하거나 !Application.isPlaying을 전달하세요.</param>
/// <param name="detachParent">부모를 null로 설정합니다.</param>
public static void Destroy(this GameObject self, bool useDestroyImmediate = false, bool detachParent = false)
{
if (self == null) return;

View File

@@ -8,8 +8,8 @@ namespace UVC.Linq
public static partial class GameObjectExtensions
{
/// 축(부모, 자식, 자식들, 조상/자손, 이전 형제/이후 형제 객체)을 기반으로 게임 객체를 순회합니다.
/// <summary>이 GameObject의 부모 GameObject를 가져옵니다. 이 GameObject에 부모가 없으면 null을 반환합니다.</summary>
/// 축(부모, 자식, 자식들, 조상/자손, 이전 형제/이후 형제 객체)을 기반으로 게임 객체를 순회합니다.
/// <summary>이 GameObject의 부모 GameObject를 가져옵니다. 이 GameObject에 부모가 없으면 null을 반환합니다.</summary>
public static GameObject Parent(this GameObject origin)
{
if (origin == null) return null;
@@ -20,77 +20,77 @@ namespace UVC.Linq
return parentTransform.gameObject;
}
/// <summary>지정된 이름을 가진 첫 번째 자식 GameObject를 가져옵니다. 지정된 이름을 가진 GameObject가 없으면 null을 반환합니다.</summary>
/// <summary>지정된 이름을 가진 첫 번째 자식 GameObject를 가져옵니다. 지정된 이름을 가진 GameObject가 없으면 null을 반환합니다.</summary>
public static GameObject Child(this GameObject origin, string name)
{
if (origin == null) return null;
var child = origin.transform.Find(name); // transform.find는 비활성 객체를 가져올 수 있습니다.
var child = origin.transform.Find(name); // transform.find는 비활성 객체를 가져올 수 있습니다.
if (child == null) return null;
return child.gameObject;
}
/// <summary>자식 GameObject의 컬렉션을 반환합니다.</summary>
/// <summary>자식 GameObject의 컬렉션을 반환합니다.</summary>
public static ChildrenEnumerable Children(this GameObject origin)
{
return new ChildrenEnumerable(origin, false);
}
/// <summary>이 GameObject와 자식 GameObject를 포함하는 GameObject 컬렉션을 반환합니다.</summary>
/// <summary>이 GameObject와 자식 GameObject를 포함하는 GameObject 컬렉션을 반환합니다.</summary>
public static ChildrenEnumerable ChildrenAndSelf(this GameObject origin)
{
return new ChildrenEnumerable(origin, true);
}
/// <summary>이 GameObject의 조상 GameObject 컬렉션을 반환합니다.</summary>
/// <summary>이 GameObject의 조상 GameObject 컬렉션을 반환합니다.</summary>
public static AncestorsEnumerable Ancestors(this GameObject origin)
{
return new AncestorsEnumerable(origin, false);
}
/// <summary>이 요소와 이 GameObject의 조상을 포함하는 GameObject 컬렉션을 반환합니다.</summary>
/// <summary>이 요소와 이 GameObject의 조상을 포함하는 GameObject 컬렉션을 반환합니다.</summary>
public static AncestorsEnumerable AncestorsAndSelf(this GameObject origin)
{
return new AncestorsEnumerable(origin, true);
}
/// <summary>자손 GameObject의 컬렉션을 반환합니다.</summary>
/// <summary>자손 GameObject의 컬렉션을 반환합니다.</summary>
public static DescendantsEnumerable Descendants(this GameObject origin, Func<Transform, bool> descendIntoChildren = null)
{
return new DescendantsEnumerable(origin, false, descendIntoChildren);
}
/// <summary>이 GameObject와 이 GameObject의 모든 자손 GameObject를 포함하는 GameObject 컬렉션을 반환합니다.</summary>
/// <summary>이 GameObject와 이 GameObject의 모든 자손 GameObject를 포함하는 GameObject 컬렉션을 반환합니다.</summary>
public static DescendantsEnumerable DescendantsAndSelf(this GameObject origin, Func<Transform, bool> descendIntoChildren = null)
{
return new DescendantsEnumerable(origin, true, descendIntoChildren);
}
/// <summary>이 GameObject 이전의 형제 GameObject 컬렉션을 반환합니다.</summary>
/// <summary>이 GameObject 이전의 형제 GameObject 컬렉션을 반환합니다.</summary>
public static BeforeSelfEnumerable BeforeSelf(this GameObject origin)
{
return new BeforeSelfEnumerable(origin, false);
}
/// <summary>이 GameObject와 이 GameObject 이전의 형제 GameObject를 포함하는 GameObject 컬렉션을 반환합니다.</summary>
/// <summary>이 GameObject와 이 GameObject 이전의 형제 GameObject를 포함하는 GameObject 컬렉션을 반환합니다.</summary>
public static BeforeSelfEnumerable BeforeSelfAndSelf(this GameObject origin)
{
return new BeforeSelfEnumerable(origin, true);
}
/// <summary>이 GameObject 이후의 형제 GameObject 컬렉션을 반환합니다.</summary>
/// <summary>이 GameObject 이후의 형제 GameObject 컬렉션을 반환합니다.</summary>
public static AfterSelfEnumerable AfterSelf(this GameObject origin)
{
return new AfterSelfEnumerable(origin, false);
}
/// <summary>이 GameObject와 이 GameObject 이후의 형제 GameObject를 포함하는 GameObject 컬렉션을 반환합니다.</summary>
/// <summary>이 GameObject와 이 GameObject 이후의 형제 GameObject를 포함하는 GameObject 컬렉션을 반환합니다.</summary>
public static AfterSelfEnumerable AfterSelfAndSelf(this GameObject origin)
{
return new AfterSelfEnumerable(origin, true);
}
// 수동 구조체 열거자를 구현합니다.
// 수동 구조체 열거자를 구현합니다.
public struct ChildrenEnumerable : IEnumerable<GameObject>
{
@@ -103,16 +103,16 @@ namespace UVC.Linq
this.withSelf = withSelf;
}
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
public OfComponentEnumerable<T> OfComponent<T>()
where T : Component
{
return new OfComponentEnumerable<T>(ref this);
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <param name="detachParent">parent = null로 설정합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <param name="detachParent">parent = null로 설정합니다.</param>
public void Destroy(bool useDestroyImmediate = false, bool detachParent = false)
{
var e = GetEnumerator();
@@ -134,8 +134,8 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
public void Destroy(Func<GameObject, bool> predicate, bool useDestroyImmediate = false)
{
var e = GetEnumerator();
@@ -151,7 +151,7 @@ namespace UVC.Linq
public Enumerator GetEnumerator()
{
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
return (origin == null)
? new Enumerator(null, withSelf, false)
: new Enumerator(origin.transform, withSelf, true);
@@ -183,12 +183,12 @@ namespace UVC.Linq
}
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref GameObject[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -203,11 +203,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(Func<GameObject, bool> filter, ref GameObject[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -224,11 +224,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -243,11 +243,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, bool> filter, Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -264,11 +264,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<TState, T>(Func<GameObject, TState> let, Func<TState, bool> filter, Func<TState, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -351,7 +351,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
@@ -367,7 +367,7 @@ namespace UVC.Linq
public struct Enumerator : IEnumerator<GameObject>
{
readonly int childCount; // childCount는 GetEnumerator가 호출될 때 고정됩니다.
readonly int childCount; // childCount는 GetEnumerator가 호출될 때 고정됩니다.
readonly Transform originTransform;
readonly bool canRun;
@@ -459,7 +459,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
@@ -482,7 +482,7 @@ namespace UVC.Linq
return array;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref T[] array)
{
var index = 0;
@@ -506,11 +506,11 @@ namespace UVC.Linq
public struct OfComponentEnumerator<T> : IEnumerator<T>
where T : Component
{
Enumerator enumerator; // 열거자는 변경 가능합니다.
Enumerator enumerator; // 열거자는 변경 가능합니다.
T current;
#if UNITY_EDITOR
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
#endif
public OfComponentEnumerator(ref ChildrenEnumerable parent)
@@ -563,15 +563,15 @@ namespace UVC.Linq
this.withSelf = withSelf;
}
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
public OfComponentEnumerable<T> OfComponent<T>()
where T : Component
{
return new OfComponentEnumerable<T>(ref this);
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
public void Destroy(bool useDestroyImmediate = false)
{
var e = GetEnumerator();
@@ -581,8 +581,8 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
public void Destroy(Func<GameObject, bool> predicate, bool useDestroyImmediate = false)
{
var e = GetEnumerator();
@@ -598,7 +598,7 @@ namespace UVC.Linq
public Enumerator GetEnumerator()
{
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
return (origin == null)
? new Enumerator(null, null, withSelf, false)
: new Enumerator(origin, origin.transform, withSelf, true);
@@ -625,12 +625,12 @@ namespace UVC.Linq
}
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref GameObject[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -645,11 +645,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(Func<GameObject, bool> filter, ref GameObject[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -666,11 +666,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -685,11 +685,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, bool> filter, Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -706,11 +706,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<TState, T>(Func<GameObject, TState> let, Func<TState, bool> filter, Func<TState, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -793,7 +793,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
@@ -829,7 +829,7 @@ namespace UVC.Linq
if (withSelf)
{
// withSelf, origin 및 originTransform 사용
// withSelf, origin 및 originTransform 사용
withSelf = false;
return true;
}
@@ -896,7 +896,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
@@ -919,7 +919,7 @@ namespace UVC.Linq
return array;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref T[] array)
{
var index = 0;
@@ -943,11 +943,11 @@ namespace UVC.Linq
public struct OfComponentEnumerator<T> : IEnumerator<T>
where T : Component
{
Enumerator enumerator; // 열거자는 변경 가능합니다.
Enumerator enumerator; // 열거자는 변경 가능합니다.
T current;
#if UNITY_EDITOR
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
#endif
public OfComponentEnumerator(ref AncestorsEnumerable parent)
@@ -1004,15 +1004,15 @@ namespace UVC.Linq
this.descendIntoChildren = descendIntoChildren ?? alwaysTrue;
}
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
public OfComponentEnumerable<T> OfComponent<T>()
where T : Component
{
return new OfComponentEnumerable<T>(ref this);
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
public void Destroy(bool useDestroyImmediate = false)
{
var e = GetEnumerator();
@@ -1022,8 +1022,8 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
public void Destroy(Func<GameObject, bool> predicate, bool useDestroyImmediate = false)
{
var e = GetEnumerator();
@@ -1039,7 +1039,7 @@ namespace UVC.Linq
public Enumerator GetEnumerator()
{
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
if (origin == null)
{
return new Enumerator(null, withSelf, false, null, descendIntoChildren);
@@ -1175,7 +1175,7 @@ namespace UVC.Linq
}
}
/// <summary>성능 최적화를 위해 내부 반복기를 사용합니다.</summary>
/// <summary>성능 최적화를 위해 내부 반복기를 사용합니다.</summary>
/// <param name="action"></param>
public void ForEach(Action<GameObject> action)
{
@@ -1187,7 +1187,7 @@ namespace UVC.Linq
DescendantsCore(ref originTransform, ref action);
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref GameObject[] array)
{
var index = 0;
@@ -1203,7 +1203,7 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(Func<GameObject, bool> filter, ref GameObject[] array)
{
var index = 0;
@@ -1218,7 +1218,7 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
@@ -1233,7 +1233,7 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, bool> filter, Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
@@ -1248,7 +1248,7 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<TState, T>(Func<GameObject, TState> let, Func<TState, bool> filter, Func<TState, T> selector, ref T[] array)
{
var index = 0;
@@ -1334,7 +1334,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
finally
@@ -1389,7 +1389,7 @@ namespace UVC.Linq
public struct Enumerator : IEnumerator<GameObject>
{
readonly int childCount; // childCount는 GetEnumerator가 호출될 때 고정됩니다.
readonly int childCount; // childCount는 GetEnumerator가 호출될 때 고정됩니다.
readonly Transform originTransform;
bool canRun;
@@ -1426,7 +1426,7 @@ namespace UVC.Linq
if (!withSelf && !descendIntoChildren(originTransform))
{
// 재사용
// 재사용
canRun = false;
InternalUnsafeRefStack.RefStackPool.Enqueue(sharedStack);
return false;
@@ -1438,7 +1438,7 @@ namespace UVC.Linq
}
else
{
// 재사용
// 재사용
canRun = false;
InternalUnsafeRefStack.RefStackPool.Enqueue(sharedStack);
return false;
@@ -1533,7 +1533,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
finally
@@ -1557,7 +1557,7 @@ namespace UVC.Linq
}
}
/// <summary>성능 최적화를 위해 내부 반복기를 사용합니다.</summary>
/// <summary>성능 최적화를 위해 내부 반복기를 사용합니다.</summary>
public void ForEach(Action<T> action)
{
if (parent.withSelf)
@@ -1597,7 +1597,7 @@ namespace UVC.Linq
}
#if UNITY_EDITOR
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
#endif
void OfComponentDescendantsCore(ref Transform transform, ref Action<T> action)
@@ -1663,7 +1663,7 @@ namespace UVC.Linq
}
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref T[] array)
{
var index = 0;
@@ -1705,11 +1705,11 @@ namespace UVC.Linq
public struct OfComponentEnumerator<T> : IEnumerator<T>
where T : Component
{
Enumerator enumerator; // 열거자는 변경 가능합니다.
Enumerator enumerator; // 열거자는 변경 가능합니다.
T current;
#if UNITY_EDITOR
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
#endif
public OfComponentEnumerator(ref DescendantsEnumerable parent)
@@ -1767,15 +1767,15 @@ namespace UVC.Linq
this.withSelf = withSelf;
}
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
public OfComponentEnumerable<T> OfComponent<T>()
where T : Component
{
return new OfComponentEnumerable<T>(ref this);
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
public void Destroy(bool useDestroyImmediate = false)
{
var e = GetEnumerator();
@@ -1785,8 +1785,8 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
public void Destroy(Func<GameObject, bool> predicate, bool useDestroyImmediate = false)
{
var e = GetEnumerator();
@@ -1802,7 +1802,7 @@ namespace UVC.Linq
public Enumerator GetEnumerator()
{
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
return (origin == null)
? new Enumerator(null, withSelf, false)
: new Enumerator(origin.transform, withSelf, true);
@@ -1829,12 +1829,12 @@ namespace UVC.Linq
}
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref GameObject[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -1849,11 +1849,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(Func<GameObject, bool> filter, ref GameObject[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -1870,11 +1870,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -1889,11 +1889,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, bool> filter, Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -1910,11 +1910,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<TState, T>(Func<GameObject, TState> let, Func<TState, bool> filter, Func<TState, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -1997,7 +1997,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
@@ -2013,7 +2013,7 @@ namespace UVC.Linq
public struct Enumerator : IEnumerator<GameObject>
{
readonly int childCount; // childCount는 GetEnumerator가 호출될 때 고정됩니다.
readonly int childCount; // childCount는 GetEnumerator가 호출될 때 고정됩니다.
readonly Transform originTransform;
bool canRun;
@@ -2058,7 +2058,7 @@ namespace UVC.Linq
{
current = originTransform.gameObject;
withSelf = false;
canRun = false; // 자신에게 도달했으므로 실행 완료.
canRun = false; // 자신에게 도달했으므로 실행 완료.
return true;
}
@@ -2116,7 +2116,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
@@ -2139,7 +2139,7 @@ namespace UVC.Linq
return array;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref T[] array)
{
var index = 0;
@@ -2163,11 +2163,11 @@ namespace UVC.Linq
public struct OfComponentEnumerator<T> : IEnumerator<T>
where T : Component
{
Enumerator enumerator; // 열거자는 변경 가능합니다.
Enumerator enumerator; // 열거자는 변경 가능합니다.
T current;
#if UNITY_EDITOR
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
#endif
public OfComponentEnumerator(ref BeforeSelfEnumerable parent)
@@ -2220,15 +2220,15 @@ namespace UVC.Linq
this.withSelf = withSelf;
}
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
/// <summary>소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다.</summary>
public OfComponentEnumerable<T> OfComponent<T>()
where T : Component
{
return new OfComponentEnumerable<T>(ref this);
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
public void Destroy(bool useDestroyImmediate = false)
{
var e = GetEnumerator();
@@ -2238,8 +2238,8 @@ namespace UVC.Linq
}
}
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
/// <summary>소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다.</summary>
/// <param name="useDestroyImmediate">에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다.</param>
public void Destroy(Func<GameObject, bool> predicate, bool useDestroyImmediate = false)
{
var e = GetEnumerator();
@@ -2255,7 +2255,7 @@ namespace UVC.Linq
public Enumerator GetEnumerator()
{
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
// GetEnumerator 시점에만 GameObject가 파괴되었는지 확인합니다.
return (origin == null)
? new Enumerator(null, withSelf, false)
: new Enumerator(origin.transform, withSelf, true);
@@ -2282,12 +2282,12 @@ namespace UVC.Linq
}
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref GameObject[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -2302,11 +2302,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(Func<GameObject, bool> filter, ref GameObject[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -2323,11 +2323,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -2342,11 +2342,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<T>(Func<GameObject, bool> filter, Func<GameObject, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -2363,11 +2363,11 @@ namespace UVC.Linq
return index;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc<TState, T>(Func<GameObject, TState> let, Func<TState, bool> filter, Func<TState, T> selector, ref T[] array)
{
var index = 0;
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
var e = this.GetEnumerator(); // Dispose를 호출할 필요가 없습니다.
while (e.MoveNext())
{
var item = e.Current;
@@ -2450,7 +2450,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
@@ -2466,7 +2466,7 @@ namespace UVC.Linq
public struct Enumerator : IEnumerator<GameObject>
{
readonly int childCount; // childCount는 GetEnumerator가 호출될 때 고정됩니다.
readonly int childCount; // childCount는 GetEnumerator가 호출될 때 고정됩니다.
readonly Transform originTransform;
readonly bool canRun;
@@ -2558,7 +2558,7 @@ namespace UVC.Linq
}
else
{
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
throw new InvalidOperationException("시퀀스가 비어 있습니다.");
}
}
@@ -2581,7 +2581,7 @@ namespace UVC.Linq
return array;
}
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
/// <summary>요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다.</summary>
public int ToArrayNonAlloc(ref T[] array)
{
var index = 0;
@@ -2605,11 +2605,11 @@ namespace UVC.Linq
public struct OfComponentEnumerator<T> : IEnumerator<T>
where T : Component
{
Enumerator enumerator; // 열거자는 변경 가능합니다.
Enumerator enumerator; // 열거자는 변경 가능합니다.
T current;
#if UNITY_EDITOR
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
static List<T> componentCache = new List<T>(); // UNITY_EDITOR에서 할당 없음을 위함
#endif
public OfComponentEnumerator(ref AfterSelfEnumerable parent)

View File

@@ -9,7 +9,7 @@ namespace UVC.Util
/// hex code to color #FFFFFF
/// </summary>
/// <param name="hexCode">#rrggbb</param>
/// <returns>Color °´Ã¼</returns>
/// <returns>Color</returns>
/// <example>
/// // Example usage:
/// Color color = ColorUtil.FromHex("#FF5733");
@@ -32,7 +32,7 @@ namespace UVC.Util
/// </summary>
/// <param name="hexCode">#rrggbb</param>
/// <param name="alpha">0.0~1.0</param>
/// <returns>Color °´Ã¼</returns>
/// <returns>Color</returns>
/// <example>
/// // Example usage:
/// Color colorWithAlpha = ColorUtil.FromHex("#FF5733", 0.5f);

View File

@@ -3,16 +3,16 @@ using UnityEngine;
namespace UVC.Util
{
/// <summary>
/// Unity에서 프리팹 경로를 통해 GameObject를 생성하거나 특정 컴포넌트를 가져오는 유틸리티 클래스입니다.
/// Unity에서 프리팹 경로를 통해 GameObject를 생성하거나 특정 컴포넌트를 가져오는 유틸리티 클래스입니다.
/// </summary>
public static class GameObjectUtil
{
/// <summary>
/// 주어진 프리팹 경로를 통해 GameObject를 생성합니다.
/// 주어진 프리팹 경로를 통해 GameObject를 생성합니다.
/// </summary>
/// <param name="prefabPath">프리팹의 Resources 경로</param>
/// <param name="parent">생성된 GameObject의 부모 Transform (선택 사항)</param>
/// <returns>생성된 GameObject</returns>
/// <param name="prefabPath">프리팹의 Resources 경로</param>
/// <param name="parent">생성된 GameObject의 부모 Transform (선택 사항)</param>
/// <returns>생성된 GameObject</returns>
/// <example>
/// <code>
/// string prefabPath = "Prefabs/MyPrefab";
@@ -27,12 +27,12 @@ namespace UVC.Util
}
/// <summary>
/// 주어진 프리팹 경로를 통해 특정 타입의 컴포넌트를 가져옵니다.
/// 주어진 프리팹 경로를 통해 특정 타입의 컴포넌트를 가져옵니다.
/// </summary>
/// <typeparam name="T">가져올 컴포넌트 타입</typeparam>
/// <param name="prefabPath">프리팹의 Resources 경로</param>
/// <param name="parent">생성된 GameObject의 부모 Transform (선택 사항)</param>
/// <returns>생성된 GameObject에서 가져온 컴포넌트</returns>
/// <typeparam name="T">가져올 컴포넌트 타입</typeparam>
/// <param name="prefabPath">프리팹의 Resources 경로</param>
/// <param name="parent">생성된 GameObject의 부모 Transform (선택 사항)</param>
/// <returns>생성된 GameObject에서 가져온 컴포넌트</returns>
/// <example>
/// <code>
/// string prefabPath = "Prefabs/MyPrefab";

View File

@@ -3,12 +3,12 @@ using UnityEngine;
namespace UVC.Util
{
/// <summary>
/// GizmoDraw 클래스는 Unity의 Gizmo를 사용하여 Sphere, Box, 또는 Mesh를 그리는 기능을 제공합니다.
/// GizmoDraw 클래스는 Unity의 Gizmo를 사용하여 Sphere, Box, 또는 Mesh를 그리는 기능을 제공합니다.
/// </summary>
public class GizmoDraw : MonoBehaviour
{
/// <summary>
/// Gizmo의 타입을 정의합니다. Sphere, Box, 또는 Mesh 중 하나를 선택할 수 있습니다.
/// Gizmo의 타입을 정의합니다. Sphere, Box, 또는 Mesh 중 하나를 선택할 수 있습니다.
/// </summary>
public enum GizmoType
{
@@ -18,52 +18,52 @@ namespace UVC.Util
}
/// <summary>
/// 현재 Gizmo의 타입을 설정합니다.
/// 현재 Gizmo의 타입을 설정합니다.
/// </summary>
public GizmoType gizmoType;
/// <summary>
/// Gizmo를 화면에 표시할지 여부를 설정합니다.
/// Gizmo를 화면에 표시할지 여부를 설정합니다.
/// </summary>
public bool show = true;
/// <summary>
/// Gizmo를 와이어프레임으로 그릴지 여부를 설정합니다.
/// Gizmo를 와이어프레임으로 그릴지 여부를 설정합니다.
/// </summary>
public bool wire = false;
/// <summary>
/// Gizmo의 색상을 설정합니다.
/// Gizmo의 색상을 설정합니다.
/// </summary>
[SerializeField]
private Color color = Color.yellow;
/// <summary>
/// Sphere Gizmo의 반지름을 설정합니다.
/// Sphere Gizmo의 반지름을 설정합니다.
/// </summary>
[SerializeField]
private float radius = 1f;
/// <summary>
/// Box Gizmo의 경계(Bounds)를 설정합니다.
/// Box Gizmo의 경계(Bounds)를 설정합니다.
/// </summary>
public Bounds bounds = new Bounds(Vector3.zero, Vector3.one);
/// <summary>
/// Mesh Gizmo를 그릴 때 사용할 Mesh를 설정합니다.
/// Mesh Gizmo를 그릴 때 사용할 Mesh를 설정합니다.
/// </summary>
public Mesh mesh;
/// <summary>
/// Mesh Gizmo의 스케일을 설정합니다.
/// Mesh Gizmo의 스케일을 설정합니다.
/// </summary>
public float scale = 1f;
/// <summary>
/// Unity의 Gizmo를 그리는 메소드입니다. Unity 에디터에서만 동작합니다.
/// Unity의 Gizmo를 그리는 메소드입니다. Unity 에디터에서만 동작합니다.
/// </summary>
/// <example>
/// GizmoDraw 컴포넌트를 사용하여 Sphere를 그리는 예제:
/// GizmoDraw 컴포넌트를 사용하여 Sphere를 그리는 예제:
/// <code>
/// var gizmoDraw = gameObject.AddComponent<GizmoDraw>();
/// gizmoDraw.gizmoType = GizmoDraw.GizmoType.Sphere;