=======================
=======================
=======================
출처: https://m.blog.naver.com/PostView.nhn?blogId=nicecapj&logNo=220396155254&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F
클릭이나, 터치에 의해 정해진 처리를 하는 컨트롤이다. 유니티사에서는 UI요소(Element)
라고 부른다. 앞으로는 UI요소라고 부르기로 하겠다.
Canvas밑에 Buttone이 생기고, 버턴에 메시지를 추가할 수 있도록 Text가 자식으로 추가된다.
버턴은 크게, 반응여부 / 변화/ 버턴이미지 / 이벤트로 구성되어 있다.
체크되어 있지 않으면, Noraml/Highlighted/Press/Disabled가 모두 무시된다.
단순 정보 표시용으로 사용할때, 체크를 해제해주면 된다.
PC에서는 Sprite Swap방식을 사용해서, 버턴을 누르던가, 클릭하게 되면
Animation(애니메이션 교체)
동작은 플레이를 한 후에 키보드 이동키를 눌러보면 된다.
Image Type(처리할 형태)은 4가지(Simple / Sliced / Tield / Filled)를 지원하는데,
빈 오브젝트를 하나 만들자.
F2를 눌러서, 이름을 ButtonHandler로 바꾸자.
ButtonTestHandler.cs라는 스크립트를 하나 만들고, ButtonTestHandler오브젝트에 추가하자.
using System.Collections;
public class ButtonTestHandler : MonoBehaviour {
public void OnClickHello()
{
Debug.Log("안녕하세요");
}
}
Text에는 버턴에 표시될 텍스트를 입력하면 된다.
=======================
=======================
=======================
버튼이밴트를 받을때 버튼이 속한 객체클래스를 바로 받을수있다.
-그림(1번) 컴포넌트 스크립트 C# 추가코드
class CUserListCell
{
public int a = 5;
public int b = 2;
[SerializeField] private Button _btnInvite = null;
//codes..
//..
}
- 그림(1번)을 "Cell" 오브젝트를 눌러서 "[SerializeField] private Button _btnInvite"부분의 속성링크란이 생기는데
그림(2번)의 버튼과 연동 시켜준다.
- 아래와 같이 아무 오브젝트에 스크립트 C#추가 코드를 넣어준다 [그림에선 "CUserlistView" 에 넣어주었다)
class CUserlistView
{
public void OnPressCellBtn(CUserListCell cell)
{
int test1 = cell.a;
int test2 = cell.b;
}
}
- 그림 그림(2번)을 눌러서 왼쪽에서 오브젝트트리란에 위에서 추가해준 "CUserlistView"C#코드를 컴포넌트를 넣어준 오브젝트와
연결시켜 그림(3번)처럼 해준다. 함수 "OnPressCellBtn(...)" 가보인다 그걸 연결시켜주고 그러면 "CUserListCell"객체를 넣어주는
란이 나온다. 그러면 오브젝트트리란의 그림(1번)을 드래그해서 링크시켜주면 된다.
-이렇게 완성후 실행하고 버튼을 클릭하면 위의 코드 OnPressCellBtn()의 cell.a 와 cell.b가 객체클랙스 값 그대로 들어올것이다.
=======================
=======================
=======================
출처: https://blog.danggun.net/2881
유니티가 5.0이 되면서 플러그인 몇 개를 흡수해서 GUI를 구성하는 방법이 비주얼 적으로 바뀌었습니다.
(4.6 때 바뀐 거 같지만 넘어가고 ㅎㅎㅎ)
새로워진 GUI 작성방법을 배워 봅시다.
이전 포스팅을 참고하시면 좋을 듯 하네요.
참고 : [Unity] GUI 작성하기
0. 테스트 화면 만들기
방향키를 'GUI'로 만들고 방향키를 누르면 카메라가 이동하도록 만들 것입니다.
테스트를 위해 프로젝트를 생성하고 3D 큐브를 하나 추가 합니다.
테스트용이니 적당한 이미지를 큐브에 적용합니다.
1. 버튼 만들기
이제 'GameObject'메뉴에 'UI'카테고리가 생겼습니다!!!!
1-1. 버튼 추가 하기
UI > Button
을 눌러 GUI 버튼을 추가 합니다.
이제 트랜스폼툴에 새로 추가된 'UI 툴'을 눌러 UI 편집을 활성화 시킵니다.
게임창을 확인하면 버튼이 추가 된것을 알 수 있습니다.
1-2. 방향키 만들기
위와 같은 방법으로 4개의 버튼을 만듭니다.
하이어라키에 보면 'Canvas>Button'이 추가 된 것을 볼 수 있습니다.
이곳에 'Button'을 확장해보면 'Text'가 포함되어 있음을 볼 수 있습니다.
이 'Text'를 수정하면 버튼에 표시되는 텍스트를 꾸밀 수 있습니다.
우리는 방향키에 맞게 각각의 버튼의 텍스트를 수정 합시다.
모양도 이쁘게 배치해 봅시다.
2. 기능 연결하기
이제 스크립트를 만들어 버튼과 카메라를 연결해 봅시다.
2-1. 스크립트 만들기
c# 스크립트를 생성하여 메인카메라에 추가 합니다.
버튼을 누르면 카메라가 움직이도록 하기위해 카메라 오브젝트를 가지고 있을 변수 'GameObject goCamera;'를 추가합니다.
/// <summary> /// 움직일 카메라 /// </summary> GameObject goCamera; void Start () { //움직일 카메라를 찾는다. this.goCamera_Minmap = GameObject.Find("Main Minmap"); }
버튼을 누르면 카메라를 움직여줄 함수 'PressKey(int nKey)'를 만듭니다.
public void PressKey(int nKey) { //처음 데이터 받기 Vector3 rectTemp = this.goCamera.transform.localPosition; switch (nKey) { case 1: //left rectTemp.x -= 0.1f; break; case 2: //up rectTemp.y += 0.1f; break; case 3: //right rectTemp.x += 0.1f; break; case 4: //down rectTemp.y -= 0.1f; break; } //완성된 데이터 저장 this.goCamera.transform.localPosition = rectTemp; }
2-2. 스크립트 연결하기
이제는 스크립트 안에서 모든 GUI를 관리하던 방식이 아니기 때문에 작성한 스크립트를 GUI와 연결하는 작업이 필요합니다.
하이어라키에 있는 버튼을 클릭하고 인스팩터의 'Button'에 보면 'On Click ()'이라는 이벤트가 있습니다.
이 이벤트에 '+'를 눌러 구성요소를 추가합니다.
'None'이라고 쓰여있는 곳에 메인카메라를 끌어서 넣고 'No Function'을 눌러보면 카메라에 추가한 'claArrowKeys'클래스가 보입니다.
이 클래스를 선택하면 포함된 멤버들이 표시되는데 아까 우리가 만든 'PressKey(int)'를 선택해 줍니다.
그러면 아래와 같이 'PressKey(int)'에 넘겨줄 파라메타를 써줄 칸이 생깁니다.
여기에 버튼이 눌렸을 때 보낼 값을 넣어 줍니다.
버튼별로 같은 작업을 한 후 아래와 같이 버튼별로 다른 값을 넣어 줍니다.
Left : 1
Up : 2
Right : 3
Down : 4
3. 테스트
이제 완성된 코드를 테스트 해봅시다.
카메라가 움직이는 것이므로 큐브가 반대로 움직이는 것처럼 보입니다.
=======================
=======================
=======================
출처: https://vallista.tistory.com/entry/Unity3D-UGUI-button-cant-touching-UGUI-%EB%B2%84%ED%8A%BC-%ED%84%B0%EC%B9%98%EA%B0%80-%EC%95%88%EB%90%A0-%EB%95%8C
UGUI 버튼 터치가 안될 때 확인을 몇개를 해야 한다.
1. 먼저 Hierarchy에 Event System이 있는지 확인
그 다음 Event System에 아래와 같이 있는지 확인
2. 캔버스 확인
가장 하단의 Graphic Raycaster 있어야 된다.
3. 앞의 Depth에 위치한 카메라에 Boxcollider 있는지 확인.
*더 있으면 덧글에 써주시면 추가하도록 하겠습니다.*
출처: https://vallista.tistory.com/entry/Unity3D-UGUI-button-cant-touching-UGUI-버튼-터치가-안될-때 [VallistA]
=======================
=======================
=======================
출처: https://unitytip.tistory.com/48
안녕하세요.
또 새로운 내용으로 포스팅하겠습니다.
유니티 UI작업을 할 때, 버튼을 만들면 드래그&드랍으로 끌어다가 메소드를 연결시키는데요. 어떻게 보면 유니티를 잘 활용한다고 할 수도 있습니다만, 수가 많아지거나 연결해야 할 메소드가 바뀌어 일일이 연결 작업을 하려면 그게 여간 귀찮은 일이 아닐 수 없습니다. 그래서 스크립트로 연결하는 방법이 없을까 하다가 찾아보니까 있길래 기록하는 마음가짐으로 포스팅을 남깁니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ObjectTest : MonoBehaviour
{
public Button button;
void Start ()
{
button.onClick.AddListener(PrintYes);
}
void PrintYes()
{
print("yes");
}
}
|
cs |
이렇게 onClick.AddListener를 하고 버튼에 연결할 메소드를 붙여주면 에디터에서 일일이 연결해주지 않아도 버튼에 메소드가 연결됩니다. 아주 꿀팁이 아닐 수 없습니다. 오늘은 좀 짧은 내용입니다만 비교적 유용한 내용이 될 것 이라고 생각합니다. 이렇게 한 김에 Button 클래스에 대한 유니티 매뉴얼을 읽고 한번 본격적으로 다뤄보는 시간을 가져보는게 좋을 것 같단 생각이 듭니다. 다음에 할 게 없으면 그렇게 하는 걸로 목표로 하고 하겠습니다.
감사합니다.
출처: https://unitytip.tistory.com/48 [Unity Tip 모음 by dnrkckzk]
=======================
=======================
=======================
출처: http://blog.kpaper.com/2017/02/unity3d-ugui-button.html
Unity3D에서 uGUI Button 을 동적으로 생성할 때, 클릭 이벤트 추가 하는 방법
_spawnedButton.GetComponent<Button>().onClick.AddListener(delegate() { 게임오브젝트.GetComponent<컴포넌트 클래스 이름>().실행할 함수(); });
=======================
=======================
=======================
출차: https://answers.unity.com/questions/938496/buttononclickaddlistener.html
=======================
=======================
=======================
#기타관련링크
- https://twoicefish-secu.tistory.com/10
- https://samablog.tistory.com/120
=======================
=======================
=======================
'게임엔진관련 > 유니티 엔진' 카테고리의 다른 글
[Unity] 유니티에서 싱글톤(Singleton) 사용하기 관련 (0) | 2019.03.12 |
---|---|
[Unity] 유니티 웹뷰 webView 개발 관련 (3) | 2019.03.04 |
[Unity] UGUI 캔버스(canvas) 관하여 관련 (0) | 2019.01.17 |
[Unity] TCP/IP, 소켓통신 와 멀티쓰레드 관련 (0) | 2019.01.17 |
[Unity] 유니티 기초 관련 (0) | 2018.12.03 |