1. Copyright ⓒ 2015 Unity Technologies Korea All rights reserved. All contents cannot be copied without permission
실전비법 개정판
본 교재의 저작권은 유니티테크놀로지스코리아가 소유하고 있으며,
유니티 러닝센터 수강생만 교재를 볼 수 있습니다. 정당한 권리 없이 저작물을 복제, 전송할 경우
그로 인하여 발생하는 손해를 배상하여야 함을 유념하시기 바랍니다.
2. 본 자료는 유니티 러닝센터 수강생을 위한 수업 교재로, 저작권은 유니티테크놀로지스코리아가 소유하고 있습니다.
DataSource: ScriptableObject의 배열
LINQ
LINQ의 사용
o필터링
Where
o정렬
OrderBy, OrderByDescending
ThenBy, ThenByDescending
3. 본 자료는 유니티 러닝센터 수강생을 위한 수업 교재로, 저작권은 유니티테크놀로지스코리아가 소유하고 있습니다.
weaponD
ata
armorData
skillData
ItemFactory
LINQ
Scrollview
Items
LINQ
4. 본 자료는 유니티 러닝센터 수강생을 위한 수업 교재로, 저작권은 유니티테크놀로지스코리아가 소유하고 있습니다.
ItemData 클래스 - 베이스 클래스
weaponData - 무기 타입의 아이템
armorData - 방어구 타입의 아이템
skillData - 기술 타입의 아이템
각 아이템 데이터들은 ScriptableObject 형태로 로컬 파일에 저장
실행시 serialization을 통해 메모리에 객체 배열로 생성
LINQ - ItemData 클래스
5. 본 자료는 유니티 러닝센터 수강생을 위한 수업 교재로, 저작권은 유니티테크놀로지스코리아가 소유하고 있습니다.
LINQ - Inventory 클래스
int[] items = {
1000, 1001, 1002, 1003, 2002, 2003,
2004, 2005, 2006, 2007, 2008, 2009,
2010, 2011, 2012, 2013, 2014, 2015,
2016, 2017, 2018, 4014, 4015, 4016,
4017, 4018, 4019, 4020, 4021, 4022,
4023, 4024, 4025, 4026, 4027, 4028, 4029,
4030, 4031, 4032, 4033, 4034, 4035, 4036
};
인벤토리 아이템: 정수형, 아이템 테이블의 ID 값을 저장
6. 본 자료는 유니티 러닝센터 수강생을 위한 수업 교재로, 저작권은 유니티테크놀로지스코리아가 소유하고 있습니다.
LINQ - InventoryFactory 클래스
인벤토리의 아이템들에 해당하는 아이템들의 리스트를 얻어 오기 위해
사용하는 클래스
ScritableObject의 배열에서 원하는 아이템들을 포함하는 리스트를
아이템 ID를 사용해서 얻어 온다.
7. 본 자료는 유니티 러닝센터 수강생을 위한 수업 교재로, 저작권은 유니티테크놀로지스코리아가 소유하고 있습니다.
LINQ - InventoryFactory 클래스
public List<ItemData> GetItems(int[] ids)
{
if (ids == null || ids.Length <= 0)
return null;
List<ItemData> items = new List<ItemData>();
var weaponIDs = ids.Where(x => x >= 1000 && x < 2000).ToList();
var armorIDs = ids.Where(x => x >= 2000 && x < 3000).ToList();
var skillIDs = ids.Where(x => x >= 4000 && x < 5000).ToList();
아이템 ID로 타입에 따른 필터링
8. 본 자료는 유니티 러닝센터 수강생을 위한 수업 교재로, 저작권은 유니티테크놀로지스코리아가 소유하고 있습니다.
LINQ - InventoryFactory 클래스
var weaponResult = from w in weapons.dataArray
from n in weaponIDs
where w.ID == n
select w;
List<weaponData> wList = weaponResult.ToList();
foreach (weaponData w in wList)
{
items.Add(w);
}
전체 무기 테이블에서 인벤토리에 저장된 아이템ID의 데이터만 필터링
9. 본 자료는 유니티 러닝센터 수강생을 위한 수업 교재로, 저작권은 유니티테크놀로지스코리아가 소유하고 있습니다.
LINQ - InventoryFactory 클래스
var weaponResult = from w in weapons.dataArray
from n in weaponIDs
where w.ID == n
orderby w.Price descending
select w;
List<weaponData> wList = weaponResult.ToList();
foreach (weaponData w in wList)
{
items.Add(w);
}
만약 정렬이 필요하다면?
10. 본 자료는 유니티 러닝센터 수강생을 위한 수업 교재로, 저작권은 유니티테크놀로지스코리아가 소유하고 있습니다.
LINQ - UIInventory 클래스
itemList.Clear();
List<ItemData> items = ItemFactory.Instance.GetItems(inventory.GetWeapons());
foreach (ItemData i in items)
{
ItemInfo item = new ItemInfo();
item.sprName = (i as weaponData).Icon;
itemList.Add(item);
}
리스트뷰 설정 및 리스트뷰 아이템 생성