_spawnedButton.GetComponent<Button>().onClick.AddListener(delegate() { 게임오브젝트.GetComponent<컴포넌트 클래스 이름>().실행할 함수(); });
=======================
=======================
=======================
=======================
=======================
=======================
출처: 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가 자식으로 추가된다.
Animation(애니메이션 교체)
동작은 플레이를 한 후에 키보드 이동키를 눌러보면 된다.
빈 오브젝트를 하나 만들자.
F2를 눌러서, 이름을 ButtonHandler로 바꾸자.
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 작성하기
방향키를 'GUI'로 만들고 방향키를 누르면 카메라가 이동하도록 만들 것입니다.
테스트를 위해 프로젝트를 생성하고 3D 큐브를 하나 추가 합니다.
테스트용이니 적당한 이미지를 큐브에 적용합니다.
이제 'GameObject'메뉴에 'UI'카테고리가 생겼습니다!!!!
UI > Button
을 눌러 GUI 버튼을 추가 합니다.
이제 트랜스폼툴에 새로 추가된 'UI 툴'을 눌러 UI 편집을 활성화 시킵니다.
게임창을 확인하면 버튼이 추가 된것을 알 수 있습니다.
위와 같은 방법으로 4개의 버튼을 만듭니다.
하이어라키에 보면 'Canvas>Button'이 추가 된 것을 볼 수 있습니다.
이곳에 'Button'을 확장해보면 'Text'가 포함되어 있음을 볼 수 있습니다.
이 'Text'를 수정하면 버튼에 표시되는 텍스트를 꾸밀 수 있습니다.
우리는 방향키에 맞게 각각의 버튼의 텍스트를 수정 합시다.
모양도 이쁘게 배치해 봅시다.
이제 스크립트를 만들어 버튼과 카메라를 연결해 봅시다.
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; }
이제는 스크립트 안에서 모든 GUI를 관리하던 방식이 아니기 때문에 작성한 스크립트를 GUI와 연결하는 작업이 필요합니다.
하이어라키에 있는 버튼을 클릭하고 인스팩터의 'Button'에 보면 'On Click ()'이라는 이벤트가 있습니다.
이 이벤트에 '+'를 눌러 구성요소를 추가합니다.
'None'이라고 쓰여있는 곳에 메인카메라를 끌어서 넣고 'No Function'을 눌러보면 카메라에 추가한 'claArrowKeys'클래스가 보입니다.
이 클래스를 선택하면 포함된 멤버들이 표시되는데 아까 우리가 만든 'PressKey(int)'를 선택해 줍니다.
그러면 아래와 같이 'PressKey(int)'에 넘겨줄 파라메타를 써줄 칸이 생깁니다.
여기에 버튼이 눌렸을 때 보낼 값을 넣어 줍니다.
버튼별로 같은 작업을 한 후 아래와 같이 버튼별로 다른 값을 넣어 줍니다.
Left : 1
Up : 2
Right : 3
Down : 4
이제 완성된 코드를 테스트 해봅시다.
카메라가 움직이는 것이므로 큐브가 반대로 움직이는 것처럼 보입니다.
=======================
=======================
=======================
출처: 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
_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 |