- 준비된 메뉴 에셋을 가져오자
- 이미지 크기를 2의 배수로 가져오면 유니티에서 계산하기 속도가 빠르다
컴퓨터 자체가 2진수를 가지고 있당~
128*128 이런게 좋음
불러온 에셋! 스프라이트를 클릭하고 인스펙터뷰를 봐보자
Texture Type - Sprite로 되어있다!
근데 그냥 이미지를 가져오면 Default로 되어있음
그러면 사용 못함! 스프라이트로 바꿔줘야함
해당 스프라이트를 커서 이미지로 사용하고 싶으면, 텍스쳐 타입을 Cursor로 바꾼 후
Build Settings - Project Settings의 Default Cursor에서 바꾸면 된다!
스프라이트의 텍스쳐 타입을 Cursor로 안 바꾸고, Project Settings에서만 설정하면
빌드 했을 때 커서 이미지가 안 적용되어 있으니 꼭 설정!
Sprite Editor를 봐보자
아래의 표시된 버튼을 누르면 보기가 편하다
연두색 부분은 먼가요?
-> 모양이 찌그러지지 않았으면 하는 부분을 표시함!
빨간색 박스로 표시한 부분 안에만 늘려지거나 줄어들고, 밖에는 그대로 유지된다
수정한 후 Apply 눌러주면 됨
Hierarchy 뷰에서 UI - Image 불러오자
인벤토리를 만들거니까 이미지 이름을 Inventory
근데 사실 인벤토리는 패널로 많이 만드는데, 사실 이미지와 별반 차이 없음
알파값의 차이가 있당
UI를 만들 땐 Canvas Scaler을 제일 먼저 바꿔줘야 함!!!!!!
다른 건 다 그대로 두고 Canvas Scaler - UI Scale Mode - Scale With Screen Size로,
Reference Resolution 을 X 1920, Y 1080으로 바꿔준다
Inventory 이미지의 크기를 조정해주고, Source Image를 설정해주자
그럼 이미지가 적용되고 Image Type을 보면 Sliced로 되어있다!
Sprite Editor에서 초록색 선을 움직였기 때문에 Sliced로 되어있는 것!
Image Type을 Simple로 바꾸면? 초록색 선 상관없이 커진 것!
게임 뷰를 보면 이미지의 차이가 있다~!
Type이 Sliced인지 확인!
이제 Anchors를 보자
Pivot : 회전의 중심
앵커 프리셋을 오른쪽 위로 바꿔보자
앵커와 -960, -540만큼 떨어져있다!
앵커프리셋의 Alt : 기준점에 빠짝 붙어주는 애
정확히 꼭대기에서 어느정도 떨어졌으면 좋겠다 싶으면 shift + alt 같이 눌러줌
앵커와 피봇까지 옮기는 것!!
피봇도 옮겼기 때문에 Pivot은 1, 1로 바뀐다
기준을 오른쪽 위로 맞췄으니,
꼭대기에서 100 떨어져있는 배치를 하고싶다면 그냥 Y값을 -100만 해주면 됨
회전을 하면 피봇 기준으로 되니 Rotation의 Z값을 변경했을 때 이런 모양이 된다
(다시 0으로 되돌려주자)
Inventory 안에 Image 생성하고 이름은 SlotList
앵커프리셋은 Shift + Alt를 눌러서 Top - Center 로 맞춰준다
그리고 크기와 위치를 조정해주자
Source Image도 넣어주자
Inventory - SlotList안에 새 이미지를 만들자
이름은 Slot
SlotList에서 Add Component - Layout - Grid Layout Group 을 추가해주자
추가하면 위치가 자동으로 맞춰진다!
Grid Layout Group에 Cell size, Spacing이 있어서 여기서 자식으로 넣어져 있는 오브젝트들의 크기를 조정한다!
그래서 그 안에 있는 이미지들은 이미지 위치 크기 조정이 안됨
Slot을 들어갔떠니 위치와 크기가 비활성화 되어 있다!
SlotList의 Grid Layout Group값을 조정해주자
Padding을 열어서 상하좌우 값을 조정해줄 수 있음
근데 이렇게 간격을 하나하나 지정해주는 것 말고,
Child Alignment를 조절하면 편하다
Middle Center로 해보자
중앙!
슬롯이 적었을 땐 이렇게 된다
맴대로 잘 조정해보자
ItemList를 만들자!
SlotList를 복제해서 ItemList로 이름을 바꿔주고, Slot은 하나만 남겨주고 이름은 Item으로 바꿔준다
위치를 조정해주고
Item 안에 Image 추가해주자
그리고 이미지 소스 추가 및 크기를 조정해주고, 복제해서 총 3개로 만들어주었다
아이템은 스크롤을 둬서 수평으로 쭉 얻을 수 있게 할거다
기존 그리드 레이아웃 그룹을 삭제하고
Horizontal Layout Group 컴포넌트로 추가해주자
짜잔
조정해주었다!
근데 모양이 별루네용..
체크한 걸 다 빼주자
그럼 크기 조정은 할 수 있음!
크기 변경~~
Spacing을 안줬었군
짜잔
이제 스크립트를 작성해보자
ItemList 에서 SlotList로 끌어다가 장착할 수 있게 할거임!
Drag.cs 생성해서 Item 오브젝트들에 할당
어떤 기능이 필요한가요?
- 플레이를 한번 눌러보자
아이템들이 그리드로 묶여있는 상태라 플레이를 해도 움직이지 않는다!
-> 아이템을 움직이는 기능을 만들자 - 아이템을 클릭 드래그 하면 움직여야 함!
-> 이 클릭 드래그는 '마우스'로 움직임 - 클릭해서 뭔가 반응이 있어야한다면 Button 컴포넌트를 넣으면 된다
근데 마우스 클릭이면? -> Event Trigger 컴포넌트가 있으면 됨!!
'Drag' 라는 이벤트가 발생하면 이런 메서드를 실행해주세요 하는 게 이벤트 트리거
(Trigger라는 건 어떤 사건이 나면 자동 실행됨)
Event Trigger 컴포넌트를 추가해서 Add New Event Type을 눌러보면 다양한 이벤트가 뜬다
우린 이걸 스크립트로 작성할거임!
Drag.cs를 작성해보자!!
UI에 관련된 이벤트를 불러오자
using UnityEngine.EventSystems;
그리고 IDragHandler를 상속받게 하자
I로 시작하는 건 Interface!
public class Drag : MonoBehaviour, IDragHandler
이벤트 트리거처럼 외부에서 호출하는 것이기 때문에 public를 붙인 void OnDrag를 작성해줌
확인을 위해 우선 콘솔창에 뜨게만 해보자
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag : MonoBehaviour, IDragHandler
{
Transform itemTr; // 아이템의 transform 변수 선언
void Start()
{
itemTr = GetComponent<Transform>();
}
// UI 관련이기 때문에 Update()는 필요 없다
public void OnDrag(PointerEventData eventData)
{
print("OnDrag");
}
}
드래그를 하면 콘솔창에 뜬다!
이게 Event Trigger 컴포넌트를 쓴 것처럼 드래그할 때마다 호출이 된다
인식이 잘 되니까 드래그 했을 때 위치를 바꾸도록 해보자!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag : MonoBehaviour, IDragHandler
{
Transform itemTr; // 아이템의 transform 변수 선언
void Start()
{
itemTr = GetComponent<Transform>();
}
// UI 관련이기 때문에 Update()는 필요 없다
// 외부에서 호출 되어야하기 때문에 public 선언
public void OnDrag(PointerEventData eventData)
{
// print("OnDrag");
itemTr.position = Input.mousePosition; // 아이템의 위치가 마우스의 위치를 따라 감
}
}
와 드래그 하니 움직인다~
이제 막 드래그만 됐을 뿐임
해야할 것
1. 아이템이 하나 빠지면 뒤에 있는 아이템들은 정렬 되어야 한다
2. 아이템은 슬롯 정중앙에 위치하여야 한다
아이템 리스트 안에 아이템이 자식으로 있고, 이게 레이아웃 그룹으로 묶여있기 때문에
내가 마우스로 드래그한들 부모자식 관계가 바뀌지 않음!
-> 마우스로 드래그 했을 때 아이템이 부모 밖으로 나가야 함!
SerializeField : public 대신에 씀. public은 너무 공용이니까,,
다른 스크립트에서 이 변수에 접근을 못해 안정적임
인스펙터뷰에선 보인다
[SerializeField] Transform iventoryTr; // 인벤토리
근데 여기선 SerializeField 안 쓸거임!!!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag : MonoBehaviour, IDragHandler
{
Transform inventoryTr; // 인벤토리
Transform itemTr; // 아이템의 transform 변수 선언
void Start()
{
itemTr = GetComponent<Transform>();
var inventory = GameObject.Find("Inventory"); // var 임시 변수
//inventoryTr = inventory.GetComponent<Transform>();
inventoryTr = inventory.transform; // GetComponent로 가져와도 되고 이렇게도 써도 된다
}
// UI 관련이기 때문에 Update()는 필요 없다
// 외부에서 호출 되어야하기 때문에 public 선언
public void OnDrag(PointerEventData eventData)
{
// print("OnDrag");
itemTr.position = Input.mousePosition; // 아이템의 위치가 마우스의 위치를 따라 감
}
}
IBeginDragHandler, IEndDragHandler 를 추가해주자
public class Drag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
인터페이스에 맞는 메서드를 해출해주자
// 드래그를 시작했을 때 호출하는 메서드
public void OnBeginDrag(PointerEventData eventData)
{
}
// 드래그가 끝났을 때 호출하는 메서드
public void OnEndDrag(PointerEventData eventData)
{
}
우선 드래그를 시작했을 때부터 할 기능부터 작성해주자
부모를 바꿈!
// 드래그를 시작했을 때 호출하는 메서드
public void OnBeginDrag(PointerEventData eventData)
{
// 분가시켜주자
// parent(프로퍼티) 또는 SetParent(메서드)를 써도 됨
itemTr.parent = inventoryTr; // inventoryTr가 itemTr의 부모
}
드래그를 시작하면 해당 Item 부모가 Inventory로 바뀐다!
이제 클릭 드래그 했을 때,
슬롯 리스트인 검정색의 주변에 놓기만 해도 검정 네모 안에 딱 자리 잡으면 좋겠다!
뭘 드래그 했는지 모르니까 변수를 만들어주자
누구를 지금 드래그 하는지??
draggingItem!
그리고 다른 곳에서도 쓸 수 있게 static으로 작성
static: 전용 공간. 클래스 멤버를 만들고 다이렉트로 접근 가능
OnBiginDrag 메서드에서 draggingItem을 할당해주자
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
public static GameObject draggingItem = null; // 드래그하는 아이템
// static! 전용 공간! 클래스 멤버를 만들고 다이렉트로 접근 가능
Transform inventoryTr; // 인벤토리
Transform itemTr; // 아이템의 transform 변수 선언
void Start()
{
...
}
...
// 드래그를 시작했을 때 호출하는 메서드
public void OnBeginDrag(PointerEventData eventData)
{
// 분가시켜주자
// parent(프로퍼티) 또는 SetParent(메서드)를 써도 됨
itemTr.parent = inventoryTr; // inventoryTr가 itemTr의 부모
draggingItem = gameObject; // 이 스크립트를 가지고 있는 나 자신을 draggingItem에 넣어줌
Debug.Log(draggingItem.name);
}
// 드래그가 끝났을 때 호출하는 메서드
public void OnEndDrag(PointerEventData eventData)
{
}
}
플레이 해보니 잘 나옴
OnEndDrag에선 드래그가 끝났으니 draggingItem을 null로 만들어주면 된다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
public static GameObject draggingItem = null; // 드래그하는 아이템
// static! 전용 공간! 클래스 멤버를 만들고 다이렉트로 접근 가능
Transform inventoryTr; // 인벤토리
Transform itemTr; // 아이템의 transform 변수 선언
void Start()
{
itemTr = GetComponent<Transform>();
var inventory = GameObject.Find("Inventory"); // var 임시 변수
//inventoryTr = inventory.GetComponent<Transform>();
inventoryTr = inventory.transform; // GetComponent로 가져와도 되고 이렇게도 써도 된다
}
// UI 관련이기 때문에 Update()는 필요 없다
// 외부에서 호출 되어야하기 때문에 public 선언
// 드래그 중일 때 호출하는 메서드
public void OnDrag(PointerEventData eventData)
{
// print("OnDrag");
itemTr.position = Input.mousePosition; // 아이템의 위치가 마우스의 위치를 따라 감
}
// 드래그를 시작했을 때 호출하는 메서드
public void OnBeginDrag(PointerEventData eventData)
{
// 분가 시켜주자
// parent(프로퍼티) 또는 SetParent(메서드)를 써도 됨
itemTr.parent = inventoryTr; // inventoryTr가 itemTr의 부모
draggingItem = gameObject; // 이 스크립트를 가지고 있는 나 자신을 draggingItem에 넣어줌
//Debug.Log(draggingItem.name);
}
// 드래그가 끝났을 때 호출하는 메서드
public void OnEndDrag(PointerEventData eventData)
{
draggingItem = null; // 드래그가 끝났기 때문에 draggingItem를 null로 만들어 줌
}
}
이제 드래그가 끝나고 드롭했을 때!
스크립트를 만들어 주자
Drop.cs 생성 후 Slot 오브젝트에 할당!
우선 슬롯들을 하나빼고 다 지워주자
그리고 Grid Layout Group을 추가해주자!
Cell size 수정하고,
한 가운데에 예쁘게 있어야하니까 Child Alignment 를 Middle Center로 바꿔줌
Drop.cs 작성
IDropHandler를 상속받도록 하고, OnDrop을 작성해주자
우선 드롭이 잘 됐는지 확인하자
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drop : MonoBehaviour, IDropHandler
{
public void OnDrop(PointerEventData eventData)
{
Debug.Log("OnDrop");
}
}
근데 Drop해도 콘솔에 안뜬ㄷ ㅏㅠ
왜냐하면!!!
드래그한 Item 이미지에 막혀있기 때문!!!
Image를 보면 Raycast Target이 있다! Raycast. 레이를 다 감지함
근데 Item이 위에 있어서 드롭이 감지 안됨~!
Slot 프리팹으로 만들자
그리고 슬롯 복제!
이미지라면 있는 Image - Raycast Target을 체크 해제 하면 뒤에 있는 레이도 감지 가능!
스크립트로 껐다켰다하면 되겠쬬?
근데 이 방법 말고 다른 방법을 써보자
Item들에 Canvas Group 컴포넌트 추가
Alpha값을 0으로 두면 존재하나 보이지 않는다
(우린 이거 손 안댐! 다시 1로)
Blocks Raycasts를 체크해제하면 드래그 되지 않는다!!
이걸 스크립트로 딸깍딸깍 해보자
=>
부모 자식 관계이고,
화면에 잠시 안나왔으면 좋겠다 잠시 숨으면 좋겠다 -> Alpha값 조절
레이에 반응하지 않았으면 좋겠다 -> Blocks Raycasts 체크 해제
Drag.cs 로 가자
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
...
CanvasGroup itemCG; // 아이템의 CanvasGroup
void Start()
{
itemTr = GetComponent<Transform>();
itemCG = GetComponent<CanvasGroup>();
...
}
...
// 드래그를 시작했을 때 호출하는 메서드
public void OnBeginDrag(PointerEventData eventData)
{
// 분가 시켜주자
// parent(프로퍼티) 또는 SetParent(메서드)를 써도 됨
//itemTr.parent = inventoryTr; // inventoryTr가 itemTr의 부모
itemTr.SetParent(inventoryTr);
draggingItem = gameObject; // 이 스크립트를 가지고 있는 나 자신을 draggingItem에 넣어줌
//Debug.Log(draggingItem.name);
itemCG.blocksRaycasts = false;
}
// 드래그가 끝났을 때 호출하는 메서드
public void OnEndDrag(PointerEventData eventData)
{
draggingItem = null; // 드래그가 끝났기 때문에 draggingItem를 null로 만들어 줌
itemCG.blocksRaycasts = true;
}
}
(그리고 계속 뜨던 애 수정해주었음)
public void OnBeginDrag(PointerEventData eventData)
{
// 분가 시켜주자
// parent(프로퍼티) 또는 SetParent(메서드)를 써도 됨
//itemTr.parent = inventoryTr; // inventoryTr가 itemTr의 부모
itemTr.SetParent(inventoryTr);
...
}
OnDrop이 호출된다~!~!!!!!
이제 그럼 이쁘게 배치가 되도록 해보자
+ 그리고 한 곳에 다 배치되는 건 불가능! 방이 비어있어야만 된다
Drop.cs ㄱㄱ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drop : MonoBehaviour, IDropHandler
{
public void OnDrop(PointerEventData eventData)
{
if (transform.childCount == 0) // 자식이 없다면
{
// 지금 드래그하고 있는 아이템인 draggingItem이 이 스크립트를 가지고 있는 오브젝트 자식으로 들어감
Drag.draggingItem.transform.SetParent(this.transform);
}
}
}
- GetComponet<>(); 는 자원을 많이 잡아먹음
그래서 update 이런 곳엔 안 쓰는 게 좋다 - . 을 찍었을 때 나오는 건 static으로 된 것만 나오는 것
- 지금 끌고 있는 아이템인 draggingItem이 drop을 가지고 있는 오브젝트의 자식으로 들어간다!
아이템을 slot 위에서 drop 했을 때, 자식으로 들어가고 예쁘게 정중앙으로 맞춰진다!
근데 아이템을 허공에 둔다면?
어디에도 속하지 않고 허공에 둥실,,,~
수정해보자!
그리고 아이템을 뺐을 때 다시 ItemList로 들어가도록 해주자
이건 손을 떼었을 때임. 마우스의 드래그가 끝났을 때!
-> Drag.cs의 OnEndDrag 메서드를 보자
아이템이 허공에 있다는 건,
드래그가 끝났는데 SlotList의 자식이 아니고 Inventory의 자식으로 있는 것임
-> 다시 ItemList의 자식으로 넣어주면 됨
// 드래그가 끝났을 때 호출하는 메서드
public void OnEndDrag(PointerEventData eventData)
{
draggingItem = null; // 드래그가 끝났기 때문에 draggingItem를 null로 만들어 줌
itemCG.blocksRaycasts = true;
// 아이템의 부모를 비교
// 아이템이 허공에 있다면 부모가 Inventory임
if (itemTr.parent == inventoryTr)
{
itemTr.SetParent(itemListTr);
}
}
허공으로 나왔을 때 인벤토리의 자식
드래그가 끝나면?
와아앙 다시 들어간다~
히히히!!
원래 아이템들은 자신의 정보를 가지고 있어야 함
이 아이템이 있으니 공격력이 올라간다든가 하는~!
함 구현해보자!
ItemInfo.cs 생성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 사용자 정의 자료형
[System.Serializable] // 직렬화
public class Item
{
public enum ItemType { SP, MP, HP }
public ItemType type;
public string name;
public int value;
}
public class ItemInfo : MonoBehaviour
{
public Item itemData;
}
- ItemInfo는 MonoBehaviour 를 상속 받음으로써 new 가 필요하지 않으며, 컴포넌트의 역할을 할 수 있음
(원래 모든 컴포넌트는 new를 써야 새로운 존재를 생성할 수 있음) - Item은 public만으로 인스펙터에 노출되지 않아서 [System.Serializable]를 붙어서 직렬화를 시켜 줌
- enum 타입으로 아이템 타입을 만들어 줌!
- enum이어야 스위치문 쓸 때 편리하게 사용 가능!
- KeyCode 가 enum타입이다
- KeyCode에 . 을 눌러주면 대문자로 적혀있는 걸 볼 수 있음
enum은 대부분 대문자로 적어줌
- KeyCode에 . 을 눌러주면 대문자로 적혀있는 걸 볼 수 있음
- Item 처럼 쓰는 경우엔 스크립트 자체를 따로 만들어서 할 때가 많다
ItemList - Item들에게 ItemInfo.cs를 할당
ItemData를 입력해주면 된다
(근데 이렇게 하나하나 입력하다보면 나중에 변동사항이 있을 수 있고... 번거롭다 허허 오늘은 이렇게!)
GameManager.cs 생성
GameManager 빈 오브젝트 만들어서 위치 초기화 하고 GameManager.cs 생성
Edit - Preferences - Scene View에 보면 Create Objects at Origin이 있다
이거를 체크하면 새로운 오브젝트를 만들었을 때 (0,0,0)이 됨!!!!
마저 작성해보자
GameManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager instance;
// 싱글톤
void Awake()
{
if (instance == null) instance = this;
}
public void AddItem(Item item)
{
switch (item.type)
{
case Item.ItemType.SP:
Debug.Log("공격력 증가 +" + item.value);
break;
case Item.ItemType.MP:
Debug.Log("방어력 증가 +" + item.value);
break;
case Item.ItemType.HP:
Debug.Log("체력 증가 +" + item.value);
break;
default:
break;
}
}
public void RemoveItem(Item item)
{
switch (item.type)
{
case Item.ItemType.SP:
Debug.Log("공격력 감소 -" + item.value);
break;
case Item.ItemType.MP:
Debug.Log("방어력 감소 -" + item.value);
break;
case Item.ItemType.HP:
Debug.Log("체력 감소 -" + item.value);
break;
default:
break;
}
}
}
=>
아이템을 슬롯에 집어넣으면 AddItem을,
아이템을 다시 아이템 리스트로 가져오게 되면 RemoveItem을 호출하면 된다
그리고 Item 정보를 매개변수로 전달해야 한다
이 Item 정보는 ItemInfo에서 가지고 있다
Drop.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drop : MonoBehaviour, IDropHandler
{
public void OnDrop(PointerEventData eventData)
{
if (transform.childCount == 0) // 자식이 없다면
{
// 지금 드래그하고 있는 아이템인 draggingItem이 이 스크립트를 가지고 있는 오브젝트 자식으로 들어감
Drag.draggingItem.transform.SetParent(this.transform);
// draggingItem에 있는 ItemInfo의 itemData을 가져와 item에 할당해줌
Item item = Drag.draggingItem.GetComponent<ItemInfo>().itemData;
GameManager.instance.AddItem(item);
}
}
}
Drag.cs
Drop.cs에서 적은 걸 그대로 복사해오는데,
Drag.cs에서의 OnEndDrag는 드래그 하는 게 아니기 때문에 draggingItem = null이 되어있음!
그래서 이 스크립트를 가지고 있는 자기자신의 컴포넌트에서 ItemInfo를 찾아서 itemData를 할당해주면 됨
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
...
// 드래그가 끝났을 때 호출하는 메서드
public void OnEndDrag(PointerEventData eventData)
{
draggingItem = null; // 드래그가 끝났기 때문에 draggingItem를 null로 만들어 줌
itemCG.blocksRaycasts = true;
// 아이템의 부모를 비교
// 아이템이 허공에 있다면 부모가 Inventory임
if (itemTr.parent == inventoryTr)
{
itemTr.SetParent(itemListTr);
Item item = GetComponent<ItemInfo>().itemData;
GameManager.instance.RemoveItem(item);
}
}
}
와아앙 됐당
+)
머 이런 것도 있음
IPointerEnterHandler!
포인터를 갖다대면 감지하는 애도 있음 히히
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Drop : MonoBehaviour, IDropHandler, IPointerEnterHandler
{
public void OnDrop(PointerEventData eventData)
{
if (transform.childCount == 0) // 자식이 없다면
{
// 지금 드래그하고 있는 아이템인 draggingItem이 이 스크립트를 가지고 있는 오브젝트 자식으로 들어감
Drag.draggingItem.transform.SetParent(this.transform);
// draggingItem에 있는 ItemInfo의 itemData을 가져와 item에 할당해줌
Item item = Drag.draggingItem.GetComponent<ItemInfo>().itemData;
GameManager.instance.AddItem(item);
}
}
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("OnPointerEnter");
}
}
'Hello, World! > Unity' 카테고리의 다른 글
유니티 UI - 상점 만들자, Save/Load 기능 (0) | 2022.06.17 |
---|---|
좀비 서바이벌 게임 멀티플레이 하자(3) (0) | 2022.06.09 |
좀비 서바이벌 게임 멀티플레이 하자(2) (0) | 2022.06.08 |
좀비 서바이벌 게임 멀티플레이 하자(1) (0) | 2022.06.07 |
유니티에서 코딩 없이 AR 개발해보자 (0) | 2022.06.07 |
댓글