버튼 클릭시 점수가 올라가지 않습니다.
164
작성한 질문수 6
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UI_Button : UI_Base
{
//[SerializeField]
//TextMeshProUGUI _text;
enum Buttons
{
PointButton
}
enum Texts
{
PointText,
ScoreText,
}
enum GameObjects
{
TestObject,
}
enum Images
{
ItemIcon,
}
private void Start()
{
Bind<Button>(typeof(Buttons));
Bind<TextMeshProUGUI>(typeof(Texts));
Bind<GameObject>(typeof(GameObjects));
Bind<Image>(typeof(Images));
//Get<TextMeshProUGUI>((int)Texts.ScoreText).text = "Bind Test";
GetButton((int)Buttons.PointButton).gameObject.AddUIEvent(OnButtonClicked);
GameObject go = GetImage((int)Images.ItemIcon).gameObject;
AddUIEvent(go, (PointerEventData data) => { go.transform.position = data.position; },Define.UIEvnet.Drag);
}
int _score = 0;
public void OnButtonClicked(PointerEventData data)
{
_score++;
//_text.text = $"점수 : {_score}";
Get<TextMeshProUGUI>((int)Texts.ScoreText).text = $"점수 : {_score}";
}
}using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UI_Base : MonoBehaviour
{
Dictionary<Type, UnityEngine.Object[]> _objects = new Dictionary<Type, UnityEngine.Object[]>();
protected void Bind<T>(Type type) where T : UnityEngine.Object
{
string[] names = Enum.GetNames(type);
UnityEngine.Object[] objects = new UnityEngine.Object[names.Length];
_objects.Add(typeof(T), objects);
for (int i = 0; i < names.Length; i++)
{
if (typeof(T) == typeof(GameObject))
objects[i] = Util.FindChild(gameObject, names[i], true);
else
objects[i] = Util.FindChild<T>(gameObject, names[i], true);
if (objects[i] == null)
Debug.Log($"Failed to bind({names[i]})");
}
}
protected T Get<T>(int idx) where T : UnityEngine.Object
{
UnityEngine.Object[] objects = null;
if (_objects.TryGetValue(typeof(T), out objects) == false)
return null;
return objects[idx] as T;
}
protected TextMeshProUGUI GetText(int idx)
{
return Get<TextMeshProUGUI>(idx);
}
protected Button GetButton(int idx)
{
return Get<Button>(idx);
}
protected Image GetImage(int idx)
{
return Get<Image>(idx);
}
public static void AddUIEvent(GameObject go, Action<PointerEventData>action,Define.UIEvnet type = Define.UIEvnet.Click)
{
UI_EventHandler evt = Util.GetOrAddComponent<UI_EventHandler>(go);
switch(type)
{
case Define.UIEvnet.Click:
evt.OnClickHandler -= action;
evt.OnClickHandler += action;
break;
case Define.UIEvnet.Drag:
evt.OnDragHandler -= action;
evt.OnDragHandler += action;
break;
}
//evt.OnDragHandler += ((PointerEventData data) => { evt.gameObject.transform.position = data.position; });
}
}using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UIElements;
public class UI_EventHandler : MonoBehaviour, IPointerClickHander ,IDragHandler
{
public Action<PointerEventData> OnClickHandler = null;
public Action<PointerEventData> OnDragHandler = null;
public void OnPointerClick(PointerEventData eventData)
{
if (OnClickHandler != null)
OnClickHandler.Invoke(eventData);
}
public void OnDrag(PointerEventData eventData)
{
if (OnDragHandler != null)
OnDragHandler.Invoke(eventData);
}
}드래그작동은 잘 되는데, 버튼 클릭하면 점수가 올라가지 않습니다.
UI_Button스크립트에 52번째줄, public void OnButtonClicked 부분에 중단점을 찍어 보기도 했고,
UI_Base 스크립트의 switch문에 있는 Click과 Drag부분에도 해봤는데 어느부분이 문제가 있는지 찾지를 못했습니다.
제가 디버깅을 잘 못해서 이런건지..ㅠㅠ
다른 분들 질문과, 코드 정리 올려주신거 비교해봐도 틀린 부분이 없는거 같은데 무슨 문제인지 잘 모르겠습니다 ㅠㅠ
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
lover123e님의 질문에 대한 답변입니다. 코드를 검토해본 결과, 제시된 코드와 유사한 상황에서 발생한 문제와 그 해결 방안을 찾았습니다. 해당 상황은 버튼 클릭 이벤트가 동작하지 않는 경우였고, 다른 수강생도 비슷한 문제를 겪었습니다.
문제의 원인 중 하나는 UI_EventHandler 스크립트의 IPointerClickHander 인터페이스가 올바르게 구현되지 않았을 가능성이 있습니다. 코드에서 IPointerClickHander는 오타로 보입니다. 실제로는 IPointerClickHandler가 정확한 인터페이스 명입니다. 이 오타로 인해 클릭 이벤트가 올바르게 등록되지 않았을 수 있습니다.
이와 더불어, 코드에 다른 문제가 없는지 확인하는 것이 중요합니다. 예를 들어, AddUIEvent 함수에서 이벤트를 등록할 때, 올바른 객체에 이벤트가 추가되었는지, UI_EventHandler 컴포넌트가 해당 UI 요소에 추가되어 있고 올바르게 설정되었는지 등을 확인해야 합니다.
위에 언급된 문제와 유사한 상황에 대한 질문을 참고해보시는 것을 권장합니다. 다음은 참고할 수 있는 기존 질문 및 답변의 링크입니다:
- 마지막 점수올리기 부분에서 막혔습니다. - 버튼 클릭 이벤트가 동작하지 않는 유사한 문제와 그 해결책에 대해 설명하고 있습니다.
코드상의 오타나 소소한 실수들이 눈에 잘 띄지 않을 때가 많아, 다른 수강생이 겪었던 문제와 그 해결 방법을 참조하는 것이 도움됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
UI 기능 관련 질문이 있습니다!
0
38
2
픽셀 좌표 스크린 좌표
0
33
0
전체적으로 코드 읽는게 굉장히 오래 걸리네요...
0
76
2
카메라 #2 수업 캐릭터 쓰러짐 해결
0
84
1
플레이어 움직임이 끝날때, 기울어짐 현상
0
84
1
Input 적용과 관련하여 질문 있습니다.
0
75
1
디버그 불가.. Unity에 연결 불가
0
83
1
달리기 애니메이션 에러
0
89
2
오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다
0
66
1
GetKey 오류
0
111
2
에셋을 어디에 올려두신지 알 수 있나요?
0
107
1
재귀호출? 오류나는데 왜 이래요 ?
0
169
6
Animation blending 파라미터 계산
0
69
1
newPos와 to지점이 겹쳐져야 하는거 아닌가요?
0
97
3
오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다
0
88
2
질문있습니다
0
143
2
아 이거 소스코드 같은거 없나요?
0
142
3
질문 드립니다. string.IsNullOrEmpty(name)
0
87
2
@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?
0
136
2
유니티6 NavMesh 안되는분들
1
176
1
Unity6 Unity-Chan Material 마젠타 문제 해결법
7
529
1
GetComponent<Poolable> 질문드립니다.
0
102
2
UI 불러오지 못함
0
119
2
UI 자동화 #1 - Util.cs의 FindChild함수에서 component.name에 컴포넌트 이름이 뜹니다.
0
155
2





