내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Unity의 컴포넌트 선택 열거의 차이점에 대해 그에 따라 다른 속성을 변경하는 기능은 오늘 추가하겠습니다.
먼저 MaskScroll 스크롤 구성 요소를 정의합니다. 이 구성 요소는 가로 및 세로 스크롤과 스크롤 가속 및 감속 기능을 지원합니다.
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public enum EMaskScrollStatus {
- NONE,
- /// <summary>
- /// 停止
- /// </summary>
- STOP,
- /// <summary>
- /// 加速滚动
- /// </summary>
- SCROLLING_ACCE,
- /// <summary>
- /// 减速滚动
- /// </summary>
- SCROLLING_DESC
- }
-
- public enum EMaskScrollDirection {
- /// <summary>
- /// 水平方向
- /// </summary>
- Horizontal,
- /// <summary>
- /// 竖直方向
- /// </summary>
- Vertical
- }
-
- public enum EMaskScrollUpDown {
- UP,
- DOWN
- }
-
- public enum EMaskScrollLeftRight {
- LEFT,
- RIGHT
- }
-
- public class MaskScroll : MonoBehaviour
- {
- [Header("滚动速度相关")]
- [Tooltip("加速到多大速度")]
- [SerializeField]
- private float acceSpeedMax = 10f;
-
- [Tooltip("减速到多小")]
- [SerializeField]
- private float descSpeedMin = 0f;
-
- [Space(5)]
-
- [Tooltip("滚动轴")]
- public EMaskScrollDirection scrollDir = EMaskScrollDirection.Vertical;
-
- [HideInInspector]
- public EMaskScrollUpDown scrollVertical = EMaskScrollUpDown.DOWN;
- [HideInInspector]
- public EMaskScrollLeftRight scrollHorizontal = EMaskScrollLeftRight.RIGHT;
-
- [SerializeField]
- [Tooltip("滚动缓冲区")]
- private float scrollBuffer = 30f;
-
- private EMaskScrollStatus scrollStatus = EMaskScrollStatus.NONE;
-
- private RectTransform contentsTransform = null;
-
- /// <summary>
- /// 滚动到哪一个元素
- /// </summary>
- private int targetScrollIndex = 0;
-
- public EMaskScrollStatus ScrollStatus {
- set {
- scrollStatus = value;
- }
- get {
- return scrollStatus;
- }
- }
-
- private void Awake() {
- contentsTransform = transform.Find("avatars") as RectTransform;
-
- }
-
- // Start is called before the first frame update
- void Start()
- {
-
- }
-
- public void StartScroll() {
- // 开始加速滚动
- scrollStatus = EMaskScrollStatus.SCROLLING_ACCE;
- targetScrollIndex = Random.Range(0,contentsTransform.childCount);
- }
-
- // Update is called once per frame
- void Update()
- {
- if(scrollStatus == EMaskScrollStatus.SCROLLING_ACCE || scrollStatus == EMaskScrollStatus.SCROLLING_DESC) {
- if(scrollStatus == EMaskScrollStatus.SCROLLING_ACCE) {
-
- } else {
-
- }
- }
- }
- }
이 글을 작성할 때 선택한 스크롤 축에 따라 스크롤 방향을 동적으로 표시할 수 있기를 원했기 때문에 다음과 같은 답을 얻었습니다.
- using System.Collections;
- using System.Collections.Generic;
- using UnityEditor;
-
- [CustomEditor(typeof(MaskScroll))]
- public class MaskScrollEditor : Editor
- {
- public override void OnInspectorGUI()
- {
- DrawDefaultInspector();
- MaskScroll maskScroll = (MaskScroll)target;
-
- if(maskScroll.scrollDir == EMaskScrollDirection.Horizontal) {
- maskScroll.scrollHorizontal = (EMaskScrollLeftRight)EditorGUILayout.EnumPopup("滚动方向",maskScroll.scrollHorizontal);
- } else if (maskScroll.scrollDir == EMaskScrollDirection.Vertical)
- {
- maskScroll.scrollVertical = (EMaskScrollUpDown)EditorGUILayout.EnumPopup("滚动方向", maskScroll.scrollVertical);
- }
- }
- }
또한 이 코드에 base.OnInspectorGUI()를 추가하지 않도록 주의하세요. 그렇지 않으면 구성 요소가 추가됩니다.
에디터를 두 번 방문하세요