From 6c1931a2c6bd3c1d9721141ea2137fd2008653b4 Mon Sep 17 00:00:00 2001 From: logonkhi Date: Mon, 11 Aug 2025 18:49:20 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=9D=B8=EC=BD=94?= =?UTF-8?q?=EB=94=A9=20utf-8=20=EC=95=84=EB=8B=8C=EA=B2=83=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/UVC/DB/SQLite.cs | 966 +++++++++--------- Assets/Scripts/UVC/Data/Mqtt/MqttWorker.cs | 5 +- .../Scripts/UVC/Extention/RenderTextureEx.cs | 54 +- .../Linq/GameObjectExtensions.Enumerable.cs | 34 +- .../UVC/Linq/GameObjectExtensions.Operate.cs | 248 ++--- .../UVC/Linq/GameObjectExtensions.Traverse.cs | 254 ++--- Assets/Scripts/UVC/util/ColorUtil.cs | 4 +- Assets/Scripts/UVC/util/GameObjectUtil.cs | 20 +- Assets/Scripts/UVC/util/GizmoDraw.cs | 24 +- 9 files changed, 804 insertions(+), 805 deletions(-) diff --git a/Assets/Scripts/UVC/DB/SQLite.cs b/Assets/Scripts/UVC/DB/SQLite.cs index 8eaa6944..cf13c836 100644 --- a/Assets/Scripts/UVC/DB/SQLite.cs +++ b/Assets/Scripts/UVC/DB/SQLite.cs @@ -49,13 +49,13 @@ using Sqlite3Statement = System.IntPtr; #endif /// -/// SQLite4Unity3d Unity ȯ濡 SQLite ְ ִ ̺귯Դϴ. -/// Ŭ SQLite ͺ̽ մϴ. +/// SQLite4Unity3d는 Unity 환경에서 SQLite를 쉽게 사용할 수 있게 해주는 라이브러리입니다. +/// 이 클래스는 SQLite 데이터베이스에 대한 연결을 관리합니다. /// namespace SQLite4Unity3d { /// - /// SQLite ۾ ߻ϴ ܸ óϱ ŬԴϴ. + /// SQLite 작업 중 발생하는 예외를 처리하기 위한 클래스입니다. /// public class SQLiteException : Exception { @@ -73,7 +73,7 @@ namespace SQLite4Unity3d } /// - /// NOT NULL ߻ϴ ܸ óϱ ŬԴϴ. + /// NOT NULL 제약 조건 위반 시 발생하는 예외를 처리하기 위한 클래스입니다. /// public class NotNullConstraintViolationException : SQLiteException { @@ -113,7 +113,7 @@ namespace SQLite4Unity3d } /// - /// SQLite ͺ̽ ɼǵ մϴ. + /// SQLite 데이터베이스 파일을 열기 위한 옵션들을 정의합니다. /// [Flags] public enum SQLiteOpenFlags @@ -128,7 +128,7 @@ namespace SQLite4Unity3d } /// - /// ̺ Ǵ ÷Դϴ. + /// 테이블 생성 시 사용되는 플래그입니다. /// [Flags] public enum CreateFlags @@ -142,7 +142,7 @@ namespace SQLite4Unity3d } /// - /// SQLite ͺ̽ Ÿϴ. + /// SQLite 데이터베이스에 대한 열린 연결을 나타냅니다. /// public partial class SQLiteConnection : IDisposable { @@ -161,18 +161,18 @@ namespace SQLite4Unity3d public string DatabasePath { get; private set; } - // ȭ ü Դϴ. + // 동기화 객체의 사전입니다. // - // ͺ̽ ջ ϱ ͺ̽ Ͽ ** ؾ մϴ. - // ̸ ͺ̽ Ͽ ȭ ü ϰ ϱ - // մϴ. - // Ű ͺ̽ ̰, lock() üԴϴ. + // 데이터베이스 파일 손상을 방지하기 위해 데이터베이스 파일에 *동기적으로* 접근해야 합니다. + // 이를 위해 각 데이터베이스 파일에 대한 동기화 객체를 생성하고 모든 연결 간에 공유하기 위해 + // 정적 사전에 저장합니다. + // 사전의 키는 데이터베이스 파일 경로이고, 값은 lock() 문에서 사용할 객체입니다. // - // : - // - ͺ̽ Ͻ ڵ ̷ϴ. - // - ¸ ϱ α׷ ͺ̽ ֽϴ: - // - RunInTransaction(Action) Ʈ ߿ ͺ̽ ޴ϴ(/Ʈ). - // - RunInDatabaseLock(Action) ϰ ͺ̽ Ʈ ϴ(). + // 사용 사례: + // - 데이터베이스 파일 잠금은 암시적으로 자동으로 이루어집니다. + // - 교착 상태를 방지하기 위해 응용 프로그램은 다음과 같은 방법으로 명시적으로 데이터베이스 파일을 잠글 수 있습니다: + // - RunInTransaction(Action)은 트랜잭션 중에 데이터베이스를 잠급니다(삽입/업데이트용). + // - RunInDatabaseLock(Action)은 비슷하게 데이터베이스를 잠그지만 트랜잭션은 없습니다(쿼리용). private static Dictionary syncObjects = new Dictionary(); #region debug tracing @@ -207,22 +207,22 @@ namespace SQLite4Unity3d public bool StoreDateTimeAsTicks { get; private set; } /// - /// ο SQLiteConnection ϰ SQLite ͺ̽ ϴ. + /// 새로운 SQLiteConnection을 생성하고 지정된 경로의 SQLite 데이터베이스를 엽니다. /// /// - /// ͺ̽ θ մϴ. + /// 데이터베이스 파일의 경로를 지정합니다. /// /// - /// DateTime Ӽ ƽ(true) Ǵ ڿ(false) մϴ. - /// Ʈ ݵ true ϴ ϴ. false ȣȯ Դϴ. - /// true ϸ ũ Ǹ ϴ. + /// DateTime 속성을 틱(true) 또는 문자열(false)로 저장할지 지정합니다. + /// 새 프로젝트에서는 반드시 true로 설정하는 것이 좋습니다. false는 이전 버전과의 호환성을 위한 것입니다. + /// true로 설정하면 성능이 크게 향상되며 단점이 없습니다. /// /// /// - /// // ⺻ ͺ̽ + /// // 기본 데이터베이스 연결 생성 /// var db = new SQLiteConnection(Application.persistentDataPath + "/myDatabase.db", true); /// - /// // ̺ + /// // 테이블 생성 /// db.CreateTable(); /// /// @@ -232,22 +232,22 @@ namespace SQLite4Unity3d } /// - /// ο SQLiteConnection ϰ SQLite ͺ̽ ϴ. + /// 새로운 SQLiteConnection을 생성하고 지정된 경로의 SQLite 데이터베이스를 엽니다. /// /// - /// ͺ̽ θ մϴ. + /// 데이터베이스 파일의 경로를 지정합니다. /// /// - /// ͺ̽ ϴ ÷Դϴ. + /// 데이터베이스를 여는 방법을 지정하는 플래그입니다. /// /// - /// DateTime Ӽ ƽ(true) Ǵ ڿ(false) մϴ. - /// Ʈ ݵ true ϴ ϴ. false ȣȯ Դϴ. - /// true ϸ ũ Ǹ ϴ. + /// DateTime 속성을 틱(true) 또는 문자열(false)로 저장할지 지정합니다. + /// 새 프로젝트에서는 반드시 true로 설정하는 것이 좋습니다. false는 이전 버전과의 호환성을 위한 것입니다. + /// true로 설정하면 성능이 크게 향상되며 단점이 없습니다. /// /// /// - /// // б ͺ̽ + /// // 읽기 전용 모드로 데이터베이스 열기 /// var dbReadOnly = new SQLiteConnection( /// Application.persistentDataPath + "/myDatabase.db", /// SQLiteOpenFlags.ReadOnly, @@ -300,9 +300,9 @@ namespace SQLite4Unity3d } /// - /// ־ ͺ̽ ο ȭ ü մϴ( ʴ ). + /// 주어진 데이터베이스 경로에 대한 동기화 객체를 생성합니다(아직 존재하지 않는 경우). /// - /// ͺ̽ + /// 데이터베이스 파일 경로 void mayCreateSyncObject(string databasePath) { if (!syncObjects.ContainsKey(databasePath)) @@ -312,18 +312,18 @@ namespace SQLite4Unity3d } /// - /// ͺ̽ Ʈϱ ȭ ü ɴϴ. + /// 데이터베이스 파일을 업데이트하기 위한 동기화 객체를 가져옵니다. /// - /// ȭ ü. + /// 동기화 객체. public object SyncObject { get { return syncObjects[DatabasePath]; } } /// - /// Ȯ ε带 Ȱȭ Ǵ Ȱȭմϴ. + /// 확장 기능 로드를 활성화 또는 비활성화합니다. /// - /// 1̸ Ȱȭ, 0̸ Ȱȭ + /// 1이면 활성화, 0이면 비활성화 /// /// - /// // SQLite Ȯ Ȱȭ + /// // SQLite 확장 기능 활성화 /// db.EnableLoadExtension(1); /// /// @@ -338,10 +338,10 @@ namespace SQLite4Unity3d } /// - /// ڿ UTF-8 ڵϰ NULL Ʈ ߰մϴ. + /// 문자열을 UTF-8로 인코딩하고 NULL 종료 바이트를 추가합니다. /// - /// ڵ ڿ - /// NULL UTF-8 Ʈ 迭 + /// 인코딩할 문자열 + /// NULL 종료된 UTF-8 바이트 배열 static byte[] GetNullTerminatedUtf8(string s) { var utf8Length = System.Text.Encoding.UTF8.GetByteCount(s); @@ -351,19 +351,19 @@ namespace SQLite4Unity3d } /// - /// MonoTouch Ŀ ʱ⸦ ٶ ڵ带 ϴ ˴ϴ. + /// MonoTouch 링커가 볼 수 있지만 실행하지 않기를 바라는 코드를 나열하는 데 사용됩니다. /// #pragma warning disable 649 static bool _preserveDuringLinkMagic; #pragma warning restore 649 /// - /// ̺ ð ϴ ڵ鷯 մϴ. - /// ڵ鷯 ð մϴ. + /// 테이블이 잠겼을 때 지정된 시간 동안 대기하는 비지 핸들러를 설정합니다. + /// 핸들러는 의 총 시간이 누적될 때까지 여러 번 대기합니다. /// /// /// - /// // ð + /// // 대기 시간 설정 /// db.BusyTimeout = TimeSpan.FromSeconds(5); /// /// @@ -381,7 +381,7 @@ namespace SQLite4Unity3d } /// - /// ϴ ŸԿ ̺ ȯմϴ. + /// 연결이 현재 이해하는 타입에서 테이블로의 매핑을 반환합니다. /// public IEnumerable TableMappings { @@ -392,25 +392,25 @@ namespace SQLite4Unity3d } /// - /// ־ ŸԿ ڵ ˻մϴ. + /// 주어진 타입에 대해 자동 생성된 매핑을 검색합니다. /// /// - /// ͺ̽ ȯǴ ŸԴϴ. + /// 데이터베이스에 대한 매핑이 반환되는 타입입니다. /// /// - /// Ģ Ͻ PK ε ϴ ÷ + /// 명명 규칙에 따라 암시적 PK와 인덱스를 허용하는 선택적 플래그 /// /// - /// ͺ̽ Ű Ÿ ü Ӽ ϰ - /// ޼带 մϴ. + /// 매핑은 데이터베이스 열의 스키마를 나타내며 객체의 속성을 설정하고 + /// 가져오는 메서드를 포함합니다. /// /// /// - /// // Person Ŭ + /// // Person 클래스에 대한 매핑 얻기 /// var mapping = db.GetMapping(typeof(Person)); /// - /// // ̺ ̸ Ȯ - /// Console.WriteLine("̺ ̸: " + mapping.TableName); + /// // 매핑의 테이블 이름 확인 + /// Console.WriteLine("테이블 이름: " + mapping.TableName); /// /// public TableMapping GetMapping(Type type, CreateFlags createFlags = CreateFlags.None) @@ -429,15 +429,15 @@ namespace SQLite4Unity3d } /// - /// ־ ŸԿ ڵ ˻մϴ. + /// 주어진 타입에 대해 자동 생성된 매핑을 검색합니다. /// /// - /// ͺ̽ Ű Ÿ ü Ӽ ϰ - /// ޼带 մϴ. + /// 매핑은 데이터베이스 열의 스키마를 나타내며 객체의 속성을 설정하고 + /// 가져오는 메서드를 포함합니다. /// /// /// - /// // ׸ Ÿ + /// // 제네릭 타입으로 매핑 얻기 /// var mapping = db.GetMapping(); /// /// @@ -461,11 +461,11 @@ namespace SQLite4Unity3d } /// - /// ͺ̽ "drop table" մϴ. ۾ ϴ. + /// 데이터베이스에서 "drop table" 명령을 실행합니다. 이 작업은 복구할 수 없습니다. /// /// /// - /// // Person ̺ + /// // Person 테이블 삭제 /// db.DropTable(); /// /// @@ -479,20 +479,20 @@ namespace SQLite4Unity3d } /// - /// ͺ̽ "create table if not exists" մϴ. - /// ̺ ε մϴ. - /// ŸԿ ڵ Ű մϴ. - /// ߿ GetMapping ȣϿ Ű ׼ ֽϴ. + /// 데이터베이스에서 "create table if not exists" 명령을 실행합니다. + /// 또한 테이블 열에 지정된 인덱스를 생성합니다. + /// 지정된 타입에서 자동으로 생성된 스키마를 사용합니다. + /// 나중에 GetMapping을 호출하여 이 스키마에 액세스할 수 있습니다. /// /// - /// ͺ̽ Ű ߰ ׸ ȯմϴ. + /// 데이터베이스 스키마에 추가된 항목의 수를 반환합니다. /// /// /// - /// // Person Ŭ ǥϴ ̺ + /// // Person 클래스를 표현하는 테이블 생성 /// db.CreateTable(); /// - /// // Ͻ ε ɼ + /// // 암시적 인덱스 생성 옵션 사용 /// db.CreateTable(CreateFlags.ImplicitIndex); /// /// @@ -502,19 +502,19 @@ namespace SQLite4Unity3d } /// - /// ͺ̽ "create table if not exists" մϴ. - /// ̺ ε մϴ. - /// ŸԿ ڵ Ű մϴ. - /// ߿ GetMapping ȣϿ Ű ׼ ֽϴ. + /// 데이터베이스에서 "create table if not exists" 명령을 실행합니다. + /// 또한 테이블 열에 지정된 인덱스를 생성합니다. + /// 지정된 타입에서 자동으로 생성된 스키마를 사용합니다. + /// 나중에 GetMapping을 호출하여 이 스키마에 액세스할 수 있습니다. /// - /// ͺ̽ ̺ ݿ ŸԴϴ. - /// Ģ Ͻ PK ε ϴ ÷Դϴ. + /// 데이터베이스 테이블로 반영할 타입입니다. + /// 명명 규칙에 따른 암시적 PK 및 인덱스를 허용하는 선택적 플래그입니다. /// - /// ͺ̽ Ű ߰ ׸ ȯմϴ. + /// 데이터베이스 스키마에 추가된 항목의 수를 반환합니다. /// /// /// - /// // Type ü Ͽ ̺ + /// // Type 객체를 사용하여 테이블 생성 /// db.CreateTable(typeof(Person), CreateFlags.AutoIncPK); /// /// @@ -600,15 +600,15 @@ namespace SQLite4Unity3d } /// - /// ̺ ε մϴ. + /// 지정된 테이블과 열에 대한 인덱스를 생성합니다. /// - /// ε ̸ - /// ͺ̽ ̺ ̸ - /// ε ̸ 迭 - /// ε ؾ ϴ + /// 생성할 인덱스의 이름 + /// 데이터베이스 테이블 이름 + /// 인덱싱할 열 이름 배열 + /// 인덱스가 고유해야 하는지 여부 /// /// - /// // ε + /// // 여러 열에 대한 고유 인덱스 생성 /// db.CreateIndex("personNameIndex", "Person", new[] { "FirstName", "LastName" }, true); /// /// @@ -620,15 +620,15 @@ namespace SQLite4Unity3d } /// - /// ̺ ε մϴ. + /// 지정된 테이블과 열에 대한 인덱스를 생성합니다. /// - /// ε ̸ - /// ͺ̽ ̺ ̸ - /// ε ̸ - /// ε ؾ ϴ + /// 생성할 인덱스의 이름 + /// 데이터베이스 테이블 이름 + /// 인덱싱할 열 이름 + /// 인덱스가 고유해야 하는지 여부 /// /// - /// // ε + /// // 단일 열에 대한 인덱스 생성 /// db.CreateIndex("emailIndex", "Person", "Email", true); /// /// @@ -638,16 +638,16 @@ namespace SQLite4Unity3d } /// - /// ̺ ε մϴ. + /// 지정된 테이블과 열에 대한 인덱스를 생성합니다. /// - /// ͺ̽ ̺ ̸ - /// ε ̸ - /// ε ؾ ϴ + /// 데이터베이스 테이블 이름 + /// 인덱싱할 열 이름 + /// 인덱스가 고유해야 하는지 여부 /// /// - /// // ̺ ̸ ε ̸ ڵ + /// // 테이블과 열 이름에서 인덱스 이름 자동 생성 /// db.CreateIndex("Person", "Age", false); - /// // ε ̸ "Person_Age" + /// // 생성된 인덱스 이름은 "Person_Age" /// /// public int CreateIndex(string tableName, string columnName, bool unique = false) @@ -656,16 +656,16 @@ namespace SQLite4Unity3d } /// - /// ̺ ε մϴ. + /// 지정된 테이블과 열에 대한 인덱스를 생성합니다. /// - /// ͺ̽ ̺ ̸ - /// ε ̸ 迭 - /// ε ؾ ϴ + /// 데이터베이스 테이블 이름 + /// 인덱싱할 열 이름 배열 + /// 인덱스가 고유해야 하는지 여부 /// /// - /// // ̺ ̸ ε ̸ ڵ + /// // 테이블과 여러 열 이름에서 인덱스 이름 자동 생성 /// db.CreateIndex("Person", new[] { "FirstName", "LastName" }, true); - /// // ε ̸ "Person_FirstName_LastName" + /// // 생성된 인덱스 이름은 "Person_FirstName_LastName" /// /// public int CreateIndex(string tableName, string[] columnNames, bool unique = false) @@ -674,15 +674,15 @@ namespace SQLite4Unity3d } /// - /// ü Ӽ ε մϴ. - /// : CreateIndex(c => c.Name); + /// 지정된 객체 속성에 대한 인덱스를 생성합니다. + /// 예시: CreateIndex(c => c.Name); /// - /// ͺ̽ ̺ ݿ Ÿ. - /// ε Ӽ - /// ε ؾ ϴ + /// 데이터베이스 테이블에 반영할 타입. + /// 인덱싱할 속성 + /// 인덱스가 고유해야 하는지 여부 /// /// - /// // Ͽ Ӽ ε + /// // 람다 식을 사용하여 속성에 대한 인덱스 생성 /// db.CreateIndex(p => p.Email, true); /// /// @@ -712,14 +712,14 @@ namespace SQLite4Unity3d } /// - /// ͺ̽ ̺ ϴ ŬԴϴ. + /// 데이터베이스 테이블 열에 대한 정보를 저장하는 클래스입니다. /// public class ColumnInfo { // public int cid { get; set; } /// - /// ̸Դϴ. + /// 열의 이름입니다. /// [Column("name")] public string Name { get; set; } @@ -728,7 +728,7 @@ namespace SQLite4Unity3d // public string ColumnType { get; set; } /// - /// NULL θ Ÿϴ. 0̸ NULL , 1̸ NOT NULLԴϴ. + /// NULL 값 허용 여부를 나타냅니다. 0이면 NULL 허용, 1이면 NOT NULL입니다. /// public int notnull { get; set; } @@ -743,16 +743,16 @@ namespace SQLite4Unity3d } /// - /// ̺ ɴϴ. + /// 지정된 테이블의 열 정보를 가져옵니다. /// - /// ̺ ̸ - /// ̺ + /// 테이블의 이름 + /// 테이블의 모든 열에 대한 정보 목록 /// /// - /// // Person ̺ + /// // Person 테이블의 열 정보 가져오기 /// var columns = db.GetTableInfo("Person"); /// foreach (var column in columns) { - /// Console.WriteLine(" ̸: " + column.Name); + /// Console.WriteLine("열 이름: " + column.Name); /// } /// /// @@ -763,10 +763,10 @@ namespace SQLite4Unity3d } /// - /// ̺ ε ü ġϵ Ʈմϴ. - /// ο ̺ ߰մϴ. + /// 기존 테이블 구조를 현재 매핑된 객체 구조와 일치하도록 업데이트합니다. + /// 새로운 열이 있으면 테이블에 추가합니다. /// - /// ̺ + /// 테이블 매핑 정보 void MigrateTable(TableMapping map) { var existingCols = GetTableInfo(map.TableName); @@ -796,7 +796,7 @@ namespace SQLite4Unity3d } /// - /// ο SQLiteCommand մϴ. Ŭ ֽϴ. + /// 새로운 SQLiteCommand를 생성합니다. 서브 클래스 제공을 위해 재정의할 수 있습니다. /// /// protected virtual SQLiteCommand NewCommand() @@ -805,21 +805,21 @@ namespace SQLite4Unity3d } /// - /// μ ִ ؽƮ SQLiteCommand մϴ. - /// ؽƮ μ '?' ġմϴ. + /// 인수가 있는 명령 텍스트로 새 SQLiteCommand를 생성합니다. + /// 명령 텍스트에서 각 인수에 대해 '?' 를 배치합니다. /// /// - /// ̽ SQL. + /// 완전히 이스케이프된 SQL. /// /// - /// ؽƮ '?' üϴ μ. + /// 명령 텍스트에서 '?'의 출현을 대체하는 인수. /// /// - /// ü + /// 객체 /// /// /// - /// // ĶͰ ִ + /// // 파라미터가 있는 명령 생성 /// var cmd = db.CreateCommand("SELECT * FROM Person WHERE Id = ?", 1); /// var person = cmd.ExecuteQuery().FirstOrDefault(); /// @@ -839,26 +839,26 @@ namespace SQLite4Unity3d } /// - /// μ ִ ؽƮ(SQL) SQLiteCommand ϰ մϴ. - /// ؽƮ μ '?' ġ ش մϴ. - /// ȯ Query ޼带 ϼ. - /// ̷ 쿡 INSERT, UPDATE DELETE Ե˴ϴ. - /// Trace Ǵ TimeExecution Ӽ Ͽ ϸ ֽϴ. + /// 인수가 있는 명령 텍스트(SQL)로 SQLiteCommand를 생성하고 실행합니다. + /// 명령 텍스트에서 각 인수에 대해 '?'를 배치한 다음 해당 명령을 실행합니다. + /// 행이 반환될 것으로 예상하지 않을 때 Query 대신 이 메서드를 사용하세요. + /// 이러한 경우에는 INSERT, UPDATE 및 DELETE가 포함됩니다. + /// 연결의 Trace 또는 TimeExecution 속성을 설정하여 실행을 프로파일링할 수 있습니다. /// /// - /// ̽ SQL. + /// 완전히 이스케이프된 SQL. /// /// - /// '?' üϴ μ. + /// 쿼리에서 '?'의 출현을 대체하는 인수. /// /// - /// ͺ̽ . + /// 이 실행의 결과로 데이터베이스에서 수정된 행 수. /// /// /// - /// // SQL - /// int rowsAffected = db.Start("UPDATE Person SET Name = ? WHERE Id = ?", "ȫ浿", 1); - /// Console.WriteLine($"Ʈ : {rowsAffected}"); + /// // SQL 쿼리 직접 실행 + /// int rowsAffected = db.Start("UPDATE Person SET Name = ? WHERE Id = ?", "홍길동", 1); + /// Console.WriteLine($"업데이트된 행 수: {rowsAffected}"); /// /// public int Execute(string query, params object[] args) @@ -888,15 +888,15 @@ namespace SQLite4Unity3d } /// - /// SQL ϰ Į ȯմϴ. + /// SQL 쿼리를 실행하고 스칼라 결과를 반환합니다. /// - /// ȯǴ Į Ÿ - /// SQL - /// Ķ - /// ù ° , ù ° + /// 반환되는 스칼라 결과의 타입 + /// 실행할 SQL 쿼리 + /// 쿼리 파라미터 + /// 쿼리 결과의 첫 번째 열, 첫 번째 행 값 /// /// - /// // Į + /// // 스칼라 값 가져오기 /// int count = db.ExecuteScalar("SELECT COUNT(*) FROM Person"); /// string name = db.ExecuteScalar("SELECT Name FROM Person WHERE Id = ?", 1); /// @@ -928,25 +928,25 @@ namespace SQLite4Unity3d } /// - /// μ ִ ؽƮ(SQL) SQLiteCommand ϰ մϴ. - /// ؽƮ μ '?' ġ ش մϴ. - /// ŸԿ ڵ Ͽ ȯմϴ. + /// 인수가 있는 명령 텍스트(SQL)로 SQLiteCommand를 생성하고 실행합니다. + /// 명령 텍스트에서 각 인수에 대해 '?'를 배치한 다음 해당 명령을 실행합니다. + /// 지정된 타입에 대해 자동으로 생성된 매핑을 사용하여 각 결과 행을 반환합니다. /// /// - /// ̽ SQL. + /// 완전히 이스케이프된 SQL. /// /// - /// '?' üϴ μ. + /// 쿼리에서 '?'의 출현을 대체하는 인수. /// /// - /// ȯ ࿡ ϳ . + /// 쿼리에 의해 반환된 각 행에 대해 하나의 결과를 갖는 열거 가능. /// /// /// - /// // ǿ ´ Person ü ȸ + /// // 조건에 맞는 모든 Person 객체 조회 /// var adults = db.Query("SELECT * FROM Person WHERE Age >= ?", 18); /// foreach (var person in adults) { - /// Console.WriteLine($": {person.Name}, {person.Age}"); + /// Console.WriteLine($"성인: {person.Name}, {person.Age}세"); /// } /// /// @@ -957,24 +957,24 @@ namespace SQLite4Unity3d } /// - /// μ ִ ؽƮ(SQL) SQLiteCommand ϰ մϴ. - /// ؽƮ μ '?' ġ ش մϴ. - /// ŸԿ ڵ Ͽ ȯմϴ. + /// 인수가 있는 명령 텍스트(SQL)로 SQLiteCommand를 생성하고 실행합니다. + /// 명령 텍스트에서 각 인수에 대해 '?'를 배치한 다음 해당 명령을 실행합니다. + /// 지정된 타입에 대해 자동으로 생성된 매핑을 사용하여 각 결과 행을 반환합니다. /// /// - /// ̽ SQL. + /// 완전히 이스케이프된 SQL. /// /// - /// '?' üϴ μ. + /// 쿼리에서 '?'의 출현을 대체하는 인수. /// /// - /// ȯ ࿡ ϳ . - /// ڴ MoveNext ȣ sqlite3_step ȣϹǷ, - /// ͺ̽ ־ մϴ. + /// 쿼리에 의해 반환된 각 행에 대해 하나의 결과를 갖는 열거 가능. + /// 열거자는 MoveNext를 호출할 때마다 sqlite3_step을 호출하므로, + /// 열거자의 수명 동안 데이터베이스 연결이 열려 있어야 합니다. /// /// /// - /// // 뷮 ͸ ε ó + /// // 대용량 데이터를 지연 로딩으로 처리 /// var query = db.DeferredQuery("SELECT * FROM Person"); /// using (var enumerator = query.GetEnumerator()) { /// while (enumerator.MoveNext()) { @@ -991,27 +991,27 @@ namespace SQLite4Unity3d } /// - /// μ ִ ؽƮ(SQL) SQLiteCommand ϰ մϴ. - /// ؽƮ μ '?' ġ ش մϴ. - /// Ͽ ȯմϴ. - /// Լ (introspection) ͺ̽ ϱ - /// ̺귯 ˴ϴ. Ϲ ʽϴ. + /// 인수가 있는 명령 텍스트(SQL)로 SQLiteCommand를 생성하고 실행합니다. + /// 명령 텍스트에서 각 인수에 대해 '?'를 배치한 다음 해당 명령을 실행합니다. + /// 지정된 매핑을 사용하여 각 결과 행을 반환합니다. + /// 이 함수는 내성(introspection)을 통해 데이터베이스를 쿼리하기 위해 + /// 라이브러리에서만 사용됩니다. 일반적으로 사용되지 않습니다. /// /// - /// ü ȯϴ . + /// 결과 행을 객체로 변환하는 데 사용할 . /// /// - /// ̽ SQL. + /// 완전히 이스케이프된 SQL. /// /// - /// '?' üϴ μ. + /// 쿼리에서 '?'의 출현을 대체하는 인수. /// /// - /// ȯ ࿡ ϳ . + /// 쿼리에 의해 반환된 각 행에 대해 하나의 결과를 갖는 열거 가능. /// /// /// - /// // ü + /// // 매핑 객체를 사용해 쿼리 실행 /// var map = db.GetMapping(typeof(Person)); /// var results = db.Query(map, "SELECT * FROM Person WHERE Id = ?", 1); /// if (results.Count > 0) { @@ -1026,25 +1026,25 @@ namespace SQLite4Unity3d } /// - /// μ ִ ؽƮ(SQL) SQLiteCommand ϰ մϴ. - /// ؽƮ μ '?' ġ ش մϴ. - /// Ͽ ȯմϴ. - /// Լ (introspection) ͺ̽ ϱ - /// ̺귯 ˴ϴ. Ϲ ʽϴ. + /// 인수가 있는 명령 텍스트(SQL)로 SQLiteCommand를 생성하고 실행합니다. + /// 명령 텍스트에서 각 인수에 대해 '?'를 배치한 다음 해당 명령을 실행합니다. + /// 지정된 매핑을 사용하여 각 결과 행을 반환합니다. + /// 이 함수는 내성(introspection)을 통해 데이터베이스를 쿼리하기 위해 + /// 라이브러리에서만 사용됩니다. 일반적으로 사용되지 않습니다. /// /// - /// ü ȯϴ . + /// 결과 행을 객체로 변환하는 데 사용할 . /// /// - /// ̽ SQL. + /// 완전히 이스케이프된 SQL. /// /// - /// '?' üϴ μ. + /// 쿼리에서 '?'의 출현을 대체하는 인수. /// /// - /// ȯ ࿡ ϳ . - /// ڴ MoveNext ȣ sqlite3_step ȣϹǷ, - /// ͺ̽ ־ մϴ. + /// 쿼리에 의해 반환된 각 행에 대해 하나의 결과를 갖는 열거 가능. + /// 열거자는 MoveNext를 호출할 때마다 sqlite3_step을 호출하므로, + /// 열거자의 수명 동안 데이터베이스 연결이 열려 있어야 합니다. /// public IEnumerable DeferredQuery(TableMapping map, string query, params object[] args) { @@ -1053,20 +1053,20 @@ namespace SQLite4Unity3d } /// - /// ־ Ÿ Ÿ ̺ ̽ ȯմϴ. + /// 주어진 타입이 나타내는 테이블에 대해 쿼리 가능한 인터페이스를 반환합니다. /// /// - /// Where, OrderBy, Take Ƽ SQL ȯ ִ ü. + /// Where, OrderBy, Take 쿼리를 네이티브 SQL로 변환할 수 있는 쿼리 가능한 객체. /// /// /// - /// // LINQ Ͽ ϱ + /// // LINQ를 사용하여 데이터 쿼리하기 /// var query = db.Table() /// .Where(p => p.Age > 18) /// .OrderBy(p => p.Name); /// /// foreach(var adult in query) { - /// Console.WriteLine($": {adult.Name}, {adult.Age}"); + /// Console.WriteLine($"성인: {adult.Name}, {adult.Age}세"); /// } /// /// @@ -1076,25 +1076,25 @@ namespace SQLite4Unity3d } /// - /// ⺻ Ű ü ̺ ˻մϴ. - /// ޼ ŸԿ (PrimaryKeyAttribute Ͽ) - /// PrimaryKey ־ մϴ. + /// 지정된 기본 키를 가진 객체를 테이블에서 검색합니다. + /// 이 메서드는 지정된 타입에 (PrimaryKeyAttribute를 사용하여) + /// 지정된 PrimaryKey가 있어야 합니다. /// /// - /// ⺻ Ű. + /// 기본 키. /// /// - /// ־ ⺻ Ű ü. - /// ü ã not found ܸ ߻ŵϴ. + /// 주어진 기본 키를 가진 객체. + /// 객체를 찾을 수 없으면 not found 예외를 발생시킵니다. /// /// /// - /// // ⺻ Ű Person ü + /// // 기본 키로 Person 객체 가져오기 /// try { /// var person = db.Get(1); - /// Console.WriteLine($"̸: {person.Name}"); + /// Console.WriteLine($"이름: {person.Name}"); /// } catch (Exception) { - /// Console.WriteLine("ش ID Person ã ϴ"); + /// Console.WriteLine("해당 ID의 Person을 찾을 수 없습니다"); /// } /// /// @@ -1105,23 +1105,23 @@ namespace SQLite4Unity3d } /// - /// ̺ ǽİ ġϴ ù ° ü ˻մϴ. + /// 테이블에서 조건식과 일치하는 첫 번째 객체를 검색합니다. /// /// - ///  ü ã ϴ ǽ. + /// 어떤 객체를 찾을지 결정하는 조건식. /// /// - /// ־ ǽİ ġϴ ü. - /// ü ã not found ܸ ߻ŵϴ. + /// 주어진 조건식과 일치하는 객체. + /// 객체를 찾을 수 없으면 not found 예외를 발생시킵니다. /// /// /// - /// // ǽ Person ü + /// // 조건식으로 Person 객체 가져오기 /// try { /// var person = db.Get(p => p.Email == "test@example.com"); - /// Console.WriteLine($"̸: {person.Name}"); + /// Console.WriteLine($"이름: {person.Name}"); /// } catch (Exception) { - /// Console.WriteLine("ǿ ´ Person ã ϴ"); + /// Console.WriteLine("조건에 맞는 Person을 찾을 수 없습니다"); /// } /// /// @@ -1131,25 +1131,25 @@ namespace SQLite4Unity3d } /// - /// ̺ ⺻ Ű ü ˻մϴ. - /// ޼ ŸԿ (PrimaryKeyAttribute Ͽ) - /// PrimaryKey ־ մϴ. + /// 테이블에서 지정된 기본 키를 가진 객체를 검색합니다. + /// 이 메서드는 지정된 타입에 (PrimaryKeyAttribute를 사용하여) + /// 지정된 PrimaryKey가 있어야 합니다. /// /// - /// ⺻ Ű. + /// 기본 키. /// /// - /// ־ ⺻ Ű ü Ǵ - /// ü ã null. + /// 주어진 기본 키를 가진 객체 또는 + /// 객체를 찾을 수 없으면 null. /// /// /// - /// // ⺻ Ű Person ü ã ( null ȯ) + /// // 기본 키로 Person 객체 찾기 (없으면 null 반환) /// var person = db.Find(1); /// if (person != null) { - /// Console.WriteLine($"ãҽϴ: {person.Name}"); + /// Console.WriteLine($"찾았습니다: {person.Name}"); /// } else { - /// Console.WriteLine("ش ID Person ϴ"); + /// Console.WriteLine("해당 ID의 Person이 없습니다"); /// } /// /// @@ -1160,28 +1160,28 @@ namespace SQLite4Unity3d } /// - /// ̺ ⺻ Ű ü ˻մϴ. - /// ޼ ŸԿ (PrimaryKeyAttribute Ͽ) - /// PrimaryKey ־ մϴ. + /// 테이블에서 지정된 기본 키를 가진 객체를 검색합니다. + /// 이 메서드는 지정된 타입에 (PrimaryKeyAttribute를 사용하여) + /// 지정된 PrimaryKey가 있어야 합니다. /// /// - /// ⺻ Ű. + /// 기본 키. /// /// - /// ü Ÿ ĺϴ Ǵ TableMapping. + /// 객체 타입을 식별하는 데 사용되는 TableMapping. /// /// - /// ־ ⺻ Ű ü Ǵ - /// ü ã null. + /// 주어진 기본 키를 가진 객체 또는 + /// 객체를 찾을 수 없으면 null. /// /// /// - /// // ü ü ã + /// // 매핑 객체를 사용해 객체 찾기 /// var map = db.GetMapping(typeof(Person)); /// var obj = db.Find(1, map); /// if (obj != null) { /// var person = obj as Person; - /// Console.WriteLine($"ãҽϴ: {person.Name}"); + /// Console.WriteLine($"찾았습니다: {person.Name}"); /// } /// /// @@ -1191,23 +1191,23 @@ namespace SQLite4Unity3d } /// - /// ̺ ǽİ ġϴ ù ° ü ˻մϴ. + /// 테이블에서 조건식과 일치하는 첫 번째 객체를 검색합니다. /// /// - ///  ü ã ϴ ǽ. + /// 어떤 객체를 찾을지 결정하는 조건식. /// /// - /// ־ ǽİ ġϴ ü Ǵ - /// ü ã null. + /// 주어진 조건식과 일치하는 객체 또는 + /// 객체를 찾을 수 없으면 null. /// /// /// - /// // ǽ Person ü ã ( null ȯ) + /// // 조건식으로 Person 객체 찾기 (없으면 null 반환) /// var person = db.Find(p => p.Email == "test@example.com"); /// if (person != null) { - /// Console.WriteLine($"ãҽϴ: {person.Name}"); + /// Console.WriteLine($"찾았습니다: {person.Name}"); /// } else { - /// Console.WriteLine("ش ̸ Person ϴ"); + /// Console.WriteLine("해당 이메일의 Person이 없습니다"); /// } /// /// @@ -1217,7 +1217,7 @@ namespace SQLite4Unity3d } /// - /// ȣǾ ͺ̽ ٸ ִ . + /// 이 호출되었고 데이터베이스가 을 기다리고 있는지 여부. /// public bool IsInTransaction { @@ -1225,32 +1225,32 @@ namespace SQLite4Unity3d } /// - /// Ʈ մϴ. Ʈ Ϸ ȣϼ. + /// 새 트랜잭션을 시작합니다. 트랜잭션을 종료하려면 을 호출하세요. /// - /// Ʈ ̹ ۵ ܰ ߻մϴ. + /// 트랜잭션이 이미 시작된 경우 예외가 발생합니다. /// /// - /// // Ʈ + /// // 트랜잭션 사용 /// try { /// db.BeginTransaction(); /// - /// // ۾ - /// db.Insert(new Person { Name = "ȫ浿", Age = 30 }); - /// db.Insert(new Person { Name = "ö", Age = 25 }); + /// // 여러 작업 수행 + /// db.Insert(new Person { Name = "홍길동", Age = 30 }); + /// db.Insert(new Person { Name = "김철수", Age = 25 }); /// - /// // ϷǸ Ʈ Ŀ + /// // 성공적으로 완료되면 트랜잭션 커밋 /// db.Commit(); /// } catch (Exception) { - /// // ߻ ڵ ѹ˴ϴ - /// Console.WriteLine("Ʈ "); + /// // 오류 발생시 자동으로 롤백됩니다 + /// Console.WriteLine("트랜잭션 실패"); /// } /// /// public void BeginTransaction() { - // BEGIN Ʈ ִ , Ʈ 쿡 ۵մϴ. - // BEGIN ȣ Ʈ Բ մϴ. - // 浹 ߻ϴ , ߻ ִ BeginTransaction ȣ մϴ. + // BEGIN 명령은 트랜잭션 스택이 비어 있는 경우, 즉 보류 중인 트랜잭션이 없는 경우에만 작동합니다. + // BEGIN 명령이 호출될 때 트랜잭션 스택이 비어 있지 않으면 명령이 오류와 함께 실패합니다. + // 오류로 인해 충돌이 발생하는 대신, 오류가 발생할 수 있는 BeginTransaction 호출을 무시합니다. if (Interlocked.CompareExchange(ref _transactionDepth, 1, 0) == 0) { try @@ -1262,8 +1262,8 @@ namespace SQLite4Unity3d var sqlExp = ex as SQLiteException; if (sqlExp != null) { - // Ʒ ؼ ø̼ǿ ROLLBACK Ͽ ϴ ϴ. - // TODO: ѹ ġ ߻ Ʈ Ǿ մϴ. + // 아래 나열된 오류에 대해서는 애플리케이션에서 ROLLBACK 명령을 명시적으로 실행하여 대응하는 것이 좋습니다. + // TODO: 이 롤백 안전 장치는 모든 오류 발생 사이트에 적용되어야 합니다. switch (sqlExp.Result) { case SQLite3.Result.IOError: @@ -1277,8 +1277,8 @@ namespace SQLite4Unity3d } else { - // SaveTransactionPoint catch ̹ Ʈ Ʈ - // 쿡 VolatileWrite ƴ decrement ȣϼ. + // SaveTransactionPoint에서 catch 이후 이미 트랜잭션 포인트를 + // 생성한 경우에는 VolatileWrite가 아닌 decrement를 호출하세요. Interlocked.Decrement(ref _transactionDepth); } @@ -1287,43 +1287,43 @@ namespace SQLite4Unity3d } else { - // ̹ ִ Ʈǿ BeginTransaction ȣϴ ȿ ʽϴ. + // 이미 열려 있는 트랜잭션에 BeginTransaction을 호출하는 것은 유효하지 않습니다. throw new InvalidOperationException("Cannot begin a transaction while already in a transaction."); } } /// - /// Ʈ ŸӶ ͺ̽ ̺Ʈ մϴ. - /// Ʈ Ʈ մϴ. + /// 현재 트랜잭션 타임라인의 지점에서 데이터베이스에 세이브포인트를 생성합니다. + /// 진행 중인 트랜잭션이 없으면 새 트랜잭션을 시작합니다. /// - /// ȯ ̺Ʈ ۾ Ϸ ȣϼ. - /// ȯ ̺Ʈ ۾ ȮϷ ȣϼ. - /// Ʈ ϰ ȮϷ ȣϼ. + /// 반환된 세이브포인트 이후의 작업을 취소하려면 를 호출하세요. + /// 반환된 세이브포인트 이후의 작업을 확정하려면 를 호출하세요. + /// 트랜잭션을 종료하고 모든 변경사항을 확정하려면 을 호출하세요. /// - /// ̺Ʈ ĺϴ ڿ. + /// 세이브포인트를 식별하는 문자열. /// /// - /// // ̺Ʈ Ʈ ó + /// // 세이브포인트를 사용한 트랜잭션 처리 /// db.BeginTransaction(); /// - /// // ù ° ۾ - /// db.Insert(new Person { Name = "ȫ浿", Age = 30 }); + /// // 첫 번째 작업 수행 + /// db.Insert(new Person { Name = "홍길동", Age = 30 }); /// - /// // ̺Ʈ + /// // 세이브포인트 생성 /// string savepoint = db.SaveTransactionPoint(); /// /// try { - /// // ° ۾ - /// db.Insert(new Person { Name = "ö", Age = 25 }); + /// // 두 번째 작업 수행 + /// db.Insert(new Person { Name = "김철수", Age = 25 }); /// - /// // ̺Ʈ (Ȯ) + /// // 문제가 없으면 세이브포인트 해제(확정) /// db.Release(savepoint); /// } catch(Exception) { - /// // ߻ϸ ̺Ʈ ѹ + /// // 문제가 발생하면 세이브포인트로 롤백 /// db.RollbackTo(savepoint); /// } /// - /// // Ʈ Ȯ + /// // 트랜잭션 확정 /// db.Commit(); /// /// @@ -1367,26 +1367,26 @@ namespace SQLite4Unity3d } /// - /// Ǵ ۵ Ʈ ѹմϴ. + /// 또는 로 시작된 트랜잭션을 롤백합니다. /// /// /// - /// // Ʈ ϰ ѹ + /// // 트랜잭션을 시작하고 실패 시 롤백 /// try { /// db.BeginTransaction(); - /// db.Insert(new Person { Name = "ȫ浿", Age = 30 }); + /// db.Insert(new Person { Name = "홍길동", Age = 30 }); /// - /// // ߻ ִ ۾ + /// // 오류 발생할 수 있는 작업 /// if (SomeConditionFails()) { - /// // Ʈ ѹ + /// // 트랜잭션 롤백 /// db.Rollback(); /// return; /// } /// - /// // Ŀ + /// // 성공 시 커밋 /// db.Commit(); /// } catch(Exception) { - /// // ߻ ѹ + /// // 예외 발생 시 롤백 /// db.Rollback(); /// } /// @@ -1397,27 +1397,27 @@ namespace SQLite4Unity3d } /// - /// Ǵ SaveTransactionPoint ̺Ʈ ѹմϴ. + /// 또는 SaveTransactionPoint에 의해 생성된 세이브포인트로 롤백합니다. /// - /// ȯ ѹ ̺Ʈ ̸. savepoint null̰ų ޼ ȣ մϴ. + /// 에 의해 반환된 롤백할 세이브포인트의 이름. savepoint가 null이거나 비어 있으면 이 메서드는 호출과 동일합니다. /// /// - /// // ̺Ʈ κ ѹ + /// // 세이브포인트를 사용한 부분 롤백 /// db.BeginTransaction(); /// - /// // ù ° ۾ - /// db.Insert(new Person { Name = "ȫ浿", Age = 30 }); + /// // 첫 번째 작업 수행 + /// db.Insert(new Person { Name = "홍길동", Age = 30 }); /// - /// // ̺Ʈ + /// // 세이브포인트 생성 /// string savepoint = db.SaveTransactionPoint(); /// - /// // ° ۾ - /// db.Insert(new Person { Name = "ö", Age = 25 }); + /// // 두 번째 작업 수행 + /// db.Insert(new Person { Name = "김철수", Age = 25 }); /// - /// // ° ۾ ѹ (̺Ʈ ǵ) + /// // 두 번째 작업만 롤백 (세이브포인트로 되돌리기) /// db.RollbackTo(savepoint); /// - /// // ù ° ۾ ȿϸ Ʈ Ŀ + /// // 첫 번째 작업은 여전히 유효하며 트랜잭션을 커밋 /// db.Commit(); /// /// @@ -1427,9 +1427,9 @@ namespace SQLite4Unity3d } /// - /// ۵ ŷ ѹմϴ. + /// 에 의해 시작된 거래를 롤백합니다. /// - /// ߻ Ϸ true, ׷ false + /// 예외 발생을 방지하려면 true, 그렇지 않으면 false void RollbackTo(string savepoint, bool noThrow) { // Rolling back without a TO clause rolls backs all transactions @@ -1458,37 +1458,37 @@ namespace SQLite4Unity3d } /// - /// ȯ ̺Ʈ մϴ. - /// ̺Ʈ ϸ ش ̺Ʈ Ʈ ߴ - /// ̺Ʈ ˴ϴ. - /// ׷ 쿡 ȣ · ˴ϴ. + /// 에서 반환된 세이브포인트를 해제합니다. + /// 세이브포인트를 해제하면 해당 세이브포인트가 트랜잭션을 시작했던 경우 + /// 그 세이브포인트 이후의 변경사항이 영구적으로 적용됩니다. + /// 그렇지 않은 경우에는 호출이 있을 때까지 변경사항이 대기 상태로 유지됩니다. /// - /// RELEASE SAVEPOINT COMMIT ϴ. + /// RELEASE 명령은 SAVEPOINT에 대한 COMMIT과 같습니다. /// - /// ̺Ʈ ̸. ڿ ȣ մϴ. + /// 해제할 세이브포인트의 이름. 이 문자열은 호출 결과여야 합니다. /// /// - /// // ̺Ʈ (Ȯ) + /// // 세이브포인트 해제(확정) 사용 예제 /// db.BeginTransaction(); /// - /// // ۾ - /// db.Insert(new Person { Name = "ȫ浿", Age = 30 }); + /// // 작업 수행 + /// db.Insert(new Person { Name = "홍길동", Age = 30 }); /// - /// // ̺Ʈ + /// // 세이브포인트 생성 /// string savepoint1 = db.SaveTransactionPoint(); - /// db.Insert(new Person { Name = "ö", Age = 25 }); + /// db.Insert(new Person { Name = "김철수", Age = 25 }); /// - /// // ٸ ̺Ʈ + /// // 다른 세이브포인트 생성 /// string savepoint2 = db.SaveTransactionPoint(); - /// db.Insert(new Person { Name = "̿", Age = 35 }); + /// db.Insert(new Person { Name = "이영희", Age = 35 }); /// - /// // ° ̺Ʈ Ȯ + /// // 두 번째 세이브포인트의 변경사항을 확정 /// db.Release(savepoint2); /// - /// // ù ° ̺Ʈ ׵ Ȯ + /// // 이제 첫 번째 세이브포인트의 변경사항도 확정 /// db.Release(savepoint1); /// - /// // ü Ʈ Ŀ + /// // 전체 트랜잭션 커밋 /// db.Commit(); /// /// @@ -1498,11 +1498,11 @@ namespace SQLite4Unity3d } /// - /// ̺Ʈ մϴ. + /// 세이브포인트에 대한 명령을 실행합니다. /// - /// ̺Ʈ ĺ - /// SQL (rollback to Ǵ release) - /// ̺Ʈ ȿ ߻ + /// 세이브포인트 식별자 + /// 실행할 SQL 명령(rollback to 또는 release) + /// 세이브포인트가 유효하지 않은 경우 발생 void DoSavePointExecute(string savepoint, string cmd) { // Validate the savepoint @@ -1532,25 +1532,25 @@ namespace SQLite4Unity3d } /// - /// ۵ Ʈ Ŀմϴ. + /// 으로 시작된 트랜잭션을 커밋합니다. /// /// /// - /// // Ʈ Ŀ + /// // 트랜잭션 커밋 예제 /// try { /// db.BeginTransaction(); /// - /// // ۾ - /// db.Insert(new Person { Name = "ȫ浿", Age = 30 }); - /// db.Insert(new Person { Name = "ö", Age = 25 }); - /// db.Insert(new Person { Name = "̿", Age = 35 }); + /// // 여러 작업 수행 + /// db.Insert(new Person { Name = "홍길동", Age = 30 }); + /// db.Insert(new Person { Name = "김철수", Age = 25 }); + /// db.Insert(new Person { Name = "이영희", Age = 35 }); /// - /// // ۾ ϷǸ Ʈ Ŀ + /// // 모든 작업이 성공적으로 완료되면 트랜잭션 커밋 /// db.Commit(); /// } catch(Exception ex) { - /// // ߻ ѹ + /// // 오류 발생 시 롤백 /// db.Rollback(); - /// Console.WriteLine("Ʈ : " + ex.Message); + /// Console.WriteLine("트랜잭션 실패: " + ex.Message); /// } /// /// @@ -1564,27 +1564,27 @@ namespace SQLite4Unity3d } /// - /// ־ ׼ SAVEPOINT μ (ø ִ) Ʈ մϴ. - /// ܰ ߻ϸ ̺ƮӸ ƴ϶ ü Ʈ ѹ˴ϴ. - /// ߻ ܴ ٽ ϴ. + /// 주어진 액션을 SAVEPOINT로 감싸서 (중첩될 수 있는) 트랜잭션 내에서 실행합니다. + /// 예외가 발생하면 현재 세이브포인트뿐만 아니라 전체 트랜잭션이 롤백됩니다. + /// 발생한 예외는 다시 던져집니다. /// /// - /// Ʈ . action ῡ ۾ - /// Ǵ ȣؼ ˴ϴ. + /// 트랜잭션 내에서 수행할 . action은 연결에 대한 여러 작업을 포함할 수 있지만 + /// 또는 을 호출해서는 안 됩니다. /// /// /// - /// // RunInTransaction Ʈ ó + /// // RunInTransaction을 사용한 트랜잭션 처리 /// db.RunInTransaction(() => { - /// // ۾ ϳ Ʈ ˴ϴ. - /// db.Insert(new Person { Name = "ȫ浿", Age = 30 }); - /// db.Insert(new Person { Name = "ö", Age = 25 }); - /// db.Update(new Person { Id = 1, Name = "ȫ浿", Age = 31 }); + /// // 모든 작업은 하나의 트랜잭션으로 실행됩니다. + /// db.Insert(new Person { Name = "홍길동", Age = 30 }); + /// db.Insert(new Person { Name = "김철수", Age = 25 }); + /// db.Update(new Person { Id = 1, Name = "홍길동", Age = 31 }); /// - /// // ܰ ߻ϸ ۾ ѹ˴ϴ. + /// // 이 블록 내에서 예외가 발생하면 모든 작업이 롤백됩니다. /// }); /// - /// // ⿡ ϸ Ʈ ĿԵ Դϴ. + /// // 여기에 도달하면 트랜잭션이 성공적으로 커밋된 것입니다. /// /// public void RunInTransaction(Action action) @@ -1606,22 +1606,22 @@ namespace SQLite4Unity3d } /// - /// ٸ 尡 ͺ̽ ϵ ϸ鼭 ־ ׼ մϴ. + /// 다른 스레드가 동일한 데이터베이스에 접근하지 못하도록 차단하면서 주어진 액션을 실행합니다. /// /// - /// (lock) . + /// 락(lock) 내에서 수행할 . /// /// /// - /// // RunInDatabaseLock ͺ̽ + /// // RunInDatabaseLock을 사용한 스레드 안전한 데이터베이스 접근 /// db.RunInDatabaseLock(() => { - /// // ۾ ٸ 忡 ͺ̽ ϴ. + /// // 이 블록 내의 작업은 다른 스레드에서 동일한 데이터베이스에 접근할 수 없습니다. /// var count = db.ExecuteScalar("SELECT COUNT(*) FROM Person"); /// /// if (count > 0) { /// var people = db.Query("SELECT * FROM Person"); /// foreach (var person in people) { - /// // ϰ ó + /// // 안전하게 데이터 처리 /// ProcessPerson(person); /// } /// } @@ -1637,27 +1637,27 @@ namespace SQLite4Unity3d } /// - /// ü մϴ. + /// 지정된 모든 객체를 삽입합니다. /// /// - /// ü ÷. + /// 삽입할 객체의 컬렉션. /// /// - /// ̺ ߰ . + /// 테이블에 추가된 행의 수. /// /// /// - /// // ü + /// // 객체 목록을 한 번에 삽입 /// var people = new List /// { - /// new Person { Name = "ȫ浿", Age = 30 }, - /// new Person { Name = "ö", Age = 25 }, - /// new Person { Name = "̿", Age = 35 } + /// new Person { Name = "홍길동", Age = 30 }, + /// new Person { Name = "김철수", Age = 25 }, + /// new Person { Name = "이영희", Age = 35 } /// }; /// - /// // ü ϰ ȯ + /// // 모든 객체를 삽입하고 영향받은 행 수를 반환 /// int count = db.InsertAll(people); - /// Console.WriteLine($"Ե : {count}"); + /// Console.WriteLine($"삽입된 행 수: {count}"); /// /// public int InsertAll(System.Collections.IEnumerable objects) @@ -1673,30 +1673,30 @@ namespace SQLite4Unity3d } /// - /// ü մϴ. + /// 지정된 모든 객체를 삽입합니다. /// /// - /// ü ÷. + /// 삽입할 객체들의 컬렉션. /// /// - /// ɿ ԵǴ ͷ SQL ڵԴϴ. INSERT {extra} INTO ... + /// 명령에 삽입되는 리터럴 SQL 코드입니다. INSERT {extra} INTO ... /// /// - /// ̺ ߰ . + /// 테이블에 추가된 행의 수. /// /// /// - /// // ü (浹 ɼ ) + /// // 여러 객체 한 번에 삽입 (충돌 무시 옵션 사용) /// var people = new List /// { - /// new Person { Id = 1, Name = "ȫ浿", Age = 30 }, - /// new Person { Id = 2, Name = "ö", Age = 25 }, - /// new Person { Id = 3, Name = "̿", Age = 35 } + /// new Person { Id = 1, Name = "홍길동", Age = 30 }, + /// new Person { Id = 2, Name = "김철수", Age = 25 }, + /// new Person { Id = 3, Name = "이영희", Age = 35 } /// }; /// - /// // OR IGNORE ɼ Ͽ ߺ Ű 浹 + /// // OR IGNORE 옵션으로 삽입하여 중복 키 충돌 무시 /// int count = db.InsertAll(people, "OR IGNORE"); - /// Console.WriteLine($"Ե : {count}"); + /// Console.WriteLine($"삽입된 행 수: {count}"); /// /// public int InsertAll(System.Collections.IEnumerable objects, string extra) @@ -1712,29 +1712,29 @@ namespace SQLite4Unity3d } /// - /// ü մϴ. + /// 지정된 모든 객체를 삽입합니다. /// /// - /// ü ÷. + /// 삽입할 객체들의 컬렉션. /// /// - /// ü Ÿ. + /// 삽입할 객체들의 타입. /// /// - /// ̺ ߰ . + /// 테이블에 추가된 행의 수. /// /// /// - /// // Ÿ ü + /// // 동적 타입으로 여러 객체 한 번에 삽입 /// var people = new List /// { - /// new Person { Name = "ȫ浿", Age = 30 }, - /// new Person { Name = "ö", Age = 25 } + /// new Person { Name = "홍길동", Age = 30 }, + /// new Person { Name = "김철수", Age = 25 } /// }; /// - /// // Ư Ÿ Ͽ + /// // 특정 타입으로 지정하여 삽입 /// int count = db.InsertAll(people, typeof(Person)); - /// Console.WriteLine($"Ե : {count}"); + /// Console.WriteLine($"삽입된 행 수: {count}"); /// /// public int InsertAll(System.Collections.IEnumerable objects, Type objType) @@ -1750,24 +1750,24 @@ namespace SQLite4Unity3d } /// - /// ־ ü ϰ, ڵ ⺻ Ű ִٸ ɴϴ. + /// 주어진 객체를 삽입하고, 자동 증가 기본 키가 있다면 그 값을 가져옵니다. /// /// - /// ü. + /// 삽입할 객체. /// /// - /// ̺ ߰ . + /// 테이블에 추가된 행의 수. /// /// /// - /// // Person ü ϰ - /// var person = new Person { Name = "ȫ浿", Age = 30 }; + /// // Person 객체를 생성하고 삽입 + /// var person = new Person { Name = "홍길동", Age = 30 }; /// - /// // ü Ȯ + /// // 객체 삽입 및 영향받은 행 수 확인 /// int rowsAffected = db.Insert(person); /// - /// // ڵ ID ִ , ID ü - /// Console.WriteLine($"Ե ID: {person.Id}"); + /// // 자동 증가 ID가 있는 경우, 삽입 후 ID가 객체에 설정됨 + /// Console.WriteLine($"삽입된 ID: {person.Id}"); /// /// public int Insert(object obj) @@ -1780,24 +1780,24 @@ namespace SQLite4Unity3d } /// - /// ־ ü ϰ, ڵ ⺻ Ű ִٸ ɴϴ. - /// UNIQUE ߻ ü մϴ. + /// 주어진 객체를 삽입하고, 자동 증가 기본 키가 있다면 그 값을 가져옵니다. + /// UNIQUE 제약 조건 위반이 발생한 경우 기존 객체를 삭제합니다. /// /// - /// ü. + /// 삽입할 객체. /// /// - /// . + /// 수정된 행의 수. /// /// /// - /// // ߺ Ű ִ üϿ - /// var existingPerson = new Person { Id = 1, Name = "ȫ浿", Age = 30 }; + /// // 중복 키가 있는 경우 교체하여 삽입 + /// var existingPerson = new Person { Id = 1, Name = "홍길동", Age = 30 }; /// - /// // Id ü ( ü ü) - /// db.InsertOrReplace(new Person { Id = 1, Name = "ȫ浿()", Age = 31 }); + /// // 동일한 Id로 새 객체 삽입 (기존 객체는 교체됨) + /// db.InsertOrReplace(new Person { Id = 1, Name = "홍길동(수정)", Age = 31 }); /// - /// // ü ü ϴ Ʈ + /// // 값이 변경된 객체를 교체 삽입하는 방식으로 업데이트할 수도 있음 /// var person = db.Get(1); /// person.Age += 1; /// db.InsertOrReplace(person); @@ -1813,29 +1813,29 @@ namespace SQLite4Unity3d } /// - /// ־ ü ϰ ڵ ⺻ Ű ִٸ ɴϴ. + /// 주어진 객체를 삽입하고 자동 증가 기본 키가 있다면 그 값을 가져옵니다. /// /// - /// ü. + /// 삽입할 객체. /// /// - /// ɿ ԵǴ ͷ SQL ڵԴϴ. INSERT {extra} INTO ... + /// 명령에 삽입되는 리터럴 SQL 코드입니다. INSERT {extra} INTO ... /// /// - /// ü Ÿ. + /// 삽입할 객체의 타입. /// /// - /// ̺ ߰ . + /// 테이블에 추가된 행의 수. /// /// /// - /// // Ư Ÿ ü - /// object person = new Person { Name = "ȫ浿", Age = 30 }; + /// // 특정 타입으로 객체 삽입 + /// object person = new Person { Name = "홍길동", Age = 30 }; /// - /// // OR IGNORE ɼ Ͽ 浹 + /// // OR IGNORE 옵션을 사용하여 충돌 시 무시 /// int count = db.Insert(person, "OR IGNORE", typeof(Person)); /// - /// // Ǵ ٸ SQL ɼ ߰ + /// // 또는 다른 SQL 옵션 추가 /// db.Insert(person, "OR FAIL", typeof(Person)); /// /// @@ -1845,24 +1845,24 @@ namespace SQLite4Unity3d } /// - /// ־ ü ϰ ڵ ⺻ Ű ִٸ ɴϴ. - /// UNIQUE ߻ ü üմϴ. + /// 주어진 객체를 삽입하고 자동 증가 기본 키가 있다면 그 값을 가져옵니다. + /// UNIQUE 제약 조건 위반이 발생한 경우 기존 객체를 교체합니다. /// /// - /// ü. + /// 삽입할 객체. /// /// - /// ü Ÿ. + /// 삽입할 객체의 타입. /// /// - /// . + /// 수정된 행의 수. /// /// /// - /// // Ư Ÿ ü ü - /// object person = new Person { Id = 1, Name = "ȫ浿", Age = 30 }; + /// // 특정 타입으로 객체 삽입 및 교체 + /// object person = new Person { Id = 1, Name = "홍길동", Age = 30 }; /// - /// // ü + /// // 교체 삽입 실행 /// int count = db.InsertOrReplace(person, typeof(Person)); /// /// @@ -1872,25 +1872,25 @@ namespace SQLite4Unity3d } /// - /// ־ ü ϰ ڵ ⺻ Ű ִٸ ɴϴ. + /// 주어진 객체를 삽입하고 자동 증가 기본 키가 있다면 그 값을 가져옵니다. /// /// - /// ü. + /// 삽입할 객체. /// /// - /// ɿ ԵǴ ͷ SQL ڵԴϴ. INSERT {extra} INTO ... + /// 명령에 삽입되는 리터럴 SQL 코드입니다. INSERT {extra} INTO ... /// /// - /// ̺ ߰ . + /// 테이블에 추가된 행의 수. /// /// /// - /// // 浹 ɼ ü - /// var person = new Person { Id = 1, Name = "ȫ浿", Age = 30 }; + /// // 충돌 무시 옵션으로 객체 삽입 + /// var person = new Person { Id = 1, Name = "홍길동", Age = 30 }; /// - /// // OR IGNORE ɼ Ͽ ߺ Ű 浹 + /// // OR IGNORE 옵션으로 삽입하여 중복 키 충돌 무시 /// int count = db.Insert(person, "OR IGNORE"); - /// Console.WriteLine($"Ե : {count}"); + /// Console.WriteLine($"삽입된 행 수: {count}"); /// /// public int Insert(object obj, string extra) @@ -1903,32 +1903,32 @@ namespace SQLite4Unity3d } /// - /// ־ ü ϰ ڵ ⺻ Ű ִٸ ɴϴ. + /// 주어진 객체를 삽입하고 자동 증가 기본 키가 있다면 그 값을 가져옵니다. /// /// - /// ü. + /// 삽입할 객체. /// /// - /// ɿ ԵǴ ͷ SQL ڵԴϴ. INSERT {extra} INTO ... + /// 명령에 삽입되는 리터럴 SQL 코드입니다. INSERT {extra} INTO ... /// /// - /// ü Ÿ. + /// 삽입할 객체의 타입. /// /// - /// ̺ ߰ . + /// 테이블에 추가된 행의 수. /// /// /// - /// // پ ɼ ü - /// var person = new Person { Name = "ȫ浿", Age = 30 }; + /// // 다양한 옵션으로 객체 삽입 + /// var person = new Person { Name = "홍길동", Age = 30 }; /// - /// // ⺻ + /// // 기본 삽입 /// db.Insert(person); /// - /// // OR IGNORE ɼ 浹 + /// // OR IGNORE 옵션으로 충돌 시 무시 /// db.Insert(person, "OR IGNORE"); /// - /// // Ư Ÿ + /// // 특정 타입으로 지정 /// db.Insert(person, "OR REPLACE", typeof(Person)); /// /// @@ -2015,27 +2015,27 @@ namespace SQLite4Unity3d } /// - /// ü Ͽ ̺ ⺻ Ű ϰ Ʈմϴ. - /// ü ⺻ Ű ־ մϴ. + /// 지정된 객체를 사용하여 테이블의 모든 열을 기본 키를 제외하고 업데이트합니다. + /// 객체에는 기본 키가 있어야 합니다. /// /// - /// Ʈ ü. PrimaryKeyAttribute Ͽ ⺻ Ű ־ մϴ. + /// 업데이트할 객체. PrimaryKeyAttribute를 사용하여 지정된 기본 키가 있어야 합니다. /// /// - /// Ʈ . + /// 업데이트된 행의 수. /// /// /// - /// // ͺ̽ ü ˻ + /// // 데이터베이스에서 객체 검색 /// var person = db.Get(1); /// - /// // ü Ӽ - /// person.Name = "ȫ浿()"; + /// // 객체 속성 변경 + /// person.Name = "홍길동(수정됨)"; /// person.Age = 31; /// - /// // ü Ʈ + /// // 변경된 객체 업데이트 /// int rowsAffected = db.Update(person); - /// Console.WriteLine($"Ʈ : {rowsAffected}"); + /// Console.WriteLine($"업데이트된 행 수: {rowsAffected}"); /// /// public int Update(object obj) @@ -2048,26 +2048,26 @@ namespace SQLite4Unity3d } /// - /// ü Ͽ ̺ ⺻ Ű ϰ Ʈմϴ. - /// ü ⺻ Ű ־ մϴ. + /// 지정된 객체를 사용하여 테이블의 모든 열을 기본 키를 제외하고 업데이트합니다. + /// 객체에는 기본 키가 있어야 합니다. /// /// - /// Ʈ ü. PrimaryKeyAttribute Ͽ ⺻ Ű ־ մϴ. + /// 업데이트할 객체. PrimaryKeyAttribute를 사용하여 지정된 기본 키가 있어야 합니다. /// /// - /// Ʈ ü Ÿ. + /// 업데이트할 객체의 타입. /// /// - /// Ʈ . + /// 업데이트된 행의 수. /// /// /// - /// // Ÿ ü Ʈ - /// object person = new Person { Id = 1, Name = "ȫ浿()", Age = 31 }; + /// // 동적 타입으로 객체 업데이트 + /// object person = new Person { Id = 1, Name = "홍길동(수정됨)", Age = 31 }; /// - /// // Ư Ÿ Ͽ Ʈ + /// // 특정 타입으로 지정하여 업데이트 /// int count = db.Update(person, typeof(Person)); - /// Console.WriteLine($"Ʈ : {count}"); + /// Console.WriteLine($"업데이트된 행 수: {count}"); /// /// public int Update(object obj, Type objType) @@ -2116,25 +2116,25 @@ namespace SQLite4Unity3d } /// - /// ü Ʈմϴ. + /// 지정된 모든 객체를 업데이트합니다. /// /// - /// Ʈ ü ÷. + /// 업데이트할 객체들의 컬렉션. /// /// - /// . + /// 수정된 행의 수. /// /// /// - /// // ü Ʈ + /// // 여러 객체 한 번에 업데이트 /// var people = db.Query("SELECT * FROM Person WHERE Age < 30"); /// foreach (var person in people) { /// person.Age++; /// } /// - /// // ü Ʈ + /// // 모든 수정된 객체를 한 번에 업데이트 /// int count = db.UpdateAll(people); - /// Console.WriteLine($"Ʈ : {count}"); + /// Console.WriteLine($"업데이트된 행 수: {count}"); /// /// public int UpdateAll(System.Collections.IEnumerable objects) @@ -2150,24 +2150,24 @@ namespace SQLite4Unity3d } /// - /// ⺻ Ű Ͽ ͺ̽ ü մϴ. + /// 기본 키를 사용하여 데이터베이스에서 지정된 객체를 삭제합니다. /// /// - /// ü. PrimaryKeyAttribute Ͽ ⺻ Ű ־ մϴ. + /// 삭제할 객체. PrimaryKeyAttribute를 사용하여 지정된 기본 키가 있어야 합니다. /// /// - /// . + /// 삭제된 행의 수. /// /// /// - /// // ͺ̽ ü ˻ + /// // 데이터베이스에서 객체 검색 /// var person = db.Get(1); /// - /// // ü + /// // 객체 삭제 /// int rowsAffected = db.Delete(person); - /// Console.WriteLine($" : {rowsAffected}"); + /// Console.WriteLine($"삭제된 행 수: {rowsAffected}"); /// - /// // Ǵ ID + /// // 또는 직접 ID로 삭제 /// rowsAffected = db.Delete(2); /// /// @@ -2184,24 +2184,24 @@ namespace SQLite4Unity3d } /// - /// ⺻ Ű ü մϴ. + /// 지정된 기본 키를 가진 객체를 삭제합니다. /// /// - /// ü ⺻ Ű. + /// 삭제할 객체의 기본 키. /// /// - /// ü . + /// 삭제된 객체의 수. /// /// - /// ü Ÿ. + /// 객체의 타입. /// /// /// - /// // ⺻ Ű ü + /// // 기본 키로 직접 객체 삭제 /// int rowsDeleted = db.Delete(1); - /// Console.WriteLine($"ID 1 Person ü {rowsDeleted} "); + /// Console.WriteLine($"ID가 1인 Person 객체 {rowsDeleted}개 삭제됨"); /// - /// // ID ʷ + /// // 여러 ID를 차례로 삭제 /// int[] idsToDelete = { 2, 3, 4 }; /// foreach (int id in idsToDelete) { /// db.Delete(id); @@ -2221,33 +2221,33 @@ namespace SQLite4Unity3d } /// - /// ̺ ü մϴ. - /// : ݺϿ ڸ, ޼ҵ ̺ ü մϴ. - /// ۾ Ϸ ´ Ȯϼ. + /// 지정된 테이블의 모든 객체를 삭제합니다. + /// 주의: 반복하여 강조하자면, 이 메소드는 지정된 테이블의 모든 객체를 삭제합니다. + /// 정말 이 작업을 수행하려는 것이 맞는지 확인하세요. /// /// - /// ü . + /// 삭제된 객체의 수. /// /// - /// ü Ÿ. + /// 삭제할 객체의 타입. /// /// /// - /// // ̺ (ؼ ) + /// // 테이블의 모든 데이터 삭제 (주의해서 사용) /// db.BeginTransaction(); /// try { - /// // Ȯ īƮ + /// // 삭제 전 확인을 위한 카운트 /// int beforeCount = db.ExecuteScalar("SELECT COUNT(*) FROM Person"); - /// Console.WriteLine($" : {beforeCount}"); + /// Console.WriteLine($"삭제 전 데이터 수: {beforeCount}"); /// - /// // Person + /// // 모든 Person 데이터 삭제 /// int deleted = db.DeleteAll(); /// - /// Console.WriteLine($" : {deleted}"); + /// Console.WriteLine($"삭제된 데이터 수: {deleted}"); /// db.Commit(); /// } catch(Exception) { /// db.Rollback(); - /// Console.WriteLine(" ۾ ҵ"); + /// Console.WriteLine("삭제 작업 취소됨"); /// } /// /// @@ -2264,24 +2264,24 @@ namespace SQLite4Unity3d } /// - /// ͺ̽ ϰ ݽϴ. + /// 데이터베이스 연결을 정리하고 닫습니다. /// /// /// - /// // using ڵ ҽ + /// // using 문을 사용한 자동 리소스 정리 /// using (var db = new SQLiteConnection("database.db")) /// { - /// // ͺ̽ ۾ + /// // 데이터베이스 작업 수행 /// var people = db.Query("SELECT * FROM Person"); /// - /// // using ڵ db.Dispose() ȣ + /// // using 블록이 끝나면 자동으로 db.Dispose() 호출됨 /// } /// - /// // ҽ + /// // 수동으로 리소스 정리 /// var connection = new SQLiteConnection("database.db"); /// try /// { - /// // ۾ + /// // 작업 수행 /// connection.CreateTable(); /// } /// finally @@ -2302,20 +2302,20 @@ namespace SQLite4Unity3d } /// - /// ͺ̽ ݽϴ. ޼ҵ Dispose ȣ˴ϴ. + /// 데이터베이스 연결을 닫습니다. 이 메소드는 Dispose에서도 호출됩니다. /// /// /// - /// // ͺ̽ ݱ + /// // 데이터베이스 연결 닫기 /// db.Close(); /// - /// // Ǵ using Ͽ ڵ ݱ + /// // 또는 using 문을 사용하여 자동으로 닫기 /// using (var db = new SQLiteConnection("database.db")) { - /// // ͺ̽ ۾ + /// // 데이터베이스 작업 수행 /// var count = db.ExecuteScalar("SELECT COUNT(*) FROM Person"); - /// Console.WriteLine($"Person ̺ : {count}"); + /// Console.WriteLine($"Person 테이블의 행 수: {count}"); /// - /// // using ڵ db.Dispose() ȣǾ + /// // using 블록이 끝나면 자동으로 db.Dispose()가 호출되어 연결이 닫힘 /// } /// /// @@ -3443,27 +3443,27 @@ namespace SQLite4Unity3d } /// - /// ǽĿ ̺ ͸մϴ. + /// 지정된 조건식에 따라 테이블 쿼리를 필터링합니다. /// /// - /// ͸ϴ ǽ. + /// 결과를 필터링하는 조건식. /// /// - /// ͸ TableQuery ü. + /// 필터링된 TableQuery 객체. /// /// /// - /// // ǽ ͸ + /// // 조건식으로 데이터 필터링 /// var adults = db.Table() /// .Where(p => p.Age >= 18); /// - /// // ü̴ + /// // 여러 조건 체이닝 /// var adultMales = db.Table() /// .Where(p => p.Age >= 18) - /// .Where(p => p.Gender == ""); + /// .Where(p => p.Gender == "남성"); /// /// foreach (var person in adults) { - /// Console.WriteLine($": {person.Name}, {person.Age}"); + /// Console.WriteLine($"성인: {person.Name}, {person.Age}세"); /// } /// /// @@ -3511,21 +3511,21 @@ namespace SQLite4Unity3d } /// - /// Ӽ ̺ մϴ. + /// 지정된 속성에 따라 테이블 쿼리 결과를 오름차순으로 정렬합니다. /// - /// Ӽ Ÿ - /// Ӽ ϴ - /// ĵ ü + /// 정렬 기준 속성의 타입 + /// 정렬 기준 속성을 선택하는 식 + /// 정렬된 쿼리 객체 /// /// - /// // ̼ + /// // 나이순으로 정렬 /// var peopleByAge = db.Table().OrderBy(p => p.Age); /// - /// // ̸ + /// // 이름순으로 정렬 /// var peopleByName = db.Table().OrderBy(p => p.Name); /// /// foreach (var person in peopleByAge) { - /// Console.WriteLine($"{person.Name}, {person.Age}"); + /// Console.WriteLine($"{person.Name}, {person.Age}세"); /// } /// /// @@ -3535,21 +3535,21 @@ namespace SQLite4Unity3d } /// - /// Ӽ ̺ մϴ. + /// 지정된 속성에 따라 테이블 쿼리 결과를 내림차순으로 정렬합니다. /// - /// Ӽ Ÿ - /// Ӽ ϴ - /// ĵ ü + /// 정렬 기준 속성의 타입 + /// 정렬 기준 속성을 선택하는 식 + /// 정렬된 쿼리 객체 /// /// - /// // + /// // 나이 내림차순으로 정렬 /// var olderFirst = db.Table().OrderByDescending(p => p.Age); /// - /// // ̸ + /// // 이름 내림차순으로 정렬 /// var reverseAlpha = db.Table().OrderByDescending(p => p.Name); /// /// foreach (var person in olderFirst) { - /// Console.WriteLine($"{person.Name}, {person.Age}"); + /// Console.WriteLine($"{person.Name}, {person.Age}세"); /// } /// /// diff --git a/Assets/Scripts/UVC/Data/Mqtt/MqttWorker.cs b/Assets/Scripts/UVC/Data/Mqtt/MqttWorker.cs index 59c8eaa1..d6133f6c 100644 --- a/Assets/Scripts/UVC/Data/Mqtt/MqttWorker.cs +++ b/Assets/Scripts/UVC/Data/Mqtt/MqttWorker.cs @@ -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) diff --git a/Assets/Scripts/UVC/Extention/RenderTextureEx.cs b/Assets/Scripts/UVC/Extention/RenderTextureEx.cs index 9ec9e6a3..567be6e1 100644 --- a/Assets/Scripts/UVC/Extention/RenderTextureEx.cs +++ b/Assets/Scripts/UVC/Extention/RenderTextureEx.cs @@ -4,29 +4,29 @@ using UVC.Log; namespace UVC.Extension { /// - /// RenderTexture Ȯ ޼带 ϴ ŬԴϴ. + /// RenderTexture 확장 메서드를 제공하는 클래스입니다. /// public static class RenderTextureEx { /// - /// RenderTexture Texture2D ȯմϴ. + /// RenderTexture를 Texture2D로 변환합니다. /// - /// ȯ RenderTexture ü - /// ȯ Texture2D ü + /// 변환할 RenderTexture 객체 + /// 변환된 Texture2D 객체 /// - /// : + /// 사용 예시: /// - /// // 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(); /// @@ -41,13 +41,13 @@ namespace UVC.Extension } /// - /// RenderTexture Ʈ 迭 ȯմϴ. + /// RenderTexture를 바이트 배열로 변환합니다. /// - /// ȯ RenderTexture ü - /// ̹ (⺻: PNG) - /// Ʈ 迭 + /// 변환할 RenderTexture 객체 + /// 이미지 형식 (기본값: PNG) + /// 바이트 배열 /// - /// : + /// 사용 예시: /// /// RenderTexture rt = new RenderTexture(256, 256, 24); /// byte[] bytes = rt.ToBytes(); @@ -63,13 +63,13 @@ namespace UVC.Extension } /// - /// RenderTexture ο PNG Ϸ մϴ. + /// RenderTexture를 지정된 경로에 PNG 파일로 저장합니다. /// - /// RenderTexture ü - /// - /// + /// 저장할 RenderTexture 객체 + /// 저장할 파일 경로 + /// 성공 여부 /// - /// : + /// 사용 예시: /// /// 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; } } /// - /// RenderTexture ũ⸦ մϴ. + /// RenderTexture의 크기를 조정합니다. /// - /// RenderTexture - /// ʺ - /// - /// ũⰡ ο RenderTexture + /// 원본 RenderTexture + /// 새 너비 + /// 새 높이 + /// 크기가 조정된 새로운 RenderTexture /// - /// : + /// 사용 예시: /// /// RenderTexture originalRT = new RenderTexture(1024, 1024, 24); /// RenderTexture resizedRT = originalRT.Resize(512, 512); - /// // + /// // 사용 후 정리 /// resizedRT.Release(); /// originalRT.Release(); /// diff --git a/Assets/Scripts/UVC/Linq/GameObjectExtensions.Enumerable.cs b/Assets/Scripts/UVC/Linq/GameObjectExtensions.Enumerable.cs index 611e4b3c..062a020e 100644 --- a/Assets/Scripts/UVC/Linq/GameObjectExtensions.Enumerable.cs +++ b/Assets/Scripts/UVC/Linq/GameObjectExtensions.Enumerable.cs @@ -6,7 +6,7 @@ namespace UVC.Linq { public static partial class GameObjectExtensions { - /// ҽ ÷ǿ ִ GameObject ϴ GameObject ÷ ȯմϴ. + /// 소스 컬렉션에 있는 모든 GameObject의 조상을 포함하는 GameObject 컬렉션을 반환합니다. public static IEnumerable Ancestors(this IEnumerable source) { foreach (var item in source) @@ -19,7 +19,7 @@ namespace UVC.Linq } } - /// ҽ ÷ GameObject ̵ GameObject ϴ ÷ ȯմϴ. + /// 소스 컬렉션의 모든 GameObject와 이들의 조상 GameObject를 포함하는 컬렉션을 반환합니다. public static IEnumerable AncestorsAndSelf(this IEnumerable source) { foreach (var item in source) @@ -32,8 +32,8 @@ namespace UVC.Linq } } - /// ҽ ÷ǿ ִ GameObject ڼ GameObject ϴ ÷ ȯմϴ. - /// ڽ ü ȸ ϴ ԼԴϴ. null̸ ڽ ȸմϴ. + /// 소스 컬렉션에 있는 모든 GameObject의 자손 GameObject를 포함하는 컬렉션을 반환합니다. + /// 자식 객체를 순회할지 결정하는 조건 함수입니다. null이면 모든 자식을 순회합니다. public static IEnumerable Descendants(this IEnumerable source, Func descendIntoChildren = null) { foreach (var item in source) @@ -46,7 +46,7 @@ namespace UVC.Linq } } - /// ҽ ÷ GameObject ̵ ڼ GameObject ϴ ÷ ȯմϴ. + /// 소스 컬렉션의 모든 GameObject와 이들의 자손 GameObject를 포함하는 컬렉션을 반환합니다. public static IEnumerable DescendantsAndSelf(this IEnumerable source, Func descendIntoChildren = null) { foreach (var item in source) @@ -59,7 +59,7 @@ namespace UVC.Linq } } - /// ҽ ÷ǿ ִ GameObject ڽ GameObject ϴ ÷ ȯմϴ. + /// 소스 컬렉션에 있는 모든 GameObject의 자식 GameObject를 포함하는 컬렉션을 반환합니다. public static IEnumerable Children(this IEnumerable source) { foreach (var item in source) @@ -72,7 +72,7 @@ namespace UVC.Linq } } - /// ҽ ÷ GameObject ̵ ڽ GameObject ϴ ÷ ȯմϴ. + /// 소스 컬렉션의 모든 GameObject와 이들의 자식 GameObject를 포함하는 컬렉션을 반환합니다. public static IEnumerable ChildrenAndSelf(this IEnumerable source) { foreach (var item in source) @@ -85,9 +85,9 @@ namespace UVC.Linq } } - /// ҽ ÷ǿ ִ GameObject ϰ(null üũ ) ıմϴ. - /// 忡 true ϰų !Application.isPlaying ϼ. - /// θ null մϴ. + /// 소스 컬렉션에 있는 모든 GameObject를 안전하게(null 체크 포함) 파괴합니다. + /// 에디터 모드에서는 true로 설정하거나 !Application.isPlaying을 전달하세요. + /// 부모를 null로 설정합니다. public static void Destroy(this IEnumerable source, bool useDestroyImmediate = false, bool detachParent = false) { if (detachParent) @@ -108,9 +108,9 @@ namespace UVC.Linq } } - /// ҽ ÷ǿ Ʈ Ÿ ÷ ȯմϴ. - /// ˻ Ʈ ŸԴϴ. - /// 忡 ޸ Ҵ ּȭϱ ij Ŀ մϴ. + /// 소스 컬렉션에서 지정된 컴포넌트 타입의 컬렉션을 반환합니다. + /// 검색할 컴포넌트의 타입입니다. + /// 에디터 모드에서는 메모리 할당을 최소화하기 위한 캐시 메커니즘을 사용합니다. public static IEnumerable OfComponent(this IEnumerable source) where T : UnityEngine.Component { @@ -144,10 +144,10 @@ namespace UVC.Linq } #endif - /// Ҹ ۿ ϰ, ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. - /// ҵ ҽ ÷Դϴ. - /// Ҹ 迭 Դϴ. ʿ信 ũⰡ ˴ϴ. - /// 迭 ȯմϴ. + /// 요소를 버퍼에 저장하고, 크기를 반환합니다. 배열은 자동으로 확장됩니다. + /// 저장할 요소들의 소스 컬렉션입니다. + /// 요소를 저장할 배열 참조입니다. 필요에 따라 크기가 조정됩니다. + /// 배열에 저장된 요소의 수를 반환합니다. public static int ToArrayNonAlloc(this IEnumerable source, ref T[] array) { var index = 0; diff --git a/Assets/Scripts/UVC/Linq/GameObjectExtensions.Operate.cs b/Assets/Scripts/UVC/Linq/GameObjectExtensions.Operate.cs index a59428ba..e975dc19 100644 --- a/Assets/Scripts/UVC/Linq/GameObjectExtensions.Operate.cs +++ b/Assets/Scripts/UVC/Linq/GameObjectExtensions.Operate.cs @@ -7,30 +7,30 @@ using UnityEngine; namespace UVC.Linq { /// - /// ڽ GameObject localPosition/Scale/Rotation ŸԴϴ. + /// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입입니다. /// public enum TransformCloneType { - /// ϰ մϴ. Add ޼ҵ ⺻Դϴ. + /// 원본과 동일하게 설정합니다. Add 메소드의 기본값입니다. KeepOriginal, - /// θ ϰ մϴ. + /// 부모와 동일하게 설정합니다. FollowParent, - /// Position = , Scale = , Rotation = ׵ ȸ մϴ. + /// Position = 영벡터, Scale = 단위벡터, Rotation = 항등 회전으로 설정합니다. Origin, - /// Position/Scale/Rotation ״ մϴ. + /// Position/Scale/Rotation을 그대로 유지합니다. DoNothing } /// - /// ̵ ڽ GameObject localPosition/Scale/Rotation ŸԴϴ. + /// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입입니다. /// public enum TransformMoveType { - /// θ ϰ մϴ. + /// 부모와 동일하게 설정합니다. FollowParent, - /// Position = , Scale = , Rotation = ׵ ȸ մϴ. + /// Position = 영벡터, Scale = 단위벡터, Rotation = 항등 회전으로 설정합니다. Origin, - /// Position/Scale/Rotation ״ մϴ. + /// Position/Scale/Rotation을 그대로 유지합니다. DoNothing } @@ -57,14 +57,14 @@ namespace UVC.Linq #region Add /// - /// GameObject/Component GameObject ڽ ߰մϴ. ˴ϴ. + /// GameObject/Component를 이 GameObject의 자식으로 추가합니다. 대상이 복제됩니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 복제할 대상입니다. + /// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T Add(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 } /// - /// GameObject/Component GameObject ڽ ߰մϴ. ˴ϴ. + /// GameObject/Component를 이 GameObject의 자식으로 추가합니다. 대상이 복제됩니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 복제할 대상입니다. + /// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T[] AddRange(this GameObject parent, IEnumerable 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 } /// - /// GameObject/Component GameObject ù ° ڽ ߰մϴ. ˴ϴ. + /// GameObject/Component를 이 GameObject의 첫 번째 자식으로 추가합니다. 대상이 복제됩니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 복제할 대상입니다. + /// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T AddFirst(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 } /// - /// GameObject/Component GameObject ù ° ڽ ߰մϴ. ˴ϴ. + /// GameObject/Component를 이 GameObject의 첫 번째 자식으로 추가합니다. 대상이 복제됩니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 복제할 대상입니다. + /// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T[] AddFirstRange(this GameObject parent, IEnumerable 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 } /// - /// GameObject/Component GameObject տ ߰մϴ. ˴ϴ. + /// GameObject/Component를 이 GameObject 앞에 추가합니다. 대상이 복제됩니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 복제할 대상입니다. + /// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T AddBeforeSelf(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 } /// - /// GameObject/Component GameObject տ ߰մϴ. ˴ϴ. + /// GameObject/Component를 이 GameObject 앞에 추가합니다. 대상이 복제됩니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 복제할 대상입니다. + /// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T[] AddBeforeSelfRange(this GameObject parent, IEnumerable 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 } /// - /// GameObject/Component GameObject ڿ ߰մϴ. ˴ϴ. + /// GameObject/Component를 이 GameObject 뒤에 추가합니다. 대상이 복제됩니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 복제할 대상입니다. + /// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T AddAfterSelf(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 } /// - /// GameObject/Component GameObject ڿ ߰մϴ. ˴ϴ. + /// GameObject/Component를 이 GameObject 뒤에 추가합니다. 대상이 복제됩니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 복제할 대상입니다. + /// 복제된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 이름을 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T[] AddAfterSelfRange(this GameObject parent, IEnumerable 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 /// - /// GameObject/Component GameObject ڽ ̵մϴ. + /// GameObject/Component를 이 GameObject의 자식으로 이동합니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ̵ ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 대상입니다. + /// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T MoveToLast(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 } /// - /// GameObject/Component GameObject ڽ ̵մϴ. + /// GameObject/Component를 이 GameObject의 자식으로 이동합니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ̵ ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 대상입니다. + /// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T[] MoveToLastRange(this GameObject parent, IEnumerable 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 } /// - /// GameObject/Component GameObject ù ° ڽ ̵մϴ. + /// GameObject/Component를 이 GameObject의 첫 번째 자식으로 이동합니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ̵ ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 대상입니다. + /// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T MoveToFirst(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 } /// - /// GameObject/Component GameObject ù ° ڽ ̵մϴ. + /// GameObject/Component를 이 GameObject의 첫 번째 자식으로 이동합니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ̵ ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 대상입니다. + /// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T[] MoveToFirstRange(this GameObject parent, IEnumerable childs, TransformMoveType moveType = TransformMoveType.DoNothing, bool? setActive = null, bool setLayer = false) where T : UnityEngine.Object { @@ -495,18 +495,18 @@ namespace UVC.Linq } /// - /// GameObject/Component GameObject ̵մϴ. + /// GameObject/Component를 이 GameObject 앞으로 이동합니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ̵ ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 대상입니다. + /// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T MoveToBeforeSelf(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 } /// - /// GameObject/Component GameObject ̵մϴ. + /// GameObject/Component를 이 GameObject 앞으로 이동합니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ̵ ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 대상입니다. + /// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T[] MoveToBeforeSelfRange(this GameObject parent, IEnumerable 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 } /// - /// GameObject/Component GameObject ڷ ̵մϴ. + /// GameObject/Component를 이 GameObject 뒤로 이동합니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ̵ ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 대상입니다. + /// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T MoveToAfterSelf(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 } /// - /// GameObject/Component GameObject ڷ ̵մϴ. + /// GameObject/Component를 이 GameObject 뒤로 이동합니다. /// - /// θ GameObjectԴϴ. - /// Դϴ. - /// ̵ ڽ GameObject localPosition/Scale/Rotation Ÿ մϴ. - /// ڽ GameObject Ȱ/Ȱ ¸ մϴ. null̸ ʽϴ. - /// ڽ GameObject ̾ θ ϰ Դϴ. + /// 부모 GameObject입니다. + /// 대상입니다. + /// 이동된 자식 GameObject의 localPosition/Scale/Rotation 설정 타입을 선택합니다. + /// 자식 GameObject의 활성/비활성 상태를 설정합니다. null이면 지정된 값을 설정하지 않습니다. + /// 자식 GameObject의 레이어를 부모와 동일하게 설정할지 여부입니다. public static T[] MoveToAfterSelfRange(this GameObject parent, IEnumerable 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 - /// GameObject ϰ(null üũ) ıմϴ. - /// 忡 true ϰų !Application.isPlaying ϼ. - /// θ null մϴ. + /// 이 GameObject를 안전하게(null 체크) 파괴합니다. + /// 에디터 모드에서는 true로 설정하거나 !Application.isPlaying을 전달하세요. + /// 부모를 null로 설정합니다. public static void Destroy(this GameObject self, bool useDestroyImmediate = false, bool detachParent = false) { if (self == null) return; diff --git a/Assets/Scripts/UVC/Linq/GameObjectExtensions.Traverse.cs b/Assets/Scripts/UVC/Linq/GameObjectExtensions.Traverse.cs index fcbccaef..73a68fb8 100644 --- a/Assets/Scripts/UVC/Linq/GameObjectExtensions.Traverse.cs +++ b/Assets/Scripts/UVC/Linq/GameObjectExtensions.Traverse.cs @@ -8,8 +8,8 @@ namespace UVC.Linq public static partial class GameObjectExtensions { - /// (θ, ڽ, ڽĵ, /ڼ, / ü) ü ȸմϴ. - /// GameObject θ GameObject ɴϴ. GameObject θ null ȯմϴ. + /// 축(부모, 자식, 자식들, 조상/자손, 이전 형제/이후 형제 객체)을 기반으로 게임 객체를 순회합니다. + /// 이 GameObject의 부모 GameObject를 가져옵니다. 이 GameObject에 부모가 없으면 null을 반환합니다. public static GameObject Parent(this GameObject origin) { if (origin == null) return null; @@ -20,77 +20,77 @@ namespace UVC.Linq return parentTransform.gameObject; } - /// ̸ ù ° ڽ GameObject ɴϴ. ̸ GameObject null ȯմϴ. + /// 지정된 이름을 가진 첫 번째 자식 GameObject를 가져옵니다. 지정된 이름을 가진 GameObject가 없으면 null을 반환합니다. 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; } - /// ڽ GameObject ÷ ȯմϴ. + /// 자식 GameObject의 컬렉션을 반환합니다. public static ChildrenEnumerable Children(this GameObject origin) { return new ChildrenEnumerable(origin, false); } - /// GameObject ڽ GameObject ϴ GameObject ÷ ȯմϴ. + /// 이 GameObject와 자식 GameObject를 포함하는 GameObject 컬렉션을 반환합니다. public static ChildrenEnumerable ChildrenAndSelf(this GameObject origin) { return new ChildrenEnumerable(origin, true); } - /// GameObject GameObject ÷ ȯմϴ. + /// 이 GameObject의 조상 GameObject 컬렉션을 반환합니다. public static AncestorsEnumerable Ancestors(this GameObject origin) { return new AncestorsEnumerable(origin, false); } - /// ҿ GameObject ϴ GameObject ÷ ȯմϴ. + /// 이 요소와 이 GameObject의 조상을 포함하는 GameObject 컬렉션을 반환합니다. public static AncestorsEnumerable AncestorsAndSelf(this GameObject origin) { return new AncestorsEnumerable(origin, true); } - /// ڼ GameObject ÷ ȯմϴ. + /// 자손 GameObject의 컬렉션을 반환합니다. public static DescendantsEnumerable Descendants(this GameObject origin, Func descendIntoChildren = null) { return new DescendantsEnumerable(origin, false, descendIntoChildren); } - /// GameObject GameObject ڼ GameObject ϴ GameObject ÷ ȯմϴ. + /// 이 GameObject와 이 GameObject의 모든 자손 GameObject를 포함하는 GameObject 컬렉션을 반환합니다. public static DescendantsEnumerable DescendantsAndSelf(this GameObject origin, Func descendIntoChildren = null) { return new DescendantsEnumerable(origin, true, descendIntoChildren); } - /// GameObject GameObject ÷ ȯմϴ. + /// 이 GameObject 이전의 형제 GameObject 컬렉션을 반환합니다. public static BeforeSelfEnumerable BeforeSelf(this GameObject origin) { return new BeforeSelfEnumerable(origin, false); } - /// GameObject GameObject GameObject ϴ GameObject ÷ ȯմϴ. + /// 이 GameObject와 이 GameObject 이전의 형제 GameObject를 포함하는 GameObject 컬렉션을 반환합니다. public static BeforeSelfEnumerable BeforeSelfAndSelf(this GameObject origin) { return new BeforeSelfEnumerable(origin, true); } - /// GameObject GameObject ÷ ȯմϴ. + /// 이 GameObject 이후의 형제 GameObject 컬렉션을 반환합니다. public static AfterSelfEnumerable AfterSelf(this GameObject origin) { return new AfterSelfEnumerable(origin, false); } - /// GameObject GameObject GameObject ϴ GameObject ÷ ȯմϴ. + /// 이 GameObject와 이 GameObject 이후의 형제 GameObject를 포함하는 GameObject 컬렉션을 반환합니다. public static AfterSelfEnumerable AfterSelfAndSelf(this GameObject origin) { return new AfterSelfEnumerable(origin, true); } - // ü ڸ մϴ. + // 수동 구조체 열거자를 구현합니다. public struct ChildrenEnumerable : IEnumerable { @@ -103,16 +103,16 @@ namespace UVC.Linq this.withSelf = withSelf; } - /// ҽ ÷ǿ Ʈ ÷ ȯմϴ. + /// 소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다. public OfComponentEnumerable OfComponent() where T : Component { return new OfComponentEnumerable(ref this); } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. - /// parent = null մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. + /// parent = null로 설정합니다. public void Destroy(bool useDestroyImmediate = false, bool detachParent = false) { var e = GetEnumerator(); @@ -134,8 +134,8 @@ namespace UVC.Linq } } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. public void Destroy(Func 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 } } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func filter, Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func let, Func filter, Func 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 { - 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(ref T[] array) { var index = 0; @@ -506,11 +506,11 @@ namespace UVC.Linq public struct OfComponentEnumerator : IEnumerator where T : Component { - Enumerator enumerator; // ڴ մϴ. + Enumerator enumerator; // 열거자는 변경 가능합니다. T current; #if UNITY_EDITOR - static List componentCache = new List(); // UNITY_EDITOR Ҵ + static List componentCache = new List(); // UNITY_EDITOR에서 할당 없음을 위함 #endif public OfComponentEnumerator(ref ChildrenEnumerable parent) @@ -563,15 +563,15 @@ namespace UVC.Linq this.withSelf = withSelf; } - /// ҽ ÷ǿ Ʈ ÷ ȯմϴ. + /// 소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다. public OfComponentEnumerable OfComponent() where T : Component { return new OfComponentEnumerable(ref this); } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. public void Destroy(bool useDestroyImmediate = false) { var e = GetEnumerator(); @@ -581,8 +581,8 @@ namespace UVC.Linq } } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. public void Destroy(Func 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 } } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func filter, Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func let, Func filter, Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(ref T[] array) { var index = 0; @@ -943,11 +943,11 @@ namespace UVC.Linq public struct OfComponentEnumerator : IEnumerator where T : Component { - Enumerator enumerator; // ڴ մϴ. + Enumerator enumerator; // 열거자는 변경 가능합니다. T current; #if UNITY_EDITOR - static List componentCache = new List(); // UNITY_EDITOR Ҵ + static List componentCache = new List(); // UNITY_EDITOR에서 할당 없음을 위함 #endif public OfComponentEnumerator(ref AncestorsEnumerable parent) @@ -1004,15 +1004,15 @@ namespace UVC.Linq this.descendIntoChildren = descendIntoChildren ?? alwaysTrue; } - /// ҽ ÷ǿ Ʈ ÷ ȯմϴ. + /// 소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다. public OfComponentEnumerable OfComponent() where T : Component { return new OfComponentEnumerable(ref this); } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. public void Destroy(bool useDestroyImmediate = false) { var e = GetEnumerator(); @@ -1022,8 +1022,8 @@ namespace UVC.Linq } } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. public void Destroy(Func 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 } } - /// ȭ ݺ⸦ մϴ. + /// 성능 최적화를 위해 내부 반복기를 사용합니다. /// public void ForEach(Action action) { @@ -1187,7 +1187,7 @@ namespace UVC.Linq DescendantsCore(ref originTransform, ref action); } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(ref GameObject[] array) { var index = 0; @@ -1203,7 +1203,7 @@ namespace UVC.Linq return index; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func filter, ref GameObject[] array) { var index = 0; @@ -1218,7 +1218,7 @@ namespace UVC.Linq return index; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func selector, ref T[] array) { var index = 0; @@ -1233,7 +1233,7 @@ namespace UVC.Linq return index; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func filter, Func selector, ref T[] array) { var index = 0; @@ -1248,7 +1248,7 @@ namespace UVC.Linq return index; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func let, Func filter, Func 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 { - 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 } } - /// ȭ ݺ⸦ մϴ. + /// 성능 최적화를 위해 내부 반복기를 사용합니다. public void ForEach(Action action) { if (parent.withSelf) @@ -1597,7 +1597,7 @@ namespace UVC.Linq } #if UNITY_EDITOR - static List componentCache = new List(); // UNITY_EDITOR Ҵ + static List componentCache = new List(); // UNITY_EDITOR에서 할당 없음을 위함 #endif void OfComponentDescendantsCore(ref Transform transform, ref Action action) @@ -1663,7 +1663,7 @@ namespace UVC.Linq } } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(ref T[] array) { var index = 0; @@ -1705,11 +1705,11 @@ namespace UVC.Linq public struct OfComponentEnumerator : IEnumerator where T : Component { - Enumerator enumerator; // ڴ մϴ. + Enumerator enumerator; // 열거자는 변경 가능합니다. T current; #if UNITY_EDITOR - static List componentCache = new List(); // UNITY_EDITOR Ҵ + static List componentCache = new List(); // UNITY_EDITOR에서 할당 없음을 위함 #endif public OfComponentEnumerator(ref DescendantsEnumerable parent) @@ -1767,15 +1767,15 @@ namespace UVC.Linq this.withSelf = withSelf; } - /// ҽ ÷ǿ Ʈ ÷ ȯմϴ. + /// 소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다. public OfComponentEnumerable OfComponent() where T : Component { return new OfComponentEnumerable(ref this); } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. public void Destroy(bool useDestroyImmediate = false) { var e = GetEnumerator(); @@ -1785,8 +1785,8 @@ namespace UVC.Linq } } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. public void Destroy(Func 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 } } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func filter, Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func let, Func filter, Func 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 { - 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(ref T[] array) { var index = 0; @@ -2163,11 +2163,11 @@ namespace UVC.Linq public struct OfComponentEnumerator : IEnumerator where T : Component { - Enumerator enumerator; // ڴ մϴ. + Enumerator enumerator; // 열거자는 변경 가능합니다. T current; #if UNITY_EDITOR - static List componentCache = new List(); // UNITY_EDITOR Ҵ + static List componentCache = new List(); // UNITY_EDITOR에서 할당 없음을 위함 #endif public OfComponentEnumerator(ref BeforeSelfEnumerable parent) @@ -2220,15 +2220,15 @@ namespace UVC.Linq this.withSelf = withSelf; } - /// ҽ ÷ǿ Ʈ ÷ ȯմϴ. + /// 소스 컬렉션에서 지정된 컴포넌트의 컬렉션을 반환합니다. public OfComponentEnumerable OfComponent() where T : Component { return new OfComponentEnumerable(ref this); } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. public void Destroy(bool useDestroyImmediate = false) { var e = GetEnumerator(); @@ -2238,8 +2238,8 @@ namespace UVC.Linq } } - /// ҽ ÷ GameObject ϰ(null Ȯ) ıմϴ. - /// truḛų !Application.isPlaying ؾ մϴ. + /// 소스 컬렉션의 모든 GameObject를 안전하게(null 확인) 파괴합니다. + /// 에디터 모드인 경우 true이거나 !Application.isPlaying을 전달해야 합니다. public void Destroy(Func 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 } } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func filter, Func 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(Func let, Func filter, Func 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 { - 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; } - /// Ҹ ۿ ϰ ũ⸦ ȯմϴ. 迭 ڵ Ȯ˴ϴ. + /// 요소를 버퍼에 저장하고 크기를 반환합니다. 배열은 자동으로 확장됩니다. public int ToArrayNonAlloc(ref T[] array) { var index = 0; @@ -2605,11 +2605,11 @@ namespace UVC.Linq public struct OfComponentEnumerator : IEnumerator where T : Component { - Enumerator enumerator; // ڴ մϴ. + Enumerator enumerator; // 열거자는 변경 가능합니다. T current; #if UNITY_EDITOR - static List componentCache = new List(); // UNITY_EDITOR Ҵ + static List componentCache = new List(); // UNITY_EDITOR에서 할당 없음을 위함 #endif public OfComponentEnumerator(ref AfterSelfEnumerable parent) diff --git a/Assets/Scripts/UVC/util/ColorUtil.cs b/Assets/Scripts/UVC/util/ColorUtil.cs index 39e68067..480797d8 100644 --- a/Assets/Scripts/UVC/util/ColorUtil.cs +++ b/Assets/Scripts/UVC/util/ColorUtil.cs @@ -9,7 +9,7 @@ namespace UVC.Util /// hex code to color #FFFFFF /// /// #rrggbb - /// Color ü + /// Color /// /// // Example usage: /// Color color = ColorUtil.FromHex("#FF5733"); @@ -32,7 +32,7 @@ namespace UVC.Util /// /// #rrggbb /// 0.0~1.0 - /// Color ü + /// Color /// /// // Example usage: /// Color colorWithAlpha = ColorUtil.FromHex("#FF5733", 0.5f); diff --git a/Assets/Scripts/UVC/util/GameObjectUtil.cs b/Assets/Scripts/UVC/util/GameObjectUtil.cs index 73661ae3..4d4217a8 100644 --- a/Assets/Scripts/UVC/util/GameObjectUtil.cs +++ b/Assets/Scripts/UVC/util/GameObjectUtil.cs @@ -3,16 +3,16 @@ using UnityEngine; namespace UVC.Util { /// - /// Unity θ GameObject ϰų Ư Ʈ ƿƼ ŬԴϴ. + /// Unity에서 프리팹 경로를 통해 GameObject를 생성하거나 특정 컴포넌트를 가져오는 유틸리티 클래스입니다. /// public static class GameObjectUtil { /// - /// ־ θ GameObject մϴ. + /// 주어진 프리팹 경로를 통해 GameObject를 생성합니다. /// - /// Resources - /// GameObject θ Transform ( ) - /// GameObject + /// 프리팹의 Resources 경로 + /// 생성된 GameObject의 부모 Transform (선택 사항) + /// 생성된 GameObject /// /// /// string prefabPath = "Prefabs/MyPrefab"; @@ -27,12 +27,12 @@ namespace UVC.Util } /// - /// ־ θ Ư Ÿ Ʈ ɴϴ. + /// 주어진 프리팹 경로를 통해 특정 타입의 컴포넌트를 가져옵니다. /// - /// Ʈ Ÿ - /// Resources - /// GameObject θ Transform ( ) - /// GameObject Ʈ + /// 가져올 컴포넌트 타입 + /// 프리팹의 Resources 경로 + /// 생성된 GameObject의 부모 Transform (선택 사항) + /// 생성된 GameObject에서 가져온 컴포넌트 /// /// /// string prefabPath = "Prefabs/MyPrefab"; diff --git a/Assets/Scripts/UVC/util/GizmoDraw.cs b/Assets/Scripts/UVC/util/GizmoDraw.cs index 2f07ca4e..185d76dc 100644 --- a/Assets/Scripts/UVC/util/GizmoDraw.cs +++ b/Assets/Scripts/UVC/util/GizmoDraw.cs @@ -3,12 +3,12 @@ using UnityEngine; namespace UVC.Util { /// - /// GizmoDraw Ŭ Unity Gizmo Ͽ Sphere, Box, Ǵ Mesh ׸ մϴ. + /// GizmoDraw 클래스는 Unity의 Gizmo를 사용하여 Sphere, Box, 또는 Mesh를 그리는 기능을 제공합니다. /// public class GizmoDraw : MonoBehaviour { /// - /// Gizmo Ÿ մϴ. Sphere, Box, Ǵ Mesh ϳ ֽϴ. + /// Gizmo의 타입을 정의합니다. Sphere, Box, 또는 Mesh 중 하나를 선택할 수 있습니다. /// public enum GizmoType { @@ -18,52 +18,52 @@ namespace UVC.Util } /// - /// Gizmo Ÿ մϴ. + /// 현재 Gizmo의 타입을 설정합니다. /// public GizmoType gizmoType; /// - /// Gizmo ȭ鿡 ǥ θ մϴ. + /// Gizmo를 화면에 표시할지 여부를 설정합니다. /// public bool show = true; /// - /// Gizmo ̾ ׸ θ մϴ. + /// Gizmo를 와이어프레임으로 그릴지 여부를 설정합니다. /// public bool wire = false; /// - /// Gizmo մϴ. + /// Gizmo의 색상을 설정합니다. /// [SerializeField] private Color color = Color.yellow; /// - /// Sphere Gizmo մϴ. + /// Sphere Gizmo의 반지름을 설정합니다. /// [SerializeField] private float radius = 1f; /// - /// Box Gizmo (Bounds) մϴ. + /// Box Gizmo의 경계(Bounds)를 설정합니다. /// public Bounds bounds = new Bounds(Vector3.zero, Vector3.one); /// - /// Mesh Gizmo ׸ Mesh մϴ. + /// Mesh Gizmo를 그릴 때 사용할 Mesh를 설정합니다. /// public Mesh mesh; /// - /// Mesh Gizmo մϴ. + /// Mesh Gizmo의 스케일을 설정합니다. /// public float scale = 1f; /// - /// Unity Gizmo ׸ ޼ҵԴϴ. Unity Ϳ մϴ. + /// Unity의 Gizmo를 그리는 메소드입니다. Unity 에디터에서만 동작합니다. /// /// - /// GizmoDraw Ʈ Ͽ Sphere ׸ : + /// GizmoDraw 컴포넌트를 사용하여 Sphere를 그리는 예제: /// /// var gizmoDraw = gameObject.AddComponent(); /// gizmoDraw.gizmoType = GizmoDraw.GizmoType.Sphere;