#nullable enable using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UIElements; using UVC.UIToolkit; /// /// UTKStyleGuideSample의 Input 카테고리 Initialize 메서드들 /// public partial class UTKStyleGuideSample { #region Input Initializers private void InitializeInputFieldSample(VisualElement root) { SetCodeSamples(root, csharpCode: @"// 기본 입력 필드 var input = new UTKInputField(); input.label = ""이름""; // Unity TextField의 label 프로퍼티 (소문자) input.Placeholder = ""이름을 입력하세요""; input.OnValueChanged += (value) => Debug.Log($""입력값: {value}""); // 비밀번호 입력 필드 var password = new UTKInputField(); password.label = ""비밀번호""; password.isPasswordField = true; // 검증 오류 표시 input.ErrorMessage = ""이름은 필수입니다.""; input.ErrorMessage = """"; // 오류 제거 // 변형 스타일 input.Variant = UTKInputField.InputFieldVariant.Outlined; // 이벤트 input.OnFocused += () => Debug.Log(""포커스""); input.OnBlurred += () => Debug.Log(""포커스 해제""); input.OnSubmit += (value) => Debug.Log($""제출: {value}""); // 비활성화 input.IsEnabled = false; // 읽기 전용 input.isReadOnly = true; // 여러 줄 입력 input.multiline = true;", uxmlCode: @" "); } private void InitializeIntegerFieldSample(VisualElement root) { SetCodeSamples(root, csharpCode: @"// 기본 정수 필드 var intField = new UTKIntegerField(""나이""); intField.Value = 25; intField.OnValueChanged += (value) => Debug.Log($""나이: {value}""); // 범위 제한 (이벤트로 처리) intField.OnValueChanged += (value) => { if (value < 0) intField.Value = 0; if (value > 150) intField.Value = 150; }; // 비활성화 intField.IsEnabled = false;", uxmlCode: @" "); } private void InitializeLongFieldSample(VisualElement root) { SetCodeSamples(root, csharpCode: @"// 기본 Long 필드 var longField = new UTKLongField(""파일 크기""); longField.Value = 1073741824; // 1GB longField.OnValueChanged += (value) => Debug.Log($""크기: {value} bytes""); // 비활성화 longField.IsEnabled = false;", uxmlCode: @" "); } private void InitializeFloatFieldSample(VisualElement root) { SetCodeSamples(root, csharpCode: @"// 기본 Float 필드 var floatField = new UTKFloatField(""속도""); floatField.Value = 9.8f; floatField.OnValueChanged += (value) => Debug.Log($""속도: {value}""); // 범위 제한 (이벤트로 처리) floatField.OnValueChanged += (value) => { if (value < 0f) floatField.Value = 0f; if (value > 100f) floatField.Value = 100f; }; // 비활성화 floatField.IsEnabled = false;", uxmlCode: @" "); } private void InitializeDoubleFieldSample(VisualElement root) { SetCodeSamples(root, csharpCode: @"// 기본 Double 필드 var doubleField = new UTKDoubleField(""정밀도""); doubleField.Value = 3.141592653589793; doubleField.OnValueChanged += (value) => Debug.Log($""값: {value}""); // 비활성화 doubleField.IsEnabled = false;", uxmlCode: @" "); } private void InitializeNumberStepperSample(VisualElement root) { var disabledRow = root.Q("stepper-disabled-row"); if (disabledRow != null) { var stepper = new UTKIntStepper(0, 100, 30, 1); stepper.style.width = 150; stepper.SetEnabled(false); disabledRow.Add(stepper); } SetCodeSamples(root, csharpCode: @"// 기본 사용법 var stepper = new UTKIntStepper(minValue: 0, maxValue: 100, value: 50, step: 1); stepper.OnValueChanged += (newValue) => Debug.Log($""Value: {newValue}""); // Step 설정 var stepper5 = new UTKIntStepper(0, 100, 25, 5); // Step 5씩 증감 // Wrap Around (최소/최대값에서 순환) var wrapStepper = new UTKIntStepper(0, 100, 0, 10); wrapStepper.WrapAround = true; // 0 -> -10 시 100으로 순환 // 비활성화 var disabledStepper = new UTKIntStepper(0, 100, 30, 1); disabledStepper.SetEnabled(false); // 속성 변경 stepper.Value = 75; stepper.MinValue = 10; stepper.MaxValue = 90; stepper.Step = 2;", uxmlCode: @" "); } private void InitializeVector2FieldSample(VisualElement root) { var field = root.Q("vec2-position"); if (field != null) { field.Value = new Vector2(100, 200); } SetCodeSamples(root, csharpCode: @"// 기본 사용법 var positionField = new UTKVector2Field(""Position""); positionField.Value = new Vector2(100, 200); positionField.OnValueChanged += (newValue) => Debug.Log($""Position: {newValue}""); // 라벨 없이 var field = new UTKVector2Field(); field.label = """"; // 읽기 전용 var readOnlyField = new UTKVector2Field(""ReadOnly""); readOnlyField.SetEnabled(false);", uxmlCode: @" "); } private void InitializeVector3FieldSample(VisualElement root) { var field = root.Q("vec3-position"); if (field != null) { field.Value = new Vector3(10, 20, 30); } SetCodeSamples(root, csharpCode: @"// 기본 사용법 var positionField = new UTKVector3Field(""Position""); positionField.Value = new Vector3(10, 20, 30); positionField.OnValueChanged += (newValue) => Debug.Log($""Position: {newValue}""); // 회전 벡터 var rotationField = new UTKVector3Field(""Rotation""); rotationField.Value = new Vector3(0, 90, 0); // 비활성화 var disabledField = new UTKVector3Field(""Disabled""); disabledField.SetEnabled(false);", uxmlCode: @" "); } private void InitializeVector4FieldSample(VisualElement root) { var field = root.Q("vec4-color"); if (field != null) { field.Value = new Vector4(1, 0.5f, 0.25f, 1); } SetCodeSamples(root, csharpCode: @"// 기본 사용법 var colorField = new UTKVector4Field(""Color""); colorField.Value = new Vector4(1, 0.5f, 0.25f, 1); // RGBA colorField.OnValueChanged += (newValue) => Debug.Log($""Color: {newValue}""); // 쿼터니언 값 var quaternionField = new UTKVector4Field(""Quaternion""); var quat = Quaternion.identity; quaternionField.Value = new Vector4(quat.x, quat.y, quat.z, quat.w); // 비활성화 var disabledField = new UTKVector4Field(""Disabled""); disabledField.SetEnabled(false);", uxmlCode: @" "); } private void InitializeRectFieldSample(VisualElement root) { var field = root.Q("rect-area"); if (field != null) { field.Value = new Rect(10, 20, 100, 50); } SetCodeSamples(root, csharpCode: @"// 기본 사용법 var areaField = new UTKRectField(""Area""); areaField.Value = new Rect(10, 20, 100, 50); // x, y, width, height areaField.OnValueChanged += (newValue) => Debug.Log($""Rect: {newValue}""); // 화면 영역 설정 var screenArea = new UTKRectField(""Screen Area""); screenArea.Value = new Rect(0, 0, Screen.width, Screen.height); // 비활성화 var disabledField = new UTKRectField(""Disabled""); disabledField.SetEnabled(false);", uxmlCode: @" "); } private void InitializeBoundsFieldSample(VisualElement root) { var field = root.Q("bounds-collision"); if (field != null) { field.Value = new Bounds(new Vector3(0, 1, 0), new Vector3(2, 2, 2)); } SetCodeSamples(root, csharpCode: @"// 기본 사용법 var boundsField = new UTKBoundsField(""Bounds""); var center = new Vector3(0, 1, 0); var size = new Vector3(2, 2, 2); boundsField.Value = new Bounds(center, size); boundsField.OnValueChanged += (newValue) => Debug.Log($""Bounds: {newValue}""); // 콜라이더 범위 설정 var collisionField = new UTKBoundsField(""Collision Bounds""); collisionField.Value = new Bounds(Vector3.zero, Vector3.one * 5); // 비활성화 var disabledField = new UTKBoundsField(""Disabled""); disabledField.SetEnabled(false);", uxmlCode: @" "); } #endregion #region Dropdown Initializers private void InitializeDropdownSample(VisualElement root) { var normalRow = root.Q("dropdown-normal-row"); if (normalRow != null) { var dropdown = new UTKDropdown("Select Option"); dropdown.SetOptions(new List { "Option 1", "Option 2", "Option 3", "Option 4" }); dropdown.SelectedIndex = 0; normalRow.Add(dropdown); } var disabledRow = root.Q("dropdown-disabled-row"); if (disabledRow != null) { var dropdown = new UTKDropdown("Disabled"); dropdown.SetOptions(new List { "Option 1", "Option 2" }); dropdown.SelectedIndex = 0; dropdown.IsEnabled = false; disabledRow.Add(dropdown); } SetCodeSamples(root, csharpCode: @"// 기본 사용법 var dropdown = new UTKDropdown(""Select Option""); dropdown.SetOptions(new List { ""Option 1"", ""Option 2"", ""Option 3"", ""Option 4"" }); dropdown.SelectedIndex = 0; // 선택 이벤트 (인덱스와 값 모두 전달) dropdown.OnSelectionChanged += (index, value) => { Debug.Log($""선택: [{index}] {value}""); }; // 생성자로 한 번에 설정 var sortDropdown = new UTKDropdown(""정렬"", new List { ""이름"", ""날짜"", ""크기"" }); // 선택된 값 가져오기 var selectedIndex = dropdown.SelectedIndex; var selectedValue = dropdown.SelectedValue; // 옵션 동적 변경 dropdown.SetOptions(new List { ""New 1"", ""New 2"", ""New 3"" }); // 프로그램으로 선택 (인덱스로) dropdown.SelectedIndex = 2; // 프로그램으로 선택 (값으로) dropdown.SetSelectedValue(""Option 2""); // 이벤트 없이 값 변경 (초기화 시 유용) sortDropdown.SetSelectedValue(""크기"", notify: false); // 동적으로 옵션 추가 dropdown.AddOption(""Option 5""); // Disabled var disabledDropdown = new UTKDropdown(""Disabled""); disabledDropdown.SetOptions(new List { ""Option 1"", ""Option 2"" }); disabledDropdown.SelectedIndex = 0; disabledDropdown.IsEnabled = false;", uxmlCode: @" "); } private enum SampleEnum { Option1, Option2, Option3 } private void InitializeEnumDropDownSample(VisualElement root) { var enumRow = root.Q("enum-dropdown-row"); if (enumRow != null) { var field = new UTKEnumDropDown("Choice", SampleEnum.Option1); enumRow.Add(field); } SetCodeSamples(root, csharpCode: @"// Enum 정의 public enum SampleEnum { Option1, Option2, Option3 } public enum Difficulty { Easy, Normal, Hard, Expert } // 기본 사용법 (생성자로 label과 기본값 지정) var enumField = new UTKEnumDropDown(""Choice"", SampleEnum.Option1); // 값 변경 이벤트 enumField.OnValueChanged += (newValue) => { Debug.Log($""선택된 값: {newValue}""); // Enum으로 캐스팅하여 사용 if (newValue is SampleEnum sample) { Debug.Log($""SampleEnum: {sample}""); } }; // 난이도 선택 예시 var difficultyDropdown = new UTKEnumDropDown(""난이도"", Difficulty.Normal); difficultyDropdown.OnValueChanged += (value) => { var difficulty = (Difficulty)value; Debug.Log($""난이도 변경: {difficulty}""); }; // 현재 선택된 값 가져오기 var currentValue = enumField.Value; if (currentValue is SampleEnum sample) { Debug.Log($""현재 값: {sample}""); } // 프로그램으로 값 변경 enumField.Value = SampleEnum.Option2; // 이벤트 없이 값 변경 enumField.SetValue(SampleEnum.Option3, notify: false); // Disabled enumField.IsEnabled = false;", uxmlCode: @" "); } private void InitializeMultiSelectDropdownSample(VisualElement root) { var normalRow = root.Q("multiselect-normal-row"); if (normalRow != null) { var dropdown = new UTKMultiSelectDropdown("Select Categories"); dropdown.SetOptions(new List { "Category 1", "Category 2", "Category 3", "Category 4", "Category 5" }); dropdown.SetSelectedIndices(new List { 0, 2 }); normalRow.Add(dropdown); } var disabledRow = root.Q("multiselect-disabled-row"); if (disabledRow != null) { var dropdown = new UTKMultiSelectDropdown("Disabled"); dropdown.SetOptions(new List { "Option 1", "Option 2", "Option 3" }); dropdown.SetSelectedIndices(new List { 0, 1 }); dropdown.IsEnabled = false; disabledRow.Add(dropdown); } SetCodeSamples(root, csharpCode: @"// 기본 사용법 var dropdown = new UTKMultiSelectDropdown(""Select Categories""); dropdown.SetOptions(new List { ""Category 1"", ""Category 2"", ""Category 3"", ""Category 4"", ""Category 5"" }); // 선택 이벤트 (인덱스 목록과 값 목록 모두 전달) dropdown.OnSelectionChanged += (indices, values) => { Debug.Log($""선택된 개수: {values.Count}""); Debug.Log($""선택 항목: {string.Join("", "", values)}""); Debug.Log($""인덱스: [{string.Join("", "", indices)}]""); }; // 생성자로 한 번에 설정 var categoryDropdown = new UTKMultiSelectDropdown( ""카테고리 선택"", new List { ""과일"", ""채소"", ""육류"", ""유제품"" } ); // 기본값 설정 (인덱스로) categoryDropdown.SetSelectedIndices(new List { 0, 2 }); // 기본값 설정 (값으로) categoryDropdown.SetSelectedValues(new List { ""과일"", ""육류"" }); // 이벤트 없이 선택 변경 (초기화 시 유용) categoryDropdown.SetSelectedIndices(new List { 1, 3 }, notify: false); // 선택된 값 가져오기 var selectedIndices = dropdown.SelectedIndices; var selectedValues = dropdown.SelectedValues; // 전체 선택 dropdown.SelectAll(); // 전체 해제 dropdown.ClearSelection(); // 옵션 동적 변경 dropdown.SetOptions(new List { ""New 1"", ""New 2"", ""New 3"" }); // Disabled var disabledDropdown = new UTKMultiSelectDropdown(""Disabled""); disabledDropdown.SetOptions(new List { ""Option 1"", ""Option 2"", ""Option 3"" }); disabledDropdown.SetSelectedIndices(new List { 0, 1 }); disabledDropdown.IsEnabled = false;", uxmlCode: @" "); } #endregion #region Slider Initializers private void InitializeSliderSample(VisualElement root) { SetCodeSamples(root, csharpCode: @"// 기본 슬라이더 var slider = new UTKSlider(); slider.label = ""볼륨""; // Unity Slider의 label 프로퍼티 (소문자) slider.lowValue = 0; slider.highValue = 100; slider.value = 50; slider.OnValueChanged += (value) => Debug.Log($""볼륨: {value}""); // 생성자로 생성 var volumeSlider = new UTKSlider(""볼륨"", 0, 100, 75); // 정수만 허용 slider.showInputField = true; // 비활성화 slider.IsEnabled = false;", uxmlCode: @" "); } private void InitializeSliderIntSample(VisualElement root) { SetCodeSamples(root, csharpCode: @"// 기본 정수 슬라이더 var slider = new UTKSliderInt(); slider.label = ""레벨""; // Unity SliderInt의 label 프로퍼티 (소문자) slider.lowValue = 1; slider.highValue = 10; slider.value = 5; slider.OnValueChanged += (value) => Debug.Log($""레벨: {value}""); // 생성자로 생성 var levelSlider = new UTKSliderInt(""레벨"", 1, 10, 5); // 수량 슬라이더 var quantitySlider = new UTKSliderInt(""수량"", 0, 100, 25); quantitySlider.OnValueChanged += (value) => Debug.Log($""수량: {value}""); // 페이지 선택 var pageSlider = new UTKSliderInt(""페이지"", 1, 100, 1); pageSlider.OnValueChanged += (page) => LoadPage(page); // 비활성화 slider.IsEnabled = false;", uxmlCode: @" "); } private void InitializeMinMaxSliderSample(VisualElement root) { SetCodeSamples(root, csharpCode: @"// 기본 MinMax 슬라이더 var minMaxSlider = new UTKMinMaxSlider(); minMaxSlider.label = ""가격 범위""; // Unity MinMaxSlider의 label 프로퍼티 minMaxSlider.lowLimit = 0; // 전체 범위 최소값 minMaxSlider.highLimit = 1000; // 전체 범위 최대값 minMaxSlider.MinValue = 100; // 선택 범위 최소값 minMaxSlider.MaxValue = 500; // 선택 범위 최대값 // 값 변경 이벤트 (Vector2로 반환됨) minMaxSlider.OnValueChanged += (range) => { Debug.Log($""범위: {range.x} ~ {range.y}""); }; // 생성자로 생성 (label, lowLimit, highLimit, minValue, maxValue) var rangeSlider = new UTKMinMaxSlider(""범위"", 0, 100, 20, 80); // 비활성화 minMaxSlider.IsEnabled = false;", uxmlCode: @" "); } private void InitializeProgressBarSample(VisualElement root) { SetCodeSamples(root, csharpCode: @"// 기본 프로그레스 바 var progressBar = new UTKProgressBar(); progressBar.title = ""다운로드""; // ProgressBar의 title 프로퍼티 progressBar.MinValue = 0; // 또는 lowValue 직접 사용 progressBar.MaxValue = 100; // 또는 highValue 직접 사용 progressBar.Value = 45; // 생성자로 생성 (title, minValue, maxValue, defaultValue) var downloadBar = new UTKProgressBar(""다운로드"", 0, 100, 75); // 진행률 업데이트 progressBar.Value = 75; // 퍼센트 표시 progressBar.ShowPercentage = true; // 색상 변형 progressBar.Variant = UTKProgressBar.ProgressBarVariant.Success; progressBar.Variant = UTKProgressBar.ProgressBarVariant.Warning; progressBar.Variant = UTKProgressBar.ProgressBarVariant.Danger; // 비동기 작업 진행률 표시 async UniTask LoadDataAsync() { for (int i = 0; i <= 100; i += 10) { progressBar.Value = i; await UniTask.Delay(100); } }", uxmlCode: @" "); } #endregion }