fack
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cc5f7586b864d8246b39029b1ad3a7bf
|
||||
guid: a83379c03137d8d4e890f489fca45c68
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 79e445c288ce5c4058473c9b9e1ce739
|
||||
guid: bcd8fd1e026760643ad63865e3584c81
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
31
Assets/Inventory/Items/NewItem.asset
Normal file
31
Assets/Inventory/Items/NewItem.asset
Normal file
@@ -0,0 +1,31 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5741b63764436354ebad192c9b71f06c, type: 3}
|
||||
m_Name: NewItem
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ItemData
|
||||
id: 2
|
||||
itemName: NewItem
|
||||
description: 23
|
||||
type: 5
|
||||
modelPrefab: {fileID: 282714382156279063, guid: 4fcbba5b8725e254f98c052c4db89e02, type: 3}
|
||||
icon: {fileID: 21300000, guid: 0115b2d990086ae4cbc31baf7c64e680, type: 3}
|
||||
maxStack: 64
|
||||
isCraftable: 0
|
||||
craftingRecipe:
|
||||
ingredients: []
|
||||
amounts:
|
||||
resultId:
|
||||
resultAmount: 1
|
||||
weight: 1
|
||||
value: 1
|
||||
isDroppable: 1
|
||||
isStackable: 1
|
||||
8
Assets/Inventory/Items/NewItem.asset.meta
Normal file
8
Assets/Inventory/Items/NewItem.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e9765c2fbc4980049940f96e9b0f70dc
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
31
Assets/Inventory/Items/test.asset
Normal file
31
Assets/Inventory/Items/test.asset
Normal file
@@ -0,0 +1,31 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5741b63764436354ebad192c9b71f06c, type: 3}
|
||||
m_Name: test
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ItemData
|
||||
id: 1
|
||||
itemName: test
|
||||
description: 123
|
||||
type: 0
|
||||
modelPrefab: {fileID: 282714382156279063, guid: 4fcbba5b8725e254f98c052c4db89e02, type: 3}
|
||||
icon: {fileID: 21300000, guid: 0115b2d990086ae4cbc31baf7c64e680, type: 3}
|
||||
maxStack: 64
|
||||
isCraftable: 0
|
||||
craftingRecipe:
|
||||
ingredients: []
|
||||
amounts:
|
||||
resultId:
|
||||
resultAmount: 1
|
||||
weight: 1
|
||||
value: 1
|
||||
isDroppable: 1
|
||||
isStackable: 1
|
||||
8
Assets/Inventory/Items/test.asset.meta
Normal file
8
Assets/Inventory/Items/test.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 91470f1965cf83a4a8c49831ec2f7691
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7e500dd197b0a563ba03994985add81f
|
||||
guid: 34a15c970bb1a4442922409d4041278a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
123
Assets/Inventory/Prefabs/GameManager.prefab
Normal file
123
Assets/Inventory/Prefabs/GameManager.prefab
Normal file
@@ -0,0 +1,123 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3743145363054835461
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6461243735758044243}
|
||||
- component: {fileID: 7806798928968015955}
|
||||
- component: {fileID: 917247343393088441}
|
||||
- component: {fileID: 904704503021327689}
|
||||
m_Layer: 0
|
||||
m_Name: GameManager
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6461243735758044243
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3743145363054835461}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 3.58223, y: 0, z: -0.03737}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &7806798928968015955
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3743145363054835461}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a4c4603259067dc4e96f741653843b92, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::InventoryManager
|
||||
inventorySize: 36
|
||||
slots:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
inventoryPanel: {fileID: 0}
|
||||
hotbarSlots:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
itemDatabase: []
|
||||
--- !u!114 &917247343393088441
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3743145363054835461}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ad1628cce096628409729c00123006be, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::InventoryExampleItems
|
||||
items: []
|
||||
--- !u!114 &904704503021327689
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3743145363054835461}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 0}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::InventoryTester
|
||||
7
Assets/Inventory/Prefabs/GameManager.prefab.meta
Normal file
7
Assets/Inventory/Prefabs/GameManager.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 60b4e69fb88096c41b79991b55ae2e08
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
15549
Assets/Inventory/Prefabs/InventoryCanvas.prefab
Normal file
15549
Assets/Inventory/Prefabs/InventoryCanvas.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Inventory/Prefabs/InventoryCanvas.prefab.meta
Normal file
7
Assets/Inventory/Prefabs/InventoryCanvas.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 145dcfd5eb113214580f79ea514da475
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
344
Assets/Inventory/Prefabs/InventorySlot_0.prefab
Normal file
344
Assets/Inventory/Prefabs/InventorySlot_0.prefab
Normal file
@@ -0,0 +1,344 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1088936209855662566
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7496016030181336795}
|
||||
- component: {fileID: 5732183762162151468}
|
||||
- component: {fileID: 3688350745810595510}
|
||||
m_Layer: 0
|
||||
m_Name: Text
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7496016030181336795
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1088936209855662566}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 9168090920327097179}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 20}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5732183762162151468
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1088936209855662566}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3688350745810595510
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1088936209855662566}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Text
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_FontData:
|
||||
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_FontSize: 14
|
||||
m_FontStyle: 0
|
||||
m_BestFit: 0
|
||||
m_MinSize: 10
|
||||
m_MaxSize: 40
|
||||
m_Alignment: 5
|
||||
m_AlignByGeometry: 0
|
||||
m_RichText: 1
|
||||
m_HorizontalOverflow: 0
|
||||
m_VerticalOverflow: 0
|
||||
m_LineSpacing: 1
|
||||
m_Text:
|
||||
--- !u!1 &1912723805268667563
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 9168090920327097179}
|
||||
- component: {fileID: 5638168838715636855}
|
||||
- component: {fileID: 2025189271983313986}
|
||||
m_Layer: 0
|
||||
m_Name: AmountPanel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!224 &9168090920327097179
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1912723805268667563}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7496016030181336795}
|
||||
m_Father: {fileID: 1340148140657551652}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 1, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: -2, y: 2}
|
||||
m_SizeDelta: {x: 20, y: 20}
|
||||
m_Pivot: {x: 1, y: 0}
|
||||
--- !u!222 &5638168838715636855
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1912723805268667563}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &2025189271983313986
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1912723805268667563}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0.7}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &6380808876699298028
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2917712365648044858}
|
||||
- component: {fileID: 2771215458839960748}
|
||||
- component: {fileID: 4241945068260094018}
|
||||
m_Layer: 0
|
||||
m_Name: Icon
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2917712365648044858
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6380808876699298028}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1340148140657551652}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -8, y: -8}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2771215458839960748
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6380808876699298028}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4241945068260094018
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6380808876699298028}
|
||||
m_Enabled: 0
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 1
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &7013501782383369993
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1340148140657551652}
|
||||
- component: {fileID: 7560570831503175390}
|
||||
- component: {fileID: 5576232148191920921}
|
||||
- component: {fileID: 3940389249836863728}
|
||||
- component: {fileID: 1332562190786703389}
|
||||
m_Layer: 0
|
||||
m_Name: InventorySlot_0
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1340148140657551652
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7013501782383369993}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 2917712365648044858}
|
||||
- {fileID: 9168090920327097179}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 48, y: 48}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7560570831503175390
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7013501782383369993}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5576232148191920921
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7013501782383369993}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.3, g: 0.3, b: 0.3, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &3940389249836863728
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7013501782383369993}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 700406249e03c6646b1d535e57851f30, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Slot
|
||||
slotIndex: 0
|
||||
item: {fileID: 0}
|
||||
amount: 0
|
||||
iconImage: {fileID: 4241945068260094018}
|
||||
amountText: {fileID: 3688350745810595510}
|
||||
amountPanel: {fileID: 1912723805268667563}
|
||||
--- !u!114 &1332562190786703389
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7013501782383369993}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d3bc6c48bea19c74ea4d056cb2471292, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::InventoryDragDrop
|
||||
slot: {fileID: 3940389249836863728}
|
||||
slotIndex: 0
|
||||
dragIcon: {fileID: 0}
|
||||
7
Assets/Inventory/Prefabs/InventorySlot_0.prefab.meta
Normal file
7
Assets/Inventory/Prefabs/InventorySlot_0.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 65ace2893bd6464429e57fc6aa3fd5aa
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
85
Assets/Inventory/Prefabs/InventorySystem.prefab
Normal file
85
Assets/Inventory/Prefabs/InventorySystem.prefab
Normal file
@@ -0,0 +1,85 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &5975229894509830887
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8079351441219661693}
|
||||
- component: {fileID: 7859836927392210389}
|
||||
- component: {fileID: 6727284413363374745}
|
||||
- component: {fileID: 8280792819179678159}
|
||||
m_Layer: 0
|
||||
m_Name: InventorySystem
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8079351441219661693
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5975229894509830887}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &7859836927392210389
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5975229894509830887}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a4c4603259067dc4e96f741653843b92, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::InventoryManager
|
||||
inventorySize: 36
|
||||
slots: []
|
||||
inventoryPanel: {fileID: 0}
|
||||
hotbarSlots: []
|
||||
itemDatabase: []
|
||||
--- !u!114 &6727284413363374745
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5975229894509830887}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9296b7da4cf11cf41909512f177d7434, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::InventoryUIBuilder
|
||||
hotbarSlots: 9
|
||||
inventoryRows: 4
|
||||
inventoryCols: 9
|
||||
slotPrefab: {fileID: 0}
|
||||
defaultIcon: {fileID: 0}
|
||||
inventoryPanelRect: {fileID: 0}
|
||||
hotbarPanelRect: {fileID: 0}
|
||||
--- !u!114 &8280792819179678159
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5975229894509830887}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ad1628cce096628409729c00123006be, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::InventoryExampleItems
|
||||
items: []
|
||||
7
Assets/Inventory/Prefabs/InventorySystem.prefab.meta
Normal file
7
Assets/Inventory/Prefabs/InventorySystem.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5a88abbbbfdc34245b485cde6fca3c76
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
0
Assets/Inventory/Prefabs/test.prefab
Normal file
0
Assets/Inventory/Prefabs/test.prefab
Normal file
7
Assets/Inventory/Prefabs/test.prefab.meta
Normal file
7
Assets/Inventory/Prefabs/test.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 223ec2dc359ac0845957ab0b29284414
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Inventory/Scripts.meta
Normal file
8
Assets/Inventory/Scripts.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5a7e9019099bb1b488b28e0c0132c939
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
202
Assets/Inventory/Scripts/CraftingManager.cs
Normal file
202
Assets/Inventory/Scripts/CraftingManager.cs
Normal file
@@ -0,0 +1,202 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class CraftingManager : MonoBehaviour
|
||||
{
|
||||
public static CraftingManager Instance;
|
||||
|
||||
[Header("UI References")]
|
||||
public GameObject craftingPanel;
|
||||
public Slot[] inputSlots; // 9 слотов для входа (как в крафтинге)
|
||||
public Slot outputSlot; // 1 слот для результата
|
||||
public Text recipeNameText;
|
||||
public Button craftButton;
|
||||
|
||||
[Header("Recipe Database")]
|
||||
public List<CraftingRecipe> recipes;
|
||||
|
||||
private Dictionary<string, CraftingRecipe> _recipeDict;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (Instance == null)
|
||||
Instance = this;
|
||||
else
|
||||
Destroy(gameObject);
|
||||
|
||||
_recipeDict = new Dictionary<string, CraftingRecipe>();
|
||||
foreach (var recipe in recipes)
|
||||
{
|
||||
string key = GetRecipeKey(recipe);
|
||||
_recipeDict[key] = recipe;
|
||||
}
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
if (craftingPanel != null)
|
||||
craftingPanel.SetActive(false);
|
||||
|
||||
if (craftButton != null)
|
||||
craftButton.onClick.AddListener(Craft);
|
||||
}
|
||||
|
||||
public void ToggleCrafting()
|
||||
{
|
||||
if (craftingPanel != null)
|
||||
{
|
||||
craftingPanel.SetActive(!craftingPanel.activeSelf);
|
||||
if (craftingPanel.activeSelf)
|
||||
CheckRecipe();
|
||||
}
|
||||
}
|
||||
|
||||
// Собираем ключ из текущих ингредиентов в слотах
|
||||
string GetCurrentIngredientsKey()
|
||||
{
|
||||
var ingredients = new List<string>();
|
||||
foreach (var slot in inputSlots)
|
||||
{
|
||||
if (!slot.IsEmpty)
|
||||
{
|
||||
ingredients.Add(slot.item.id);
|
||||
}
|
||||
}
|
||||
ingredients.Sort();
|
||||
return string.Join(",", ingredients);
|
||||
}
|
||||
|
||||
// Проверяем рецепт
|
||||
public void CheckRecipe()
|
||||
{
|
||||
string key = GetCurrentIngredientsKey();
|
||||
|
||||
if (_recipeDict.TryGetValue(key, out CraftingRecipe recipe))
|
||||
{
|
||||
// Проверяем хватает ли количества
|
||||
bool canCraft = true;
|
||||
int slotIndex = 0;
|
||||
|
||||
foreach (var ingredientId in recipe.ingredients)
|
||||
{
|
||||
int required = recipe.amounts[System.Array.IndexOf(recipe.ingredients, ingredientId)];
|
||||
int have = 0;
|
||||
|
||||
for (int i = 0; i < inputSlots.Length; i++)
|
||||
{
|
||||
if (!inputSlots[i].IsEmpty && inputSlots[i].item.id == ingredientId)
|
||||
{
|
||||
have += inputSlots[i].amount;
|
||||
}
|
||||
}
|
||||
|
||||
if (have < required)
|
||||
{
|
||||
canCraft = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (canCraft)
|
||||
{
|
||||
// Показываем результат
|
||||
if (InventoryManager.Instance.itemDatabase.Find(x => x.id == recipe.resultId) is ItemData resultItem)
|
||||
{
|
||||
outputSlot.SetItem(resultItem, recipe.resultAmount);
|
||||
if (recipeNameText != null)
|
||||
recipeNameText.text = resultItem.itemName;
|
||||
|
||||
if (craftButton != null)
|
||||
craftButton.interactable = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
outputSlot.Clear();
|
||||
if (recipeNameText != null)
|
||||
recipeNameText.text = "Unknown recipe";
|
||||
if (craftButton != null)
|
||||
craftButton.interactable = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
outputSlot.Clear();
|
||||
if (recipeNameText != null)
|
||||
recipeNameText.text = "";
|
||||
if (craftButton != null)
|
||||
craftButton.interactable = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Выполнить крафтинг
|
||||
public void Craft()
|
||||
{
|
||||
string key = GetCurrentIngredientsKey();
|
||||
|
||||
if (_recipeDict.TryGetValue(key, out CraftingRecipe recipe))
|
||||
{
|
||||
// Удаляем ингредиенты
|
||||
foreach (var ingredientId in recipe.ingredients)
|
||||
{
|
||||
int required = recipe.amounts[System.Array.IndexOf(recipe.ingredients, ingredientId)];
|
||||
InventoryManager.Instance.RemoveItem(ingredientId, required);
|
||||
}
|
||||
|
||||
// Добавляем результат
|
||||
int remaining = InventoryManager.Instance.AddItem(recipe.resultId, recipe.resultAmount);
|
||||
if (remaining > 0)
|
||||
{
|
||||
Debug.LogWarning($"Inventory full! Couldn't add {remaining} items.");
|
||||
}
|
||||
|
||||
// Очищаем слоты ввода
|
||||
foreach (var slot in inputSlots)
|
||||
{
|
||||
slot.Clear();
|
||||
}
|
||||
|
||||
// Пересматриваем рецепт
|
||||
CheckRecipe();
|
||||
|
||||
// Обновляем инвентарь
|
||||
foreach (var slot in InventoryManager.Instance.slots)
|
||||
{
|
||||
slot.UpdateSlotUI();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Добавить рецепт
|
||||
public void AddRecipe(string resultId, int resultAmount, string[] ingredients, int[] amounts)
|
||||
{
|
||||
var recipe = new CraftingRecipe
|
||||
{
|
||||
resultId = resultId,
|
||||
resultAmount = resultAmount,
|
||||
ingredients = ingredients,
|
||||
amounts = amounts
|
||||
};
|
||||
|
||||
recipes.Add(recipe);
|
||||
string key = GetRecipeKey(recipe);
|
||||
_recipeDict[key] = recipe;
|
||||
}
|
||||
|
||||
string GetRecipeKey(CraftingRecipe recipe)
|
||||
{
|
||||
var sorted = new List<string>(recipe.ingredients);
|
||||
sorted.Sort();
|
||||
return string.Join(",", sorted);
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class CraftingRecipe
|
||||
{
|
||||
public string resultId;
|
||||
public int resultAmount = 1;
|
||||
public string[] ingredients;
|
||||
public int[] amounts;
|
||||
}
|
||||
}
|
||||
2
Assets/Inventory/Scripts/CraftingManager.cs.meta
Normal file
2
Assets/Inventory/Scripts/CraftingManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c3c944af921361347b5bcb564f23e76d
|
||||
236
Assets/Inventory/Scripts/InventoryDragDrop.cs
Normal file
236
Assets/Inventory/Scripts/InventoryDragDrop.cs
Normal file
@@ -0,0 +1,236 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
/// <summary>
|
||||
/// Обработка Drag & Drop предметов между слотами и выброс за пределы инвентаря
|
||||
/// </summary>
|
||||
public class InventoryDragDrop : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler, IPointerExitHandler
|
||||
{
|
||||
public Slot slot;
|
||||
public int slotIndex;
|
||||
|
||||
[Header("Drag Visual")]
|
||||
[SerializeField] private RectTransform dragIcon;
|
||||
[SerializeField] private Image dragImage;
|
||||
[SerializeField] private float dragIconScale = 1.2f;
|
||||
|
||||
[Header("Drop Settings")]
|
||||
[SerializeField] private bool allowDropOutside = true;
|
||||
[SerializeField] private float dropThreshold = 100f; // пикселей за пределами инвентаря
|
||||
|
||||
private Canvas _canvas;
|
||||
private CanvasGroup _canvasGroup;
|
||||
private bool _isDragging;
|
||||
private Vector2 _dragStartPosition;
|
||||
private RectTransform _inventoryPanelRect;
|
||||
|
||||
void Start()
|
||||
{
|
||||
_canvas = GetComponentInParent<Canvas>();
|
||||
_canvasGroup = GetComponent<CanvasGroup>();
|
||||
|
||||
if (dragIcon == null)
|
||||
{
|
||||
CreateDragIcon();
|
||||
}
|
||||
|
||||
// Находим панель инвентаря
|
||||
var inventoryManager = FindObjectOfType<InventoryManager>();
|
||||
if (inventoryManager?.inventoryPanel != null)
|
||||
{
|
||||
_inventoryPanelRect = inventoryManager.inventoryPanel.GetComponent<RectTransform>();
|
||||
}
|
||||
|
||||
if (dragIcon != null)
|
||||
dragIcon.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
private void CreateDragIcon()
|
||||
{
|
||||
GameObject canvasGO = new GameObject("DragIconCanvas");
|
||||
canvasGO.transform.SetParent(_canvas != null ? _canvas.transform : transform.root);
|
||||
|
||||
var dragCanvas = canvasGO.AddComponent<Canvas>();
|
||||
dragCanvas.overrideSorting = true;
|
||||
dragCanvas.sortingOrder = 1000;
|
||||
dragCanvas.renderMode = RenderMode.ScreenSpaceOverlay;
|
||||
canvasGO.AddComponent<GraphicRaycaster>();
|
||||
|
||||
dragIcon = new GameObject("DragIcon").AddComponent<RectTransform>();
|
||||
dragIcon.SetParent(canvasGO.transform, false);
|
||||
dragIcon.sizeDelta = new Vector2(48, 48);
|
||||
|
||||
dragImage = dragIcon.gameObject.AddComponent<Image>();
|
||||
dragImage.raycastTarget = false;
|
||||
|
||||
dragIcon.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public void OnBeginDrag(PointerEventData eventData)
|
||||
{
|
||||
if (slot == null || slot.IsEmpty) return;
|
||||
|
||||
_isDragging = true;
|
||||
_dragStartPosition = eventData.position;
|
||||
|
||||
if (_canvasGroup != null)
|
||||
_canvasGroup.blocksRaycasts = false;
|
||||
|
||||
if (dragIcon != null && slot.item?.icon != null)
|
||||
{
|
||||
dragIcon.gameObject.SetActive(true);
|
||||
dragImage.sprite = slot.item.icon;
|
||||
dragIcon.localScale = Vector3.one * dragIconScale;
|
||||
dragIcon.position = eventData.position;
|
||||
}
|
||||
|
||||
var bg = GetComponent<Image>();
|
||||
if (bg != null)
|
||||
bg.color = new Color(1f, 1f, 1f, 0.5f);
|
||||
}
|
||||
|
||||
public void OnDrag(PointerEventData eventData)
|
||||
{
|
||||
if (!_isDragging || dragIcon == null) return;
|
||||
dragIcon.position = eventData.position;
|
||||
}
|
||||
|
||||
public void OnEndDrag(PointerEventData eventData)
|
||||
{
|
||||
if (!_isDragging) return;
|
||||
|
||||
_isDragging = false;
|
||||
|
||||
if (dragIcon != null)
|
||||
{
|
||||
dragIcon.gameObject.SetActive(false);
|
||||
dragIcon.localScale = Vector3.one;
|
||||
}
|
||||
|
||||
if (_canvasGroup != null)
|
||||
_canvasGroup.blocksRaycasts = true;
|
||||
|
||||
var bg = GetComponent<Image>();
|
||||
if (bg != null)
|
||||
bg.color = slot.IsEmpty ? new Color(0.25f, 0.25f, 0.25f, 0.8f) : new Color(0.35f, 0.35f, 0.35f, 0.95f);
|
||||
|
||||
// Проверяем - выбросили за пределы инвентаря?
|
||||
if (allowDropOutside && IsOutsideInventory(eventData.position))
|
||||
{
|
||||
DropItemOutside();
|
||||
return;
|
||||
}
|
||||
|
||||
// Иначе - пробуем переместить в другой слот
|
||||
var raycastResults = new System.Collections.Generic.List<RaycastResult>();
|
||||
EventSystem.current.RaycastAll(eventData, raycastResults);
|
||||
|
||||
Slot targetSlot = null;
|
||||
|
||||
foreach (var result in raycastResults)
|
||||
{
|
||||
var slotComponent = result.gameObject.GetComponent<Slot>();
|
||||
if (slotComponent != null && slotComponent != slot)
|
||||
{
|
||||
targetSlot = slotComponent;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (targetSlot != null && InventoryManager.Instance != null)
|
||||
{
|
||||
InventoryManager.Instance.SwapSlots(slotIndex, targetSlot.slotIndex);
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsOutsideInventory(Vector2 screenPosition)
|
||||
{
|
||||
if (_inventoryPanelRect == null) return false;
|
||||
|
||||
// Получаем границы панели инвентаря в экранных координатах
|
||||
Vector3[] corners = new Vector3[4];
|
||||
_inventoryPanelRect.GetWorldCorners(corners);
|
||||
|
||||
// rect панели в экранных координатах
|
||||
float minX = corners[0].x;
|
||||
float maxX = corners[2].x;
|
||||
float minY = corners[0].y;
|
||||
float maxY = corners[2].y;
|
||||
|
||||
// Добавляем отступ
|
||||
float threshold = dropThreshold;
|
||||
|
||||
// Проверяем находится ли курсор за пределами панели + threshold
|
||||
bool outside = screenPosition.x < minX - threshold ||
|
||||
screenPosition.x > maxX + threshold ||
|
||||
screenPosition.y < minY - threshold ||
|
||||
screenPosition.y > maxY + threshold;
|
||||
|
||||
return outside;
|
||||
}
|
||||
|
||||
private void DropItemOutside()
|
||||
{
|
||||
if (slot == null || slot.IsEmpty) return;
|
||||
|
||||
var item = slot.item;
|
||||
int amount = slot.amount;
|
||||
|
||||
// Определяем позицию выброса
|
||||
Vector3 dropPos = Vector3.zero;
|
||||
if (Camera.main != null)
|
||||
{
|
||||
// Выбрасываем перед игроком
|
||||
dropPos = Camera.main.transform.position + Camera.main.transform.forward * 2f;
|
||||
}
|
||||
|
||||
// Создаём предмет в мире
|
||||
if (InventoryItemFactory.Instance != null)
|
||||
{
|
||||
InventoryItemFactory.Instance.DropItem(item, amount, dropPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback - просто создаём объект
|
||||
var go = new GameObject($"Dropped_{item.itemName}");
|
||||
go.transform.position = dropPos;
|
||||
|
||||
var visual = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||||
visual.transform.SetParent(go.transform);
|
||||
visual.transform.localPosition = Vector3.zero;
|
||||
visual.transform.localScale = Vector3.one * 0.3f;
|
||||
DestroyImmediate(visual.GetComponent<Collider>());
|
||||
|
||||
var worldItem = go.AddComponent<WorldItem>();
|
||||
worldItem.Setup(item, amount);
|
||||
}
|
||||
|
||||
// Очищаем слот
|
||||
slot.Clear();
|
||||
|
||||
Debug.Log($"[DragDrop] Выброшен: {item.itemName} x{amount}");
|
||||
}
|
||||
|
||||
public void OnPointerEnter(PointerEventData eventData)
|
||||
{
|
||||
if (!_isDragging && slot != null && !slot.IsEmpty)
|
||||
{
|
||||
var bg = GetComponent<Image>();
|
||||
if (bg != null)
|
||||
bg.color = new Color(0.5f, 0.5f, 0.5f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPointerExit(PointerEventData eventData)
|
||||
{
|
||||
if (!_isDragging && slot != null)
|
||||
{
|
||||
var bg = GetComponent<Image>();
|
||||
if (bg != null)
|
||||
bg.color = slot.IsEmpty ?
|
||||
new Color(0.25f, 0.25f, 0.25f, 0.8f) :
|
||||
new Color(0.35f, 0.35f, 0.35f, 0.95f);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Inventory/Scripts/InventoryDragDrop.cs.meta
Normal file
2
Assets/Inventory/Scripts/InventoryDragDrop.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d3bc6c48bea19c74ea4d056cb2471292
|
||||
66
Assets/Inventory/Scripts/InventoryEvents.cs
Normal file
66
Assets/Inventory/Scripts/InventoryEvents.cs
Normal file
@@ -0,0 +1,66 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
/// <summary>
|
||||
/// События инвентаря - используй UnityEvent для подписки из любого скрипта
|
||||
/// </summary>
|
||||
public class InventoryEvents : MonoBehaviour
|
||||
{
|
||||
public static InventoryEvents Instance { get; private set; }
|
||||
|
||||
[Header("Item Events")]
|
||||
/// <param name="itemId">ID предмета</param>
|
||||
/// <param name="amount">Количество</param>
|
||||
public UnityEvent<string, int> OnItemAdded;
|
||||
|
||||
/// <param name="itemId">ID предмета</param>
|
||||
/// <param name="amount">Количество</param>
|
||||
public UnityEvent<string, int> OnItemRemoved;
|
||||
|
||||
/// <param name="itemId">ID предмета</param>
|
||||
/// <param name="amount">Новое количество</param>
|
||||
public UnityEvent<string, int> OnItemCountChanged;
|
||||
|
||||
[Header("Slot Events")]
|
||||
/// <param name="slotIndex">Индекс слота</param>
|
||||
/// <param name="itemId">ID предмета (null если пусто)</param>
|
||||
public UnityEvent<int, string> OnSlotChanged;
|
||||
|
||||
[Header("Inventory State")]
|
||||
public UnityEvent OnInventoryOpened;
|
||||
public UnityEvent OnInventoryClosed;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (Instance == null)
|
||||
{
|
||||
Instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
// Удобные методы для вызова событий
|
||||
public void InvokeItemAdded(string itemId, int amount)
|
||||
{
|
||||
OnItemAdded?.Invoke(itemId, amount);
|
||||
}
|
||||
|
||||
public void InvokeItemRemoved(string itemId, int amount)
|
||||
{
|
||||
OnItemRemoved?.Invoke(itemId, amount);
|
||||
}
|
||||
|
||||
public void InvokeItemCountChanged(string itemId, int newAmount)
|
||||
{
|
||||
OnItemCountChanged?.Invoke(itemId, newAmount);
|
||||
}
|
||||
|
||||
public void InvokeSlotChanged(int slotIndex, string itemId)
|
||||
{
|
||||
OnSlotChanged?.Invoke(slotIndex, itemId);
|
||||
}
|
||||
}
|
||||
2
Assets/Inventory/Scripts/InventoryEvents.cs.meta
Normal file
2
Assets/Inventory/Scripts/InventoryEvents.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 92259c03301739842b087d3e9d9b0c5f
|
||||
113
Assets/Inventory/Scripts/InventoryExampleItems.cs
Normal file
113
Assets/Inventory/Scripts/InventoryExampleItems.cs
Normal file
@@ -0,0 +1,113 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
/// <summary>
|
||||
/// Пример конфигурации предметов
|
||||
/// </summary>
|
||||
public class InventoryExampleItems : MonoBehaviour
|
||||
{
|
||||
[Header("Item Database")]
|
||||
public List<ItemData> items;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
// Создаём примеры предметов если база пустая
|
||||
if (items == null || items.Count == 0)
|
||||
{
|
||||
items = CreateExampleItems();
|
||||
}
|
||||
|
||||
// Передаём в InventoryManager
|
||||
var im = FindObjectOfType<InventoryManager>();
|
||||
if (im != null)
|
||||
{
|
||||
im.itemDatabase = items;
|
||||
im.RebuildItemDictionary();
|
||||
|
||||
// Сразу добавляем тестовые предметы
|
||||
im.AddItem("stone", 32);
|
||||
im.AddItem("dirt", 16);
|
||||
im.AddItem("wood", 8);
|
||||
im.AddItem("apple", 5);
|
||||
im.AddItem("sword", 1);
|
||||
im.AddItem("pickaxe", 1);
|
||||
|
||||
Debug.Log("[InventoryExampleItems] Added test items");
|
||||
}
|
||||
}
|
||||
|
||||
List<ItemData> CreateExampleItems()
|
||||
{
|
||||
return new List<ItemData>
|
||||
{
|
||||
CreateItem("stone", "Камень", "Обычный камень", ItemType.Block, 64),
|
||||
CreateItem("dirt", "Земля", "Блок земли", ItemType.Block, 64),
|
||||
CreateItem("wood", "Дерево", "Деревянный блок", ItemType.Block, 64),
|
||||
CreateItem("plank", "Доски", "Деревянные доски", ItemType.Block, 64),
|
||||
CreateItem("sword", "Меч", "Острый меч", ItemType.Weapon, 1),
|
||||
CreateItem("apple", "Яблоко", "Вкусное яблоко", ItemType.Consumable, 16),
|
||||
CreateItem("pickaxe", "Кирка", "Инструмент для добычи", ItemType.Tool, 1),
|
||||
};
|
||||
}
|
||||
|
||||
ItemData CreateItem(string id, string name, string desc, ItemType type, int stack)
|
||||
{
|
||||
var item = ScriptableObject.CreateInstance<ItemData>();
|
||||
item.id = id;
|
||||
item.itemName = name;
|
||||
item.description = desc;
|
||||
item.type = type;
|
||||
item.maxStack = stack;
|
||||
item.icon = CreatePlaceholderIcon(name);
|
||||
return item;
|
||||
}
|
||||
|
||||
Sprite CreatePlaceholderIcon(string text)
|
||||
{
|
||||
// Создаём текстуру с текстом
|
||||
var tex = new Texture2D(64, 64);
|
||||
var colors = new Color[64 * 64];
|
||||
|
||||
// Заливаем цветом (серый фон)
|
||||
for (int i = 0; i < colors.Length; i++)
|
||||
{
|
||||
colors[i] = new Color(0.5f, 0.5f, 0.5f, 1f);
|
||||
}
|
||||
|
||||
tex.SetPixels(colors);
|
||||
tex.Apply();
|
||||
|
||||
// Создаём спрайт
|
||||
return Sprite.Create(tex, new Rect(0, 0, 64, 64), new Vector2(0.5f, 0.5f));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавляет предметы в инвентарь при старте (для тестирования)
|
||||
/// </summary>
|
||||
public class InventoryTester : MonoBehaviour
|
||||
{
|
||||
void Start()
|
||||
{
|
||||
// Ждём кадр чтобы InventoryManager точно инициализировался
|
||||
StartCoroutine(AddTestItems());
|
||||
}
|
||||
|
||||
System.Collections.IEnumerator AddTestItems()
|
||||
{
|
||||
yield return null; // ждём один кадр
|
||||
|
||||
// Добавляем тестовые предметы
|
||||
var im = InventoryManager.Instance;
|
||||
if (im != null && im.GetItemCount("stone") == 0) // только если пусто
|
||||
{
|
||||
Debug.Log("[InventoryTester] Adding test items...");
|
||||
im.AddItem("stone", 32);
|
||||
im.AddItem("dirt", 16);
|
||||
im.AddItem("wood", 8);
|
||||
im.AddItem("apple", 5);
|
||||
im.AddItem("sword", 1);
|
||||
im.AddItem("pickaxe", 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Inventory/Scripts/InventoryExampleItems.cs.meta
Normal file
2
Assets/Inventory/Scripts/InventoryExampleItems.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ad1628cce096628409729c00123006be
|
||||
271
Assets/Inventory/Scripts/InventoryItemFactory.cs
Normal file
271
Assets/Inventory/Scripts/InventoryItemFactory.cs
Normal file
@@ -0,0 +1,271 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Конфигурация для фабрики предметов - создать в Assets > Create > Inventory > Item Factory Config
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "ItemFactoryConfig", menuName = "Inventory/Item Factory Config")]
|
||||
public class ItemFactoryConfig : ScriptableObject
|
||||
{
|
||||
[Header("World Item Prefabs")]
|
||||
public GameObject worldItemPrefab; // Префаб предмета в мире
|
||||
|
||||
[Header("Spawner Prefab")]
|
||||
public GameObject itemSpawnerPrefab; // Префаб спавнера
|
||||
|
||||
[Header("Pickup Settings")]
|
||||
public float pickupRadius = 1.5f;
|
||||
public float despawnTime = 300f; // 5 минут
|
||||
|
||||
[Header("Drop Settings")]
|
||||
public float dropForce = 2f;
|
||||
public float dropRandomness = 0.5f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Фабрика для создания префабов предметов - заменяет прямой Instantiate и Resources.Load
|
||||
/// </summary>
|
||||
public class InventoryItemFactory : MonoBehaviour
|
||||
{
|
||||
public static InventoryItemFactory Instance { get; private set; }
|
||||
|
||||
[Header("Configuration")]
|
||||
[Tooltip("Создать в Assets > Create > Inventory > Item Factory Config")]
|
||||
public ItemFactoryConfig config;
|
||||
|
||||
[Header("Debug")]
|
||||
public bool logSpawns = false;
|
||||
|
||||
// Кэшированные ссылки для быстрого доступа
|
||||
private Dictionary<string, GameObject> _prefabCache = new Dictionary<string, GameObject>();
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (Instance == null)
|
||||
{
|
||||
Instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создать предмет в мире (WorldItem)
|
||||
/// </summary>
|
||||
/// <param name="itemData">Данные предмета</param>
|
||||
/// <param name="amount">Количество</param>
|
||||
/// <param name="position">Позиция спавна</param>
|
||||
/// <param name="rotation"> rotation ( Quaternion.identity по умолчанию)</param>
|
||||
public WorldItem CreateWorldItem(ItemData itemData, int amount, Vector3 position, Quaternion rotation = default)
|
||||
{
|
||||
GameObject go;
|
||||
|
||||
if (config == null || config.worldItemPrefab == null)
|
||||
{
|
||||
// Fallback - создаём без префаба
|
||||
go = new GameObject($"WorldItem_{itemData.itemName}");
|
||||
go.transform.position = position;
|
||||
go.transform.rotation = rotation;
|
||||
|
||||
// Добавляем компоненты для физики
|
||||
var collider = go.AddComponent<SphereCollider>();
|
||||
collider.radius = 0.3f;
|
||||
collider.isTrigger = true;
|
||||
var rb = go.AddComponent<Rigidbody>();
|
||||
rb.isKinematic = true;
|
||||
rb.useGravity = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
go = Instantiate(config.worldItemPrefab, position, rotation);
|
||||
}
|
||||
var worldItem = go.GetComponent<WorldItem>();
|
||||
|
||||
if (worldItem == null)
|
||||
worldItem = go.AddComponent<WorldItem>();
|
||||
|
||||
worldItem.Setup(itemData, amount);
|
||||
|
||||
if (logSpawns)
|
||||
Debug.Log($"[Factory] Created WorldItem: {itemData.itemName} x{amount} at {position}");
|
||||
|
||||
return worldItem;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создать предмет в мире с настраиваемым временем жизни
|
||||
/// </summary>
|
||||
public WorldItem CreateWorldItem(ItemData itemData, int amount, Vector3 position, float lifetime, Quaternion rotation = default)
|
||||
{
|
||||
var worldItem = CreateWorldItem(itemData, amount, position, rotation);
|
||||
if (worldItem != null && lifetime > 0)
|
||||
{
|
||||
Destroy(worldItem.gameObject, lifetime);
|
||||
}
|
||||
return worldItem;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создать спавнер предмета (точка появления)
|
||||
/// </summary>
|
||||
public ItemSpawner CreateItemSpawner(ItemData itemData, int amount, Vector3 position)
|
||||
{
|
||||
if (config == null || config.itemSpawnerPrefab == null)
|
||||
{
|
||||
// Создаём базовый спавнер без префаба
|
||||
return CreateSpawnerFallback(itemData, amount, position);
|
||||
}
|
||||
|
||||
var go = Instantiate(config.itemSpawnerPrefab, position, Quaternion.identity);
|
||||
var spawner = go.GetComponent<ItemSpawner>();
|
||||
|
||||
if (spawner == null)
|
||||
spawner = go.AddComponent<ItemSpawner>();
|
||||
|
||||
spawner.Setup(itemData, amount, config.despawnTime);
|
||||
|
||||
if (logSpawns)
|
||||
Debug.Log($"[Factory] Created Spawner: {itemData.itemName} x{amount}");
|
||||
|
||||
return spawner;
|
||||
}
|
||||
|
||||
private ItemSpawner CreateSpawnerFallback(ItemData itemData, int amount, Vector3 position)
|
||||
{
|
||||
var go = new GameObject($"Spawner_{itemData.itemName}");
|
||||
go.transform.position = position;
|
||||
var spawner = go.AddComponent<ItemSpawner>();
|
||||
spawner.Setup(itemData, amount, config != null ? config.despawnTime : 300f);
|
||||
return spawner;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Выбросить предмет из инвентаря (drop)
|
||||
/// </summary>
|
||||
public WorldItem DropItem(ItemData itemData, int amount, Vector3 dropPosition, Vector3? velocity = null)
|
||||
{
|
||||
// Добавляем небольшое случайное смещение
|
||||
Vector3 offset = Vector3.zero;
|
||||
if (config != null)
|
||||
{
|
||||
offset = new Vector3(
|
||||
Random.Range(-config.dropRandomness, config.dropRandomness),
|
||||
0.5f,
|
||||
Random.Range(-config.dropRandomness, config.dropRandomness)
|
||||
);
|
||||
}
|
||||
|
||||
Vector3 spawnPos = dropPosition + offset;
|
||||
Quaternion rotation = Quaternion.Euler(
|
||||
Random.Range(0, 360),
|
||||
Random.Range(0, 360),
|
||||
Random.Range(0, 360)
|
||||
);
|
||||
|
||||
var worldItem = CreateWorldItem(itemData, amount, spawnPos, rotation);
|
||||
|
||||
// Добавляем начальную скорость (для выброса из инвентаря)
|
||||
if (velocity.HasValue && worldItem != null)
|
||||
{
|
||||
var rb = worldItem.GetComponent<Rigidbody>();
|
||||
if (rb == null)
|
||||
rb = worldItem.gameObject.AddComponent<Rigidbody>();
|
||||
|
||||
rb.linearVelocity = velocity.Value + (Vector3.up * (config?.dropForce ?? 2f));
|
||||
}
|
||||
|
||||
return worldItem;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Предмет подбирается игроком - вызывается из WorldItem
|
||||
/// </summary>
|
||||
public bool PickupItem(WorldItem worldItem, MonoBehaviour picker)
|
||||
{
|
||||
if (worldItem == null || worldItem.itemData == null)
|
||||
return false;
|
||||
|
||||
int remaining = InventoryManager.Instance.AddItem(worldItem.itemData, worldItem.amount);
|
||||
|
||||
if (remaining <= 0)
|
||||
{
|
||||
if (logSpawns)
|
||||
Debug.Log($"[Factory] Picked up: {worldItem.itemData.itemName} x{worldItem.amount}");
|
||||
Destroy(worldItem.gameObject);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Частичный подбор
|
||||
worldItem.amount = remaining;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создать префаб из GameObject в рантайме (динамические предметы)
|
||||
/// </summary>
|
||||
public GameObject CreateItemModel(GameObject modelPrefab, Transform parent)
|
||||
{
|
||||
if (modelPrefab == null)
|
||||
return null;
|
||||
|
||||
return Instantiate(modelPrefab, parent);
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
/// <summary>
|
||||
/// Кастомный редактор для быстрой настройки фабрики
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(InventoryItemFactory))]
|
||||
public class InventoryItemFactoryEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
base.OnInspectorGUI();
|
||||
|
||||
var factory = (InventoryItemFactory)target;
|
||||
|
||||
GUILayout.Space(10);
|
||||
|
||||
if (factory.config == null)
|
||||
{
|
||||
EditorGUILayout.HelpBox(
|
||||
"Создайте ItemFactoryConfig: Assets > Create > Inventory > Item Factory Config",
|
||||
MessageType.Warning);
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Создать ItemFactoryConfig"))
|
||||
{
|
||||
var config = ScriptableObject.CreateInstance<ItemFactoryConfig>();
|
||||
AssetDatabase.CreateAsset(config, "Assets/Inventory/Configs/ItemFactoryConfig.asset");
|
||||
AssetDatabase.SaveAssets();
|
||||
factory.config = config;
|
||||
Debug.Log("Создан ItemFactoryConfig");
|
||||
}
|
||||
|
||||
GUILayout.Space(5);
|
||||
|
||||
if (GUILayout.Button("Создать тестовый предмет в сцене"))
|
||||
{
|
||||
if (InventoryManager.Instance?.itemDatabase?.Count > 0)
|
||||
{
|
||||
var item = InventoryManager.Instance.itemDatabase[0];
|
||||
factory.CreateWorldItem(item, 5, Vector3.zero + Vector3.forward * 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("Сначала добавьте предметы в InventoryManager");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
2
Assets/Inventory/Scripts/InventoryItemFactory.cs.meta
Normal file
2
Assets/Inventory/Scripts/InventoryItemFactory.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2e734a4abaff54d45b8294cb6e023bea
|
||||
601
Assets/Inventory/Scripts/InventoryManager.cs
Normal file
601
Assets/Inventory/Scripts/InventoryManager.cs
Normal file
@@ -0,0 +1,601 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.Events;
|
||||
|
||||
public class InventoryManager : MonoBehaviour
|
||||
{
|
||||
public static InventoryManager Instance { get; private set; }
|
||||
|
||||
[Header("Inventory Settings")]
|
||||
public int inventorySize = 36;
|
||||
public Slot[] slots;
|
||||
public Slot[] hotbarSlots; // 9 слотов хотбара (индексы 0-8)
|
||||
|
||||
[Header("Item Database")]
|
||||
public List<ItemData> itemDatabase;
|
||||
|
||||
[Header("References")]
|
||||
public GameObject inventoryPanel;
|
||||
public Canvas inventoryCanvas;
|
||||
|
||||
[Header("Events")]
|
||||
/// <param name="itemId">ID предмета</param>
|
||||
/// <param name="amount">Количество</param>
|
||||
public UnityEvent<string, int> OnItemAdded;
|
||||
public UnityEvent<string, int> OnItemRemoved;
|
||||
|
||||
// Приватные поля
|
||||
private Dictionary<string, ItemData> _itemDict;
|
||||
private int _selectedHotbarSlot = 0;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
// Сделать этот объект корневым для DontDestroyOnLoad
|
||||
transform.SetParent(null);
|
||||
|
||||
if (Instance == null)
|
||||
{
|
||||
Instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
|
||||
// Создаём InventoryItemFactory если его нет
|
||||
if (InventoryItemFactory.Instance == null)
|
||||
{
|
||||
var factoryGO = new GameObject("InventoryItemFactory");
|
||||
factoryGO.AddComponent<InventoryItemFactory>();
|
||||
DontDestroyOnLoad(factoryGO);
|
||||
}
|
||||
|
||||
// Словарь создаём лениво
|
||||
RebuildItemDictionary();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пересоздать словарь предметов из itemDatabase
|
||||
/// </summary>
|
||||
public void RebuildItemDictionary()
|
||||
{
|
||||
_itemDict = new Dictionary<string, ItemData>();
|
||||
if (itemDatabase != null)
|
||||
{
|
||||
foreach (var item in itemDatabase)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(item?.id))
|
||||
{
|
||||
_itemDict[item.id] = item;
|
||||
}
|
||||
}
|
||||
}
|
||||
Debug.Log($"[InventoryManager] Loaded {_itemDict.Count} items into dictionary");
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
// Инициализация слотов
|
||||
if (slots == null || slots.Length == 0)
|
||||
{
|
||||
Debug.LogWarning("Slots not assigned! Assign them in Inspector or use InventoryUIBuilder.");
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
slot?.UpdateSlotUI();
|
||||
}
|
||||
}
|
||||
|
||||
if (hotbarSlots != null)
|
||||
{
|
||||
foreach (var slot in hotbarSlots)
|
||||
{
|
||||
slot?.UpdateSlotUI();
|
||||
}
|
||||
}
|
||||
|
||||
// Скрыть инвентарь по умолчанию
|
||||
if (inventoryPanel != null)
|
||||
inventoryPanel.SetActive(false);
|
||||
|
||||
// Убедимся что события существуют
|
||||
if (InventoryEvents.Instance == null)
|
||||
{
|
||||
var eventsGO = new GameObject("InventoryEvents");
|
||||
eventsGO.AddComponent<InventoryEvents>();
|
||||
}
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
// Toggle инвентаря на Tab
|
||||
if (Input.GetKeyDown(KeyCode.Tab))
|
||||
{
|
||||
ToggleInventory();
|
||||
}
|
||||
|
||||
// Закрыть на Escape
|
||||
if (Input.GetKeyDown(KeyCode.Escape) && inventoryPanel != null && inventoryPanel.activeSelf)
|
||||
{
|
||||
ToggleInventory();
|
||||
}
|
||||
|
||||
// Горячие клавиши 1-9 для хотбара
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.Alpha1 + i))
|
||||
{
|
||||
SelectHotbarSlot(i);
|
||||
}
|
||||
}
|
||||
|
||||
// Выброс предмета на Q
|
||||
if (Input.GetKeyDown(KeyCode.Q))
|
||||
{
|
||||
DropSelectedItem();
|
||||
}
|
||||
}
|
||||
|
||||
public void ToggleInventory()
|
||||
{
|
||||
if (inventoryPanel != null)
|
||||
{
|
||||
bool wasActive = inventoryPanel.activeSelf;
|
||||
inventoryPanel.SetActive(!wasActive);
|
||||
|
||||
if (!wasActive)
|
||||
{
|
||||
Cursor.lockState = CursorLockMode.None;
|
||||
InventoryEvents.Instance?.OnInventoryOpened?.Invoke();
|
||||
}
|
||||
else
|
||||
{
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
InventoryEvents.Instance?.OnInventoryClosed?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SelectHotbarSlot(int index)
|
||||
{
|
||||
if (index < 0 || index >= 9 || hotbarSlots == null || hotbarSlots.Length < 9)
|
||||
return;
|
||||
|
||||
// Снимаем выделение со старого
|
||||
if (_selectedHotbarSlot >= 0 && _selectedHotbarSlot < hotbarSlots.Length)
|
||||
{
|
||||
hotbarSlots[_selectedHotbarSlot].SetSelected(false);
|
||||
}
|
||||
|
||||
_selectedHotbarSlot = index;
|
||||
hotbarSlots[index].SetSelected(true);
|
||||
|
||||
// Получаем выбранный предмет
|
||||
var selectedItem = hotbarSlots[index].item;
|
||||
Debug.Log($"[Inventory] Selected hotbar slot: {index} - {selectedItem?.itemName ?? "Empty"}");
|
||||
|
||||
// TODO: Эвент для использования предмета
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получить предмет в выбранном слоте хотбара
|
||||
/// </summary>
|
||||
public ItemData GetSelectedHotbarItem()
|
||||
{
|
||||
if (hotbarSlots != null && _selectedHotbarSlot >= 0 && _selectedHotbarSlot < hotbarSlots.Length)
|
||||
{
|
||||
return hotbarSlots[_selectedHotbarSlot].item;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Выбросить выбранный предмет из хотбара
|
||||
/// </summary>
|
||||
public void DropSelectedItem()
|
||||
{
|
||||
if (hotbarSlots == null || _selectedHotbarSlot >= hotbarSlots.Length)
|
||||
return;
|
||||
|
||||
var slot = hotbarSlots[_selectedHotbarSlot];
|
||||
if (slot.IsEmpty) return;
|
||||
|
||||
var item = slot.item;
|
||||
int amount = slot.amount;
|
||||
|
||||
// Создаём предмет в мире через factory
|
||||
if (InventoryItemFactory.Instance != null)
|
||||
{
|
||||
// Используем позицию игрока
|
||||
Vector3 dropPos = Vector3.zero; // Заменить на позицию игрока
|
||||
if (Camera.main != null)
|
||||
{
|
||||
dropPos = Camera.main.transform.position + Camera.main.transform.forward * 2f;
|
||||
}
|
||||
|
||||
InventoryItemFactory.Instance.DropItem(item, amount, dropPos);
|
||||
}
|
||||
|
||||
// Очищаем слот
|
||||
slot.Clear();
|
||||
|
||||
Debug.Log($"[Inventory] Dropped {item.itemName} x{amount}");
|
||||
}
|
||||
|
||||
// ==================== ОСНОВНЫЕ ОПЕРАЦИИ ====================
|
||||
|
||||
/// <summary>
|
||||
/// Добавить предмет в инвентарь
|
||||
/// </summary>
|
||||
/// <returns>Количество не поместившихся предметов</returns>
|
||||
public int AddItem(string itemId, int amount = 1)
|
||||
{
|
||||
if (!_itemDict.TryGetValue(itemId, out ItemData item))
|
||||
{
|
||||
Debug.LogWarning($"Item not found: {itemId}");
|
||||
return amount;
|
||||
}
|
||||
|
||||
return AddItem(item, amount);
|
||||
}
|
||||
|
||||
public int AddItem(ItemData item, int amount = 1)
|
||||
{
|
||||
if (item == null)
|
||||
{
|
||||
Debug.LogWarning("[AddItem] item is null!");
|
||||
return amount;
|
||||
}
|
||||
|
||||
Debug.Log($"[AddItem] Adding {item.itemName} x{amount}, slots count: {slots?.Length ?? 0}");
|
||||
|
||||
if (slots == null || slots.Length == 0)
|
||||
{
|
||||
Debug.LogWarning("[AddItem] Slots not initialized!");
|
||||
return amount;
|
||||
}
|
||||
|
||||
// Сначала пытаемся доложить в существующие стеки (основной инвентарь)
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
if (slot.IsEmpty) continue;
|
||||
if (slot.item.id == item.id)
|
||||
{
|
||||
amount = slot.AddItems(item, amount);
|
||||
if (amount <= 0)
|
||||
{
|
||||
OnItemAdded?.Invoke(item.id, amount);
|
||||
InventoryEvents.Instance?.InvokeItemAdded(item.id, slot.amount);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Добавляем в пустые слоты (основной инвентарь)
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
if (slot.IsEmpty)
|
||||
{
|
||||
amount = slot.AddItems(item, amount);
|
||||
if (amount <= 0)
|
||||
{
|
||||
OnItemAdded?.Invoke(item.id, amount);
|
||||
InventoryEvents.Instance?.InvokeItemAdded(item.id, slot.amount);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Пробуем хотбар
|
||||
foreach (var slot in hotbarSlots)
|
||||
{
|
||||
if (!slot.IsEmpty && slot.item.id == item.id)
|
||||
{
|
||||
amount = slot.AddItems(item, amount);
|
||||
if (amount <= 0)
|
||||
{
|
||||
OnItemAdded?.Invoke(item.id, amount);
|
||||
InventoryEvents.Instance?.InvokeItemAdded(item.id, slot.amount);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var slot in hotbarSlots)
|
||||
{
|
||||
if (slot.IsEmpty)
|
||||
{
|
||||
amount = slot.AddItems(item, amount);
|
||||
if (amount <= 0)
|
||||
{
|
||||
OnItemAdded?.Invoke(item.id, amount);
|
||||
InventoryEvents.Instance?.InvokeItemAdded(item.id, slot.amount);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return amount;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Удалить предмет из инвентаря
|
||||
/// </summary>
|
||||
public bool RemoveItem(string itemId, int amount = 1)
|
||||
{
|
||||
int remaining = amount;
|
||||
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
if (slot.item != null && slot.item.id == itemId)
|
||||
{
|
||||
if (slot.amount >= remaining)
|
||||
{
|
||||
var (item, taken) = slot.TakeItems(remaining);
|
||||
OnItemRemoved?.Invoke(itemId, taken);
|
||||
InventoryEvents.Instance?.InvokeItemRemoved(itemId, taken);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
remaining -= slot.amount;
|
||||
slot.Clear();
|
||||
OnItemRemoved?.Invoke(itemId, slot.amount);
|
||||
InventoryEvents.Instance?.InvokeItemRemoved(itemId, slot.amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Пробуем хотбар
|
||||
if (remaining > 0)
|
||||
{
|
||||
foreach (var slot in hotbarSlots)
|
||||
{
|
||||
if (slot.item != null && slot.item.id == itemId)
|
||||
{
|
||||
if (slot.amount >= remaining)
|
||||
{
|
||||
var (item, taken) = slot.TakeItems(remaining);
|
||||
OnItemRemoved?.Invoke(itemId, taken);
|
||||
InventoryEvents.Instance?.InvokeItemRemoved(itemId, taken);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
remaining -= slot.amount;
|
||||
slot.Clear();
|
||||
OnItemRemoved?.Invoke(itemId, slot.amount);
|
||||
InventoryEvents.Instance?.InvokeItemRemoved(itemId, slot.amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return remaining <= 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получить количество предмета в инвентаре
|
||||
/// </summary>
|
||||
public int GetItemCount(string itemId)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
if (slots != null)
|
||||
{
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
if (slot.item != null && slot.item.id == itemId)
|
||||
{
|
||||
count += slot.amount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hotbarSlots != null)
|
||||
{
|
||||
foreach (var slot in hotbarSlots)
|
||||
{
|
||||
if (slot.item != null && slot.item.id == itemId)
|
||||
{
|
||||
count += slot.amount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Есть ли предмет в инвентаре
|
||||
/// </summary>
|
||||
public bool HasItem(string itemId, int amount = 1)
|
||||
{
|
||||
return GetItemCount(itemId) >= amount;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получить слот по индексу
|
||||
/// </summary>
|
||||
public Slot GetSlot(int index)
|
||||
{
|
||||
if (index >= 0 && index < slots.Length)
|
||||
return slots[index];
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Найти первый слот с указанным предметом
|
||||
/// </summary>
|
||||
public Slot FindSlotWithItem(string itemId)
|
||||
{
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
if (slot.item != null && slot.item.id == itemId)
|
||||
return slot;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Найти все слоты с указанным предметом
|
||||
/// </summary>
|
||||
public List<Slot> FindAllSlotsWithItem(string itemId)
|
||||
{
|
||||
var result = new List<Slot>();
|
||||
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
if (slot.item != null && slot.item.id == itemId)
|
||||
result.Add(slot);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Найти первый пустой слот
|
||||
/// </summary>
|
||||
public Slot FindEmptySlot()
|
||||
{
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
if (slot.IsEmpty)
|
||||
return slot;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поменять предметы между двумя слотами
|
||||
/// </summary>
|
||||
public void SwapSlots(int fromIndex, int toIndex)
|
||||
{
|
||||
if (fromIndex < 0 || fromIndex >= slots.Length ||
|
||||
toIndex < 0 || toIndex >= slots.Length)
|
||||
return;
|
||||
|
||||
var fromSlot = slots[fromIndex];
|
||||
var toSlot = slots[toIndex];
|
||||
|
||||
// Сохраняем данные
|
||||
var tempItem = fromSlot.item;
|
||||
var tempAmount = fromSlot.amount;
|
||||
|
||||
// Меняем
|
||||
if (toSlot.IsEmpty)
|
||||
{
|
||||
fromSlot.Clear();
|
||||
toSlot.SetItem(tempItem, tempAmount);
|
||||
}
|
||||
else
|
||||
{
|
||||
fromSlot.SetItem(toSlot.item, toSlot.amount);
|
||||
toSlot.SetItem(tempItem, tempAmount);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Очистить инвентарь
|
||||
/// </summary>
|
||||
public void ClearInventory()
|
||||
{
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
slot?.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Вызывается когда слот очищен (внутренний метод)
|
||||
/// </summary>
|
||||
public void OnSlotCleared(int slotIndex)
|
||||
{
|
||||
// Можно добавить дополнительную логику
|
||||
}
|
||||
|
||||
// ==================== ТЕСТОВЫЕ МЕТОДЫ ====================
|
||||
|
||||
/// <summary>
|
||||
/// Создать тестовый предмет в мире (для отладки)
|
||||
/// </summary>
|
||||
[ContextMenu("Spawn Test Item")]
|
||||
public void SpawnTestItem()
|
||||
{
|
||||
if (itemDatabase == null || itemDatabase.Count == 0)
|
||||
{
|
||||
Debug.LogWarning("No items in database!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Создаём предмет напротив игрока
|
||||
Vector3 spawnPos = Vector3.zero;
|
||||
var player = GameObject.FindGameObjectWithTag("Player");
|
||||
if (player != null)
|
||||
{
|
||||
spawnPos = player.transform.position + player.transform.forward * 2f;
|
||||
spawnPos.y = 0.5f;
|
||||
}
|
||||
|
||||
var item = itemDatabase[0];
|
||||
if (InventoryItemFactory.Instance != null)
|
||||
{
|
||||
InventoryItemFactory.Instance.CreateWorldItem(item, 5, spawnPos);
|
||||
Debug.Log($"Spawned test item: {item.itemName}");
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== РАБОТА С JSON ====================
|
||||
|
||||
public string ExportToJson()
|
||||
{
|
||||
var inventoryData = new InventorySaveData();
|
||||
inventoryData.slots = new SlotData[slots.Length];
|
||||
|
||||
for (int i = 0; i < slots.Length; i++)
|
||||
{
|
||||
inventoryData.slots[i] = new SlotData
|
||||
{
|
||||
itemId = slots[i].item?.id,
|
||||
amount = slots[i].amount
|
||||
};
|
||||
}
|
||||
|
||||
return JsonUtility.ToJson(inventoryData, true);
|
||||
}
|
||||
|
||||
public void ImportFromJson(string json)
|
||||
{
|
||||
var inventoryData = JsonUtility.FromJson<InventorySaveData>(json);
|
||||
|
||||
for (int i = 0; i < Mathf.Min(inventoryData.slots.Length, slots.Length); i++)
|
||||
{
|
||||
var slotData = inventoryData.slots[i];
|
||||
if (!string.IsNullOrEmpty(slotData.itemId) && _itemDict.TryGetValue(slotData.itemId, out ItemData item))
|
||||
{
|
||||
slots[i].SetItem(item, slotData.amount);
|
||||
}
|
||||
else
|
||||
{
|
||||
slots[i].Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
class InventorySaveData
|
||||
{
|
||||
public SlotData[] slots;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
class SlotData
|
||||
{
|
||||
public string itemId;
|
||||
public int amount;
|
||||
}
|
||||
}
|
||||
2
Assets/Inventory/Scripts/InventoryManager.cs.meta
Normal file
2
Assets/Inventory/Scripts/InventoryManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a4c4603259067dc4e96f741653843b92
|
||||
294
Assets/Inventory/Scripts/InventorySceneSetup.cs
Normal file
294
Assets/Inventory/Scripts/InventorySceneSetup.cs
Normal file
@@ -0,0 +1,294 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
|
||||
public class InventorySceneSetup
|
||||
{
|
||||
[MenuItem("Tools/Create Player")]
|
||||
public static void CreatePlayer()
|
||||
{
|
||||
var go = new GameObject("Player");
|
||||
|
||||
var cc = go.AddComponent<CharacterController>();
|
||||
cc.height = 1.8f;
|
||||
cc.radius = 0.5f;
|
||||
cc.center = new Vector3(0, 0.9f, 0);
|
||||
|
||||
var character = go.AddComponent<charecter>();
|
||||
character.walkSpeed = 5f;
|
||||
character.runSpeed = 9f;
|
||||
character.crouchSpeed = 2.5f;
|
||||
character.jumpHeight = 1.5f;
|
||||
character.gravity = -9.81f;
|
||||
|
||||
GameObject body = GameObject.CreatePrimitive(PrimitiveType.Capsule);
|
||||
body.name = "Body";
|
||||
body.transform.SetParent(go.transform);
|
||||
body.transform.localPosition = Vector3.zero;
|
||||
GameObject.Destroy(body.GetComponent<Collider>());
|
||||
|
||||
GameObject head = new GameObject("Head");
|
||||
head.transform.SetParent(go.transform);
|
||||
head.transform.localPosition = new Vector3(0, 0.8f, 0);
|
||||
character.head = head.transform;
|
||||
|
||||
GameObject camObj = new GameObject("PlayerCamera");
|
||||
camObj.transform.SetParent(head.transform);
|
||||
camObj.transform.localPosition = new Vector3(0, 0.1f, 0);
|
||||
var cam = camObj.AddComponent<Camera>();
|
||||
cam.tag = "MainCamera";
|
||||
|
||||
var existingCam = GameObject.FindGameObjectWithTag("MainCamera");
|
||||
if (existingCam != null && existingCam != camObj)
|
||||
{
|
||||
GameObject.Destroy(existingCam);
|
||||
}
|
||||
|
||||
go.tag = "Player";
|
||||
go.transform.position = new Vector3(0, 2, -5);
|
||||
|
||||
Selection.activeGameObject = go;
|
||||
Debug.Log("[Tools] Создан игрок!");
|
||||
}
|
||||
|
||||
[MenuItem("Tools/Create Item Prefab")]
|
||||
public static void CreateItemPrefab()
|
||||
{
|
||||
var itemGO = new GameObject("NewItem");
|
||||
itemGO.AddComponent<WorldItem>();
|
||||
|
||||
var sphere = itemGO.AddComponent<SphereCollider>();
|
||||
sphere.radius = 0.5f;
|
||||
sphere.isTrigger = true;
|
||||
|
||||
var visual = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||||
visual.name = "Visual";
|
||||
visual.transform.SetParent(itemGO.transform);
|
||||
visual.transform.localPosition = Vector3.zero;
|
||||
visual.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
|
||||
GameObject.Destroy(visual.GetComponent<Collider>());
|
||||
|
||||
Selection.activeGameObject = itemGO;
|
||||
Debug.Log("[Tools] Создан префаб предмета!");
|
||||
}
|
||||
|
||||
[MenuItem("Tools/Create Test Item in Scene")]
|
||||
public static void CreateTestItem()
|
||||
{
|
||||
// Создаём тестовый предмет в сцене
|
||||
var itemGO = new GameObject("TestItem");
|
||||
itemGO.transform.position = new Vector3(0, 0.5f, 3);
|
||||
|
||||
// Визуал
|
||||
var visual = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||||
visual.name = "Visual";
|
||||
visual.transform.SetParent(itemGO.transform);
|
||||
visual.transform.localPosition = Vector3.zero;
|
||||
visual.transform.localScale = Vector3.one * 0.3f;
|
||||
GameObject.Destroy(visual.GetComponent<Collider>());
|
||||
|
||||
// Компонент предмета
|
||||
var worldItem = itemGO.AddComponent<WorldItem>();
|
||||
worldItem.pickupDelay = 0f; // мгновенный подбор
|
||||
worldItem.useFactory = false;
|
||||
|
||||
// Тестовые данные
|
||||
var testItem = ScriptableObject.CreateInstance<ItemData>();
|
||||
testItem.id = "test_item";
|
||||
testItem.itemName = "Тестовый предмет";
|
||||
testItem.description = "Просто тестовый предмет";
|
||||
testItem.type = ItemType.Material;
|
||||
testItem.maxStack = 64;
|
||||
|
||||
worldItem.itemData = testItem;
|
||||
worldItem.amount = 5;
|
||||
|
||||
// Коллайдер для подбора (trigger для обычных коллайдеров)
|
||||
var box = itemGO.AddComponent<BoxCollider>();
|
||||
box.isTrigger = true;
|
||||
box.size = Vector3.one;
|
||||
|
||||
Selection.activeGameObject = itemGO;
|
||||
Debug.Log("[Tools] Создан тестовый предмет! Подойдите к нему игроком.");
|
||||
}
|
||||
|
||||
[MenuItem("Tools/Setup Inventory Scene")]
|
||||
public static void SetupScene()
|
||||
{
|
||||
var scene = UnityEngine.SceneManagement.SceneManager.GetActiveScene();
|
||||
var rootObjects = scene.GetRootGameObjects();
|
||||
|
||||
foreach (var root in rootObjects)
|
||||
{
|
||||
if (root.GetComponent<InventoryManager>() != null)
|
||||
{
|
||||
Debug.LogWarning("InventoryManager уже существует!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Создаём GameManager
|
||||
var gameManager = new GameObject("GameManager");
|
||||
var im = gameManager.AddComponent<InventoryManager>();
|
||||
gameManager.AddComponent<InventoryExampleItems>();
|
||||
gameManager.AddComponent<InventoryTester>();
|
||||
|
||||
// Создаём Canvas
|
||||
var canvasGO = new GameObject("InventoryCanvas");
|
||||
var canvas = canvasGO.AddComponent<Canvas>();
|
||||
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
|
||||
canvas.sortingOrder = 100;
|
||||
canvasGO.AddComponent<GraphicRaycaster>();
|
||||
|
||||
// Создаём панель инвентаря
|
||||
var inventoryPanel = CreatePanel(canvasGO.transform, "InventoryPanel", new Color(0.15f, 0.15f, 0.15f, 0.95f));
|
||||
var inventoryRect = inventoryPanel.GetComponent<RectTransform>();
|
||||
SetRect(inventoryRect, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), Vector2.zero, new Vector2(500, 300));
|
||||
|
||||
// Заголовок
|
||||
CreateTitle(inventoryPanel.transform, "Инвентарь", new Vector2(0, 130));
|
||||
|
||||
// Сетка инвентаря (4x9 = 36 слотов)
|
||||
var inventoryGrid = CreateGrid(inventoryPanel.transform, "InventoryGrid", 9, 4, 50, 4, new Vector2(10, 40));
|
||||
im.slots = CreateSlots(inventoryGrid, "InventorySlot_", 0, 36);
|
||||
|
||||
// Создаём хотбар
|
||||
var hotbarPanel = CreatePanel(canvasGO.transform, "HotbarPanel", new Color(0.1f, 0.1f, 0.1f, 0.9f));
|
||||
var hotbarRect = hotbarPanel.GetComponent<RectTransform>();
|
||||
SetRect(hotbarRect, new Vector2(0.5f, 0f), new Vector2(0.5f, 0f), new Vector2(0, 15), new Vector2(460, 60));
|
||||
|
||||
var hotbarGrid = CreateGrid(hotbarPanel.transform, "HotbarGrid", 9, 1, 50, 4, new Vector2(10, 10));
|
||||
im.hotbarSlots = CreateSlots(hotbarGrid, "HotbarSlot_", 0, 9);
|
||||
|
||||
// Подключаем ссылку на панель
|
||||
im.inventoryPanel = inventoryPanel;
|
||||
im.inventoryCanvas = canvas;
|
||||
|
||||
// Скрываем панель
|
||||
inventoryPanel.SetActive(false);
|
||||
|
||||
Debug.Log("[Tools] Инвентарь настроен! (36 слотов + 9 хотбар)");
|
||||
}
|
||||
|
||||
static GameObject CreatePanel(Transform parent, string name, Color color)
|
||||
{
|
||||
var panel = new GameObject(name);
|
||||
panel.transform.SetParent(parent, false);
|
||||
panel.AddComponent<RectTransform>();
|
||||
panel.AddComponent<Image>().color = color;
|
||||
return panel;
|
||||
}
|
||||
|
||||
static void SetRect(RectTransform rect, Vector2 anchorMin, Vector2 anchorMax, Vector2 anchoredPosition, Vector2 sizeDelta)
|
||||
{
|
||||
rect.anchorMin = anchorMin;
|
||||
rect.anchorMax = anchorMax;
|
||||
rect.pivot = new Vector2(0.5f, 0.5f);
|
||||
rect.anchoredPosition = anchoredPosition;
|
||||
rect.sizeDelta = sizeDelta;
|
||||
}
|
||||
|
||||
static void CreateTitle(Transform parent, string text, Vector2 position)
|
||||
{
|
||||
var titleObj = new GameObject("Title");
|
||||
titleObj.transform.SetParent(parent, false);
|
||||
var rect = titleObj.AddComponent<RectTransform>();
|
||||
rect.anchorMin = new Vector2(0, 1);
|
||||
rect.anchorMax = new Vector2(1, 1);
|
||||
rect.pivot = new Vector2(0.5f, 1);
|
||||
rect.anchoredPosition = position;
|
||||
rect.sizeDelta = new Vector2(-20, 30);
|
||||
|
||||
var tmp = titleObj.AddComponent<TextMeshProUGUI>();
|
||||
tmp.text = text;
|
||||
tmp.fontSize = 18;
|
||||
tmp.alignment = TextAlignmentOptions.Center;
|
||||
tmp.color = Color.white;
|
||||
}
|
||||
|
||||
static Transform CreateGrid(Transform parent, string name, int cols, int rows, float cellSize, float spacing, Vector2 offset)
|
||||
{
|
||||
var gridObj = new GameObject(name);
|
||||
gridObj.transform.SetParent(parent, false);
|
||||
var rect = gridObj.AddComponent<RectTransform>();
|
||||
rect.anchorMin = Vector2.zero;
|
||||
rect.anchorMax = Vector2.one;
|
||||
rect.offsetMin = offset;
|
||||
rect.offsetMax = -offset;
|
||||
|
||||
var grid = gridObj.AddComponent<GridLayoutGroup>();
|
||||
grid.cellSize = new Vector2(cellSize, cellSize);
|
||||
grid.spacing = new Vector2(spacing, spacing);
|
||||
grid.startCorner = GridLayoutGroup.Corner.UpperLeft;
|
||||
grid.startAxis = GridLayoutGroup.Axis.Horizontal;
|
||||
grid.constraint = GridLayoutGroup.Constraint.FixedColumnCount;
|
||||
grid.constraintCount = cols;
|
||||
|
||||
return gridObj.transform;
|
||||
}
|
||||
|
||||
static Slot[] CreateSlots(Transform parent, string prefix, int startIndex, int count)
|
||||
{
|
||||
var slots = new Slot[count];
|
||||
var slotSize = 50f;
|
||||
var emptyColor = new Color(0.25f, 0.25f, 0.25f, 0.8f);
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var slotObj = new GameObject(prefix + (startIndex + i));
|
||||
slotObj.transform.SetParent(parent, false);
|
||||
slotObj.AddComponent<RectTransform>().sizeDelta = new Vector2(slotSize, slotSize);
|
||||
|
||||
var bg = slotObj.AddComponent<Image>();
|
||||
bg.color = emptyColor;
|
||||
|
||||
var slot = slotObj.AddComponent<Slot>();
|
||||
slot.slotIndex = startIndex + i;
|
||||
|
||||
// Icon
|
||||
var iconObj = new GameObject("Icon");
|
||||
iconObj.transform.SetParent(slotObj.transform, false);
|
||||
var iconRect = iconObj.AddComponent<RectTransform>();
|
||||
iconRect.anchorMin = Vector2.zero;
|
||||
iconRect.anchorMax = Vector2.one;
|
||||
iconRect.offsetMin = new Vector2(4, 4);
|
||||
iconRect.offsetMax = new Vector2(-4, -4);
|
||||
slot.iconImage = iconObj.AddComponent<Image>();
|
||||
slot.iconImage.preserveAspect = true;
|
||||
slot.iconImage.enabled = false;
|
||||
|
||||
// Amount panel
|
||||
var amountObj = new GameObject("AmountPanel");
|
||||
amountObj.transform.SetParent(slotObj.transform, false);
|
||||
var amountRect = amountObj.AddComponent<RectTransform>();
|
||||
amountRect.anchorMin = Vector2.one;
|
||||
amountRect.anchorMax = Vector2.one;
|
||||
amountRect.pivot = new Vector2(1, 0);
|
||||
amountRect.anchoredPosition = new Vector2(-2, 2);
|
||||
amountRect.sizeDelta = new Vector2(22, 22);
|
||||
slot.amountPanel = amountObj;
|
||||
slot.amountPanel.SetActive(false);
|
||||
|
||||
amountObj.AddComponent<Image>().color = new Color(0, 0, 0, 0.7f);
|
||||
|
||||
var amountTextObj = new GameObject("Text");
|
||||
amountTextObj.transform.SetParent(amountObj.transform, false);
|
||||
amountTextObj.AddComponent<RectTransform>().sizeDelta = new Vector2(20, 20);
|
||||
slot.amountText = amountTextObj.AddComponent<TextMeshProUGUI>();
|
||||
slot.amountText.fontSize = 14;
|
||||
slot.amountText.alignment = TextAlignmentOptions.Right;
|
||||
slot.amountText.color = Color.white;
|
||||
slot.amountText.fontStyle = FontStyles.Bold;
|
||||
|
||||
// Drag & Drop
|
||||
var dragDrop = slotObj.AddComponent<InventoryDragDrop>();
|
||||
dragDrop.slot = slot;
|
||||
dragDrop.slotIndex = slot.slotIndex;
|
||||
|
||||
slots[i] = slot;
|
||||
}
|
||||
|
||||
return slots;
|
||||
}
|
||||
}
|
||||
2
Assets/Inventory/Scripts/InventorySceneSetup.cs.meta
Normal file
2
Assets/Inventory/Scripts/InventorySceneSetup.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 70e234cedfb31844792350a7206e4bad
|
||||
101
Assets/Inventory/Scripts/InventorySetup.cs
Normal file
101
Assets/Inventory/Scripts/InventorySetup.cs
Normal file
@@ -0,0 +1,101 @@
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
/// <summary>
|
||||
/// Автоматически настраивает всю систему инвентаря на сцене
|
||||
/// Добавить на пустой GameObject "GameManager" в сцене
|
||||
/// </summary>
|
||||
public class InventorySetup : MonoBehaviour
|
||||
{
|
||||
[Header("Настройки")]
|
||||
public bool createUI = true;
|
||||
public bool createManagers = true;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
// Не создаём если уже есть на сцене (после ручной настройки)
|
||||
if (FindObjectOfType<InventoryManager>() != null)
|
||||
{
|
||||
Debug.Log("[InventorySetup] Inventory already exists, skipping creation");
|
||||
return;
|
||||
}
|
||||
|
||||
if (createManagers)
|
||||
SetupManagers();
|
||||
|
||||
if (createUI)
|
||||
SetupUI();
|
||||
}
|
||||
|
||||
void SetupManagers()
|
||||
{
|
||||
var imGO = new GameObject("InventoryManager");
|
||||
imGO.transform.SetParent(transform);
|
||||
imGO.AddComponent<InventoryManager>();
|
||||
|
||||
var itemsGO = new GameObject("InventoryItems");
|
||||
itemsGO.transform.SetParent(transform);
|
||||
itemsGO.AddComponent<InventoryExampleItems>();
|
||||
|
||||
var testerGO = new GameObject("InventoryTester");
|
||||
testerGO.transform.SetParent(transform);
|
||||
testerGO.AddComponent<InventoryTester>();
|
||||
|
||||
Debug.Log("[InventorySetup] Managers created");
|
||||
}
|
||||
|
||||
void SetupUI()
|
||||
{
|
||||
var canvasGO = new GameObject("InventoryCanvas");
|
||||
canvasGO.transform.SetParent(transform);
|
||||
|
||||
var canvas = canvasGO.AddComponent<Canvas>();
|
||||
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
|
||||
canvas.sortingOrder = 100;
|
||||
canvasGO.AddComponent<GraphicRaycaster>();
|
||||
|
||||
canvasGO.AddComponent<InventoryUIBuilder>();
|
||||
|
||||
Debug.Log("[InventorySetup] UI created");
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
/// <summary>
|
||||
/// Кнопка в инспекторе для быстрой настройки сцены
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(InventorySetup))]
|
||||
public class InventorySetupEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
base.OnInspectorGUI();
|
||||
|
||||
if (GUILayout.Button("Настроить сцену для инвентаря"))
|
||||
{
|
||||
var target = (InventorySetup)this.target;
|
||||
|
||||
if (FindObjectOfType<InventoryManager>() == null)
|
||||
{
|
||||
target.createManagers = true;
|
||||
target.createUI = true;
|
||||
Debug.Log("Инвентарь будет настроен при запуске");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("InventoryManager уже существует на сцене!");
|
||||
}
|
||||
}
|
||||
|
||||
GUILayout.Space(10);
|
||||
|
||||
if (GUILayout.Button("Открыть сцену в Unity"))
|
||||
{
|
||||
EditorApplication.ExecuteMenuItem("Window/General/Scene");
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
2
Assets/Inventory/Scripts/InventorySetup.cs.meta
Normal file
2
Assets/Inventory/Scripts/InventorySetup.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9a832ca7ed419e6479e1cc308a222f33
|
||||
291
Assets/Inventory/Scripts/InventoryUIBuilder.cs
Normal file
291
Assets/Inventory/Scripts/InventoryUIBuilder.cs
Normal file
@@ -0,0 +1,291 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
|
||||
/// <summary>
|
||||
/// Создаёт UI инвентаря программно с использованием TextMeshPro
|
||||
/// </summary>
|
||||
public class InventoryUIBuilder : MonoBehaviour
|
||||
{
|
||||
[Header("Settings")]
|
||||
public int hotbarSlots = 9;
|
||||
public int inventoryRows = 4;
|
||||
public int inventoryCols = 9;
|
||||
|
||||
[Header("Visual Settings")]
|
||||
public float slotSize = 50f;
|
||||
public float slotSpacing = 4f;
|
||||
public float inventoryPadding = 10f;
|
||||
public float hotbarPadding = 10f;
|
||||
|
||||
[Header("Colors")]
|
||||
[SerializeField] private Color inventoryPanelColor = new Color(0.15f, 0.15f, 0.15f, 0.95f);
|
||||
[SerializeField] private Color hotbarPanelColor = new Color(0.1f, 0.1f, 0.1f, 0.9f);
|
||||
[SerializeField] private Color slotEmptyColor = new Color(0.25f, 0.25f, 0.25f, 0.8f);
|
||||
[SerializeField] private Color slotFilledColor = new Color(0.35f, 0.35f, 0.35f, 0.95f);
|
||||
|
||||
[Header("Container References")]
|
||||
public RectTransform inventoryPanelRect;
|
||||
public RectTransform hotbarPanelRect;
|
||||
public Canvas inventoryCanvas;
|
||||
|
||||
void Start()
|
||||
{
|
||||
// Проверяем, не запущен ли уже BuildInventoryUI
|
||||
if (InventoryManager.Instance != null &&
|
||||
InventoryManager.Instance.slots != null &&
|
||||
InventoryManager.Instance.slots.Length > 0)
|
||||
{
|
||||
Debug.Log("[InventoryUIBuilder] UI already built, skipping");
|
||||
return;
|
||||
}
|
||||
|
||||
BuildInventoryUI();
|
||||
}
|
||||
|
||||
public void BuildInventoryUI()
|
||||
{
|
||||
// Создаём или получаем Canvas
|
||||
var canvas = GetComponent<Canvas>();
|
||||
if (canvas == null)
|
||||
{
|
||||
canvas = gameObject.AddComponent<Canvas>();
|
||||
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
|
||||
canvas.sortingOrder = 100;
|
||||
gameObject.AddComponent<GraphicRaycaster>();
|
||||
}
|
||||
inventoryCanvas = canvas;
|
||||
|
||||
// Настраиваем EventSystem если нет
|
||||
if (FindObjectOfType<TMPro.TMP_InputField>() != null || FindObjectsOfType<TMPro.TextMeshProUGUI>().Length > 0)
|
||||
{
|
||||
// EventSystem уже есть
|
||||
}
|
||||
|
||||
// Создаём панель инвентаря
|
||||
GameObject inventoryPanel = CreatePanel("InventoryPanel", transform, inventoryPanelColor);
|
||||
inventoryPanelRect = inventoryPanel.GetComponent<RectTransform>();
|
||||
|
||||
float inventoryWidth = inventoryCols * (slotSize + slotSpacing) + inventoryPadding * 2;
|
||||
float inventoryHeight = inventoryRows * (slotSize + slotSpacing) + inventoryPadding * 2 + 40; // +40 для заголовка
|
||||
|
||||
inventoryPanelRect.anchorMin = new Vector2(0.5f, 0.5f);
|
||||
inventoryPanelRect.anchorMax = new Vector2(0.5f, 0.5f);
|
||||
inventoryPanelRect.pivot = new Vector2(0.5f, 0.5f);
|
||||
inventoryPanelRect.anchoredPosition = Vector2.zero;
|
||||
inventoryPanelRect.sizeDelta = new Vector2(inventoryWidth, inventoryHeight);
|
||||
|
||||
// Заголовок
|
||||
CreateTitle(inventoryPanel.transform, "Инвентарь", new Vector2(0, inventoryHeight / 2 - 20));
|
||||
|
||||
// Сетка инвентаря (4x9 = 36 слотов)
|
||||
float gridHeight = inventoryRows * (slotSize + slotSpacing);
|
||||
var inventoryGrid = CreateGrid(
|
||||
inventoryPanel.transform,
|
||||
"InventoryGrid",
|
||||
inventoryCols,
|
||||
inventoryRows,
|
||||
slotSize,
|
||||
slotSpacing,
|
||||
new Vector2(inventoryPadding, inventoryPadding + 30)
|
||||
);
|
||||
InventoryManager.Instance.slots = CreateSlots(inventoryGrid, "InventorySlot_", 0, inventoryCols * inventoryRows);
|
||||
|
||||
// Создаём хотбар
|
||||
GameObject hotbarPanel = CreatePanel("HotbarPanel", transform, hotbarPanelColor);
|
||||
hotbarPanelRect = hotbarPanel.GetComponent<RectTransform>();
|
||||
|
||||
float hotbarWidth = hotbarSlots * (slotSize + slotSpacing) + hotbarPadding * 2;
|
||||
|
||||
hotbarPanelRect.anchorMin = new Vector2(0.5f, 0f);
|
||||
hotbarPanelRect.anchorMax = new Vector2(0.5f, 0f);
|
||||
hotbarPanelRect.pivot = new Vector2(0.5f, 0f);
|
||||
hotbarPanelRect.anchoredPosition = new Vector2(0, 15);
|
||||
hotbarPanelRect.sizeDelta = new Vector2(hotbarWidth, slotSize + hotbarPadding * 2);
|
||||
|
||||
var hotbarGrid = CreateGrid(
|
||||
hotbarPanel.transform,
|
||||
"HotbarGrid",
|
||||
hotbarSlots,
|
||||
1,
|
||||
slotSize,
|
||||
slotSpacing,
|
||||
new Vector2(hotbarPadding, hotbarPadding)
|
||||
);
|
||||
InventoryManager.Instance.hotbarSlots = CreateSlots(hotbarGrid, "HotbarSlot_", 0, hotbarSlots);
|
||||
|
||||
// Настраиваем InventoryManager
|
||||
InventoryManager.Instance.inventoryPanel = inventoryPanel;
|
||||
InventoryManager.Instance.inventoryCanvas = inventoryCanvas;
|
||||
|
||||
Debug.Log($"[InventoryUIBuilder] Created {inventoryCols * inventoryRows} inventory slots + {hotbarSlots} hotbar slots");
|
||||
}
|
||||
|
||||
GameObject CreatePanel(string name, Transform parent, Color color)
|
||||
{
|
||||
GameObject panel = new GameObject(name);
|
||||
panel.transform.SetParent(parent, false);
|
||||
|
||||
var rect = panel.AddComponent<RectTransform>();
|
||||
panel.AddComponent<Image>().color = color;
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
void CreateTitle(Transform parent, string text, Vector2 position)
|
||||
{
|
||||
GameObject titleObj = new GameObject("Title");
|
||||
titleObj.transform.SetParent(parent, false);
|
||||
|
||||
var rect = titleObj.AddComponent<RectTransform>();
|
||||
rect.anchorMin = new Vector2(0, 1);
|
||||
rect.anchorMax = new Vector2(1, 1);
|
||||
rect.pivot = new Vector2(0.5f, 1);
|
||||
rect.anchoredPosition = position;
|
||||
rect.sizeDelta = new Vector2(-20, 30);
|
||||
|
||||
var tmp = titleObj.AddComponent<TextMeshProUGUI>();
|
||||
tmp.text = text;
|
||||
tmp.fontSize = 18;
|
||||
tmp.alignment = TextAlignmentOptions.Center;
|
||||
tmp.color = Color.white;
|
||||
}
|
||||
|
||||
Transform CreateGrid(Transform parent, string name, int cols, int rows, float cellSize, float spacing, Vector2 offset)
|
||||
{
|
||||
GameObject gridObj = new GameObject(name);
|
||||
gridObj.transform.SetParent(parent, false);
|
||||
|
||||
var rect = gridObj.AddComponent<RectTransform>();
|
||||
rect.anchorMin = Vector2.zero;
|
||||
rect.anchorMax = Vector2.one;
|
||||
rect.offsetMin = offset;
|
||||
rect.offsetMax = -offset;
|
||||
|
||||
var grid = gridObj.AddComponent<GridLayoutGroup>();
|
||||
grid.cellSize = new Vector2(cellSize, cellSize);
|
||||
grid.spacing = new Vector2(spacing, spacing);
|
||||
grid.startCorner = GridLayoutGroup.Corner.UpperLeft;
|
||||
grid.startAxis = GridLayoutGroup.Axis.Horizontal;
|
||||
grid.constraint = GridLayoutGroup.Constraint.FixedColumnCount;
|
||||
grid.constraintCount = cols;
|
||||
grid.padding = new RectOffset(0, 0, 0, 0);
|
||||
|
||||
return gridObj.transform;
|
||||
}
|
||||
|
||||
Slot[] CreateSlots(Transform parent, string prefix, int startIndex, int count)
|
||||
{
|
||||
var slots = new Slot[count];
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
GameObject slotObj = new GameObject(prefix + (startIndex + i));
|
||||
slotObj.transform.SetParent(parent, false);
|
||||
|
||||
var rect = slotObj.AddComponent<RectTransform>();
|
||||
rect.sizeDelta = new Vector2(slotSize, slotSize);
|
||||
|
||||
// Background
|
||||
var bg = slotObj.AddComponent<Image>();
|
||||
bg.color = slotEmptyColor;
|
||||
|
||||
// Slot компонент
|
||||
var slot = slotObj.AddComponent<Slot>();
|
||||
slot.slotIndex = startIndex + i;
|
||||
|
||||
// Icon
|
||||
GameObject iconObj = new GameObject("Icon");
|
||||
iconObj.transform.SetParent(slotObj.transform, false);
|
||||
var iconRect = iconObj.AddComponent<RectTransform>();
|
||||
iconRect.anchorMin = Vector2.zero;
|
||||
iconRect.anchorMax = Vector2.one;
|
||||
iconRect.offsetMin = new Vector2(4, 4);
|
||||
iconRect.offsetMax = new Vector2(-4, -4);
|
||||
slot.iconImage = iconObj.AddComponent<Image>();
|
||||
slot.iconImage.preserveAspect = true;
|
||||
slot.iconImage.enabled = false;
|
||||
|
||||
// Amount panel
|
||||
GameObject amountObj = new GameObject("AmountPanel");
|
||||
amountObj.transform.SetParent(slotObj.transform, false);
|
||||
var amountRect = amountObj.AddComponent<RectTransform>();
|
||||
amountRect.anchorMin = Vector2.one;
|
||||
amountRect.anchorMax = Vector2.one;
|
||||
amountRect.pivot = new Vector2(1, 0);
|
||||
amountRect.anchoredPosition = new Vector2(-2, 2);
|
||||
amountRect.sizeDelta = new Vector2(22, 22);
|
||||
slot.amountPanel = amountObj;
|
||||
|
||||
var amountBg = amountObj.AddComponent<Image>();
|
||||
amountBg.color = new Color(0, 0, 0, 0.7f);
|
||||
|
||||
GameObject amountTextObj = new GameObject("Text");
|
||||
amountTextObj.transform.SetParent(amountObj.transform, false);
|
||||
var amountTextRect = amountTextObj.AddComponent<RectTransform>();
|
||||
amountTextRect.anchorMin = Vector2.zero;
|
||||
amountTextRect.anchorMax = Vector2.one;
|
||||
slot.amountText = amountTextObj.AddComponent<TextMeshProUGUI>();
|
||||
slot.amountText.fontSize = 14;
|
||||
slot.amountText.alignment = TextAlignmentOptions.Right;
|
||||
slot.amountText.color = Color.white;
|
||||
slot.amountText.fontStyle = FontStyles.Bold;
|
||||
|
||||
// Применяем настройки через сеттер
|
||||
slot.amountPanel.SetActive(false);
|
||||
slot.slotBackground = bg;
|
||||
|
||||
// Drag & Drop
|
||||
var dragDrop = slotObj.AddComponent<InventoryDragDrop>();
|
||||
dragDrop.slot = slot;
|
||||
dragDrop.slotIndex = slot.slotIndex;
|
||||
|
||||
// Подписка на события слота
|
||||
slot.OnSlotClicked += OnSlotClicked;
|
||||
|
||||
slots[i] = slot;
|
||||
}
|
||||
|
||||
return slots;
|
||||
}
|
||||
|
||||
private int _selectedSlot = -1;
|
||||
|
||||
private void OnSlotClicked(Slot slot)
|
||||
{
|
||||
// Снимаем выделение с предыдущего
|
||||
if (_selectedSlot >= 0 && _selectedSlot < InventoryManager.Instance.slots.Length)
|
||||
{
|
||||
InventoryManager.Instance.slots[_selectedSlot].SetSelected(false);
|
||||
}
|
||||
|
||||
// Выделяем новый
|
||||
slot.SetSelected(true);
|
||||
_selectedSlot = slot.slotIndex;
|
||||
|
||||
Debug.Log($"[UI] Selected slot: {_selectedSlot} - {slot.GetItem()?.itemName ?? "Empty"}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пересоздать UI (например, при изменении настроек)
|
||||
/// </summary>
|
||||
public void Rebuild()
|
||||
{
|
||||
// Удаляем старые панели
|
||||
if (inventoryPanelRect != null)
|
||||
Destroy(inventoryPanelRect.gameObject);
|
||||
if (hotbarPanelRect != null)
|
||||
Destroy(hotbarPanelRect.gameObject);
|
||||
|
||||
BuildInventoryUI();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Показать/скрыть инвентарь
|
||||
/// </summary>
|
||||
public void ToggleInventory(bool show)
|
||||
{
|
||||
if (inventoryPanelRect != null)
|
||||
inventoryPanelRect.gameObject.SetActive(show);
|
||||
}
|
||||
}
|
||||
2
Assets/Inventory/Scripts/InventoryUIBuilder.cs.meta
Normal file
2
Assets/Inventory/Scripts/InventoryUIBuilder.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9296b7da4cf11cf41909512f177d7434
|
||||
231
Assets/Inventory/Scripts/ItemBuilderTool.cs
Normal file
231
Assets/Inventory/Scripts/ItemBuilderTool.cs
Normal file
@@ -0,0 +1,231 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEditor;
|
||||
using TMPro;
|
||||
|
||||
public class ItemBuilderTool : EditorWindow
|
||||
{
|
||||
// Основные данные
|
||||
private string itemName = "NewItem";
|
||||
private string itemId = "";
|
||||
private string description = "";
|
||||
private ItemType itemType = ItemType.Material;
|
||||
|
||||
// Визуал
|
||||
private GameObject modelPrefab;
|
||||
private Sprite icon;
|
||||
private Color previewColor = Color.gray;
|
||||
|
||||
// Свойства
|
||||
private int maxStack = 64;
|
||||
private int value = 1;
|
||||
private float weight = 1f;
|
||||
private bool isDroppable = true;
|
||||
private bool isStackable = true;
|
||||
|
||||
// Префаб
|
||||
private GameObject worldItemPrefab;
|
||||
|
||||
[MenuItem("Tools/Item Builder")]
|
||||
public static void ShowWindow()
|
||||
{
|
||||
GetWindow<ItemBuilderTool>("Конструктор Предметов");
|
||||
}
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
GUILayout.Label("Создание предмета", EditorStyles.boldLabel);
|
||||
|
||||
// Основные данные
|
||||
GUILayout.Label("Основное", EditorStyles.miniBoldLabel);
|
||||
itemName = EditorGUILayout.TextField("Название", itemName);
|
||||
itemId = EditorGUILayout.TextField("ID", itemId);
|
||||
description = EditorGUILayout.TextField("Описание", description);
|
||||
itemType = (ItemType)EditorGUILayout.EnumPopup("Тип предмета", itemType);
|
||||
|
||||
GUILayout.Space(10);
|
||||
|
||||
// Визуал
|
||||
GUILayout.Label("Визуал", EditorStyles.miniBoldLabel);
|
||||
modelPrefab = (GameObject)EditorGUILayout.ObjectField("3D модель", modelPrefab, typeof(GameObject), false);
|
||||
icon = (Sprite)EditorGUILayout.ObjectField("Иконка", icon, typeof(Sprite), false);
|
||||
|
||||
if (icon == null)
|
||||
{
|
||||
previewColor = EditorGUILayout.ColorField("Цвет иконки", previewColor);
|
||||
}
|
||||
|
||||
GUILayout.Space(10);
|
||||
|
||||
// Свойства
|
||||
GUILayout.Label("Свойства", EditorStyles.miniBoldLabel);
|
||||
maxStack = EditorGUILayout.IntField("Макс. стек", maxStack);
|
||||
value = EditorGUILayout.IntField("Цена", value);
|
||||
weight = EditorGUILayout.FloatField("Вес", weight);
|
||||
isDroppable = EditorGUILayout.Toggle("Можно выбросить", isDroppable);
|
||||
isStackable = EditorGUILayout.Toggle("Стек", isStackable);
|
||||
|
||||
GUILayout.Space(10);
|
||||
|
||||
// Префаб
|
||||
GUILayout.Label("Префаб предмета в мире", EditorStyles.miniBoldLabel);
|
||||
worldItemPrefab = (GameObject)EditorGUILayout.ObjectField("WorldItem Prefab", worldItemPrefab, typeof(GameObject), false);
|
||||
|
||||
GUILayout.Space(20);
|
||||
|
||||
// Кнопки
|
||||
GUI.color = Color.green;
|
||||
if (GUILayout.Button("Создать ItemData"))
|
||||
{
|
||||
CreateItemData();
|
||||
}
|
||||
|
||||
GUI.color = Color.cyan;
|
||||
if (GUILayout.Button("Создать WorldItem в сцене"))
|
||||
{
|
||||
CreateWorldItem();
|
||||
}
|
||||
|
||||
GUI.color = Color.yellow;
|
||||
if (GUILayout.Button("Создать префаб"))
|
||||
{
|
||||
CreateItemPrefab();
|
||||
}
|
||||
|
||||
GUI.color = Color.white;
|
||||
|
||||
GUILayout.Space(10);
|
||||
EditorGUILayout.HelpBox(
|
||||
"1. Заполните данные предмета\n" +
|
||||
"2. Назначьте модель и иконку\n" +
|
||||
"3. Создайте ItemData или префаб",
|
||||
MessageType.Info);
|
||||
}
|
||||
|
||||
void CreateItemData()
|
||||
{
|
||||
if (string.IsNullOrEmpty(itemName))
|
||||
{
|
||||
EditorUtility.DisplayDialog("Ошибка", "Введите название предмета", "OK");
|
||||
return;
|
||||
}
|
||||
|
||||
var item = ScriptableObject.CreateInstance<ItemData>();
|
||||
|
||||
item.id = string.IsNullOrEmpty(itemId) ? GUID.Generate().ToString() : itemId;
|
||||
item.itemName = itemName;
|
||||
item.description = description;
|
||||
item.type = itemType;
|
||||
item.modelPrefab = modelPrefab;
|
||||
item.icon = icon != null ? icon : CreatePlaceholderIcon();
|
||||
item.maxStack = maxStack;
|
||||
item.value = value;
|
||||
item.weight = weight;
|
||||
item.isDroppable = isDroppable;
|
||||
item.isStackable = isStackable;
|
||||
|
||||
// Сохраняем
|
||||
string path = $"Assets/Inventory/Items/{itemName}.asset";
|
||||
string folder = System.IO.Path.GetDirectoryName(path);
|
||||
if (!System.IO.Directory.Exists(folder))
|
||||
{
|
||||
System.IO.Directory.CreateDirectory(folder);
|
||||
}
|
||||
|
||||
AssetDatabase.CreateAsset(item, path);
|
||||
AssetDatabase.SaveAssets();
|
||||
|
||||
Selection.activeObject = item;
|
||||
Debug.Log($"[ItemBuilder] Создан: {itemName}");
|
||||
}
|
||||
|
||||
void CreateWorldItem()
|
||||
{
|
||||
if (modelPrefab == null)
|
||||
{
|
||||
// Создаём простой визуал
|
||||
var itemGO = new GameObject(itemName);
|
||||
var visual = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||||
visual.name = "Visual";
|
||||
visual.transform.SetParent(itemGO.transform);
|
||||
visual.transform.localPosition = Vector3.zero;
|
||||
visual.transform.localScale = Vector3.one * 0.3f;
|
||||
DestroyImmediate(visual.GetComponent<Collider>());
|
||||
|
||||
var worldItem = itemGO.AddComponent<WorldItem>();
|
||||
var col = itemGO.AddComponent<SphereCollider>();
|
||||
col.radius = 0.5f;
|
||||
col.isTrigger = true;
|
||||
|
||||
itemGO.transform.position = Vector3.zero;
|
||||
Selection.activeGameObject = itemGO;
|
||||
}
|
||||
else
|
||||
{
|
||||
var itemGO = Instantiate(modelPrefab);
|
||||
itemGO.name = itemName;
|
||||
itemGO.AddComponent<WorldItem>();
|
||||
itemGO.transform.position = Vector3.zero;
|
||||
Selection.activeGameObject = itemGO;
|
||||
}
|
||||
|
||||
Debug.Log($"[ItemBuilder] Создан WorldItem: {itemName}");
|
||||
}
|
||||
|
||||
void CreateItemPrefab()
|
||||
{
|
||||
string path = EditorUtility.SaveFilePanelInProject(
|
||||
"Сохранить префаб",
|
||||
itemName,
|
||||
"prefab",
|
||||
"Выберите место");
|
||||
|
||||
if (string.IsNullOrEmpty(path)) return;
|
||||
|
||||
GameObject prefab;
|
||||
if (modelPrefab != null)
|
||||
{
|
||||
prefab = Instantiate(modelPrefab);
|
||||
prefab.name = itemName;
|
||||
}
|
||||
else
|
||||
{
|
||||
prefab = new GameObject(itemName);
|
||||
var visual = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||||
visual.name = "Visual";
|
||||
visual.transform.SetParent(prefab.transform);
|
||||
visual.transform.localPosition = Vector3.zero;
|
||||
visual.transform.localScale = Vector3.one * 0.3f;
|
||||
DestroyImmediate(visual.GetComponent<Collider>());
|
||||
}
|
||||
|
||||
prefab.AddComponent<WorldItem>();
|
||||
|
||||
var col = prefab.GetComponent<Collider>();
|
||||
if (col == null)
|
||||
{
|
||||
var sphere = prefab.AddComponent<SphereCollider>();
|
||||
sphere.radius = 0.5f;
|
||||
sphere.isTrigger = true;
|
||||
}
|
||||
|
||||
GameObject savedPrefab = PrefabUtility.SaveAsPrefabAsset(prefab, path);
|
||||
DestroyImmediate(prefab);
|
||||
|
||||
Selection.activeObject = savedPrefab;
|
||||
Debug.Log($"[ItemBuilder] Префаб сохранён: {path}");
|
||||
}
|
||||
|
||||
Sprite CreatePlaceholderIcon()
|
||||
{
|
||||
var tex = new Texture2D(64, 64);
|
||||
var colors = new Color[64 * 64];
|
||||
for (int i = 0; i < colors.Length; i++)
|
||||
{
|
||||
colors[i] = previewColor;
|
||||
}
|
||||
tex.SetPixels(colors);
|
||||
tex.Apply();
|
||||
return Sprite.Create(tex, new Rect(0, 0, 64, 64), new Vector2(0.5f, 0.5f));
|
||||
}
|
||||
}
|
||||
2
Assets/Inventory/Scripts/ItemBuilderTool.cs.meta
Normal file
2
Assets/Inventory/Scripts/ItemBuilderTool.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5b29b6b4c7cab91429e66ed5012b12d7
|
||||
53
Assets/Inventory/Scripts/ItemData.cs
Normal file
53
Assets/Inventory/Scripts/ItemData.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using UnityEngine;
|
||||
|
||||
public enum ItemType
|
||||
{
|
||||
Block,
|
||||
Weapon,
|
||||
Armor,
|
||||
Consumable,
|
||||
Tool,
|
||||
Material
|
||||
}
|
||||
|
||||
[CreateAssetMenu(fileName = "NewItem", menuName = "Inventory/Item")]
|
||||
public class ItemData : ScriptableObject
|
||||
{
|
||||
public string id;
|
||||
public string itemName;
|
||||
public string description;
|
||||
public ItemType type;
|
||||
public GameObject modelPrefab;
|
||||
public Sprite icon;
|
||||
public int maxStack = 64;
|
||||
public bool isCraftable;
|
||||
public CraftingRecipe craftingRecipe;
|
||||
|
||||
[Header("Item Properties")]
|
||||
public float weight = 1f;
|
||||
public int value = 1;
|
||||
public bool isDroppable = true;
|
||||
public bool isStackable = true;
|
||||
|
||||
[System.Serializable]
|
||||
public class CraftingRecipe
|
||||
{
|
||||
public string[] ingredients;
|
||||
public int[] amounts;
|
||||
public string resultId;
|
||||
public int resultAmount = 1;
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
if (string.IsNullOrEmpty(id))
|
||||
{
|
||||
id = System.Guid.NewGuid().ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public static ItemData FromJson(string json) => JsonUtility.FromJson<ItemData>(json);
|
||||
public string ToJson() => JsonUtility.ToJson(this, true);
|
||||
|
||||
public bool CanStackWith(ItemData other) => other != null && id == other.id && isStackable;
|
||||
}
|
||||
2
Assets/Inventory/Scripts/ItemData.cs.meta
Normal file
2
Assets/Inventory/Scripts/ItemData.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5741b63764436354ebad192c9b71f06c
|
||||
262
Assets/Inventory/Scripts/ItemGenerator.cs
Normal file
262
Assets/Inventory/Scripts/ItemGenerator.cs
Normal file
@@ -0,0 +1,262 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
public class ItemGenerator : MonoBehaviour
|
||||
{
|
||||
[Header("Item Template")]
|
||||
public string itemId = "";
|
||||
public string itemName = "";
|
||||
public string description = "";
|
||||
public ItemType itemType = ItemType.Material;
|
||||
public Sprite icon;
|
||||
public GameObject modelPrefab;
|
||||
public int maxStack = 64;
|
||||
public bool isCraftable;
|
||||
|
||||
[Header("Crafting (if craftable)")]
|
||||
public string[] craftIngredients;
|
||||
public int[] craftAmounts;
|
||||
public string craftResultId;
|
||||
public int craftResultAmount = 1;
|
||||
|
||||
public ItemData GenerateItemData()
|
||||
{
|
||||
if (string.IsNullOrEmpty(itemId))
|
||||
{
|
||||
itemId = System.Guid.NewGuid().ToString();
|
||||
}
|
||||
|
||||
var itemData = ScriptableObject.CreateInstance<ItemData>();
|
||||
itemData.id = itemId;
|
||||
itemData.itemName = itemName;
|
||||
itemData.description = description;
|
||||
itemData.type = itemType;
|
||||
itemData.modelPrefab = modelPrefab;
|
||||
itemData.icon = icon;
|
||||
itemData.maxStack = maxStack;
|
||||
itemData.isCraftable = isCraftable;
|
||||
|
||||
if (isCraftable && craftIngredients != null && craftIngredients.Length > 0)
|
||||
{
|
||||
itemData.craftingRecipe = new ItemData.CraftingRecipe
|
||||
{
|
||||
ingredients = craftIngredients,
|
||||
amounts = craftAmounts,
|
||||
resultId = craftResultId,
|
||||
resultAmount = craftResultAmount
|
||||
};
|
||||
}
|
||||
|
||||
return itemData;
|
||||
}
|
||||
|
||||
public static List<ItemData> GenerateAll(List<ItemGenerator> generators)
|
||||
{
|
||||
var items = new List<ItemData>();
|
||||
foreach (var generator in generators)
|
||||
{
|
||||
if (generator != null)
|
||||
{
|
||||
items.Add(generator.GenerateItemData());
|
||||
}
|
||||
}
|
||||
return items;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Предмет в мире - подбирается игроком
|
||||
/// </summary>
|
||||
public class WorldItem : MonoBehaviour
|
||||
{
|
||||
public ItemData itemData;
|
||||
public int amount = 1;
|
||||
|
||||
[Header("Settings")]
|
||||
public float pickupDelay = 0f;
|
||||
public bool useFactory = true;
|
||||
|
||||
private bool _canPickup;
|
||||
|
||||
public void Setup(ItemData data, int count)
|
||||
{
|
||||
itemData = data;
|
||||
amount = count;
|
||||
|
||||
if (data.modelPrefab != null)
|
||||
{
|
||||
var model = Instantiate(data.modelPrefab, transform);
|
||||
model.transform.localPosition = Vector3.zero;
|
||||
}
|
||||
|
||||
// Задержка перед подбором
|
||||
if (pickupDelay > 0)
|
||||
Invoke(nameof(EnablePickup), pickupDelay);
|
||||
else
|
||||
_canPickup = true;
|
||||
}
|
||||
|
||||
private void EnablePickup() => _canPickup = true;
|
||||
|
||||
void OnTriggerEnter(Collider other)
|
||||
{
|
||||
TryPickup(other);
|
||||
}
|
||||
|
||||
void OnControllerColliderHit(ControllerColliderHit hit)
|
||||
{
|
||||
TryPickup(hit.controller);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подобрать предмет вручную (по кнопке)
|
||||
/// </summary>
|
||||
public bool TryPickupByButton()
|
||||
{
|
||||
Debug.Log($"[TryPickup] _canPickup={_canPickup}, itemData={itemData?.itemName}, amount={amount}, Instance={InventoryManager.Instance != null}");
|
||||
|
||||
if (!_canPickup)
|
||||
{
|
||||
Debug.LogWarning("[TryPickup] Cannot pickup - not ready yet");
|
||||
return false;
|
||||
}
|
||||
if (itemData == null)
|
||||
{
|
||||
Debug.LogWarning("[TryPickup] itemData is null!");
|
||||
return false;
|
||||
}
|
||||
if (InventoryManager.Instance == null)
|
||||
{
|
||||
Debug.LogWarning("[TryPickup] InventoryManager.Instance is null!");
|
||||
return false;
|
||||
}
|
||||
|
||||
int remaining = InventoryManager.Instance.AddItem(itemData, amount);
|
||||
Debug.Log($"[TryPickup] AddItem returned remaining={remaining}");
|
||||
|
||||
if (remaining <= 0)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
amount = remaining;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void TryPickup(Collider other)
|
||||
{
|
||||
if (!_canPickup) return;
|
||||
if (other == null) return;
|
||||
if (!other.CompareTag("Player")) return;
|
||||
|
||||
if (useFactory && InventoryItemFactory.Instance != null)
|
||||
{
|
||||
InventoryItemFactory.Instance.PickupItem(this, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback - старый способ
|
||||
int remaining = InventoryManager.Instance.AddItem(itemData, amount);
|
||||
if (remaining <= 0)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
amount = remaining;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Выбросить предмет с силой
|
||||
/// </summary>
|
||||
public void Throw(Vector3 velocity)
|
||||
{
|
||||
var rb = GetComponent<Rigidbody>();
|
||||
if (rb == null) rb = gameObject.AddComponent<Rigidbody>();
|
||||
rb.linearVelocity = velocity;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Точка спавна предмета
|
||||
/// </summary>
|
||||
public class ItemSpawner : MonoBehaviour
|
||||
{
|
||||
public ItemData item;
|
||||
public int amount = 1;
|
||||
public float despawnTime = 300f;
|
||||
public bool spawnOnStart = false;
|
||||
public bool useFactory = true;
|
||||
|
||||
public void Setup(ItemData itemData, int itemAmount, float despawn)
|
||||
{
|
||||
item = itemData;
|
||||
amount = itemAmount;
|
||||
despawnTime = despawn;
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
if (spawnOnStart) Spawn();
|
||||
}
|
||||
|
||||
public void Spawn()
|
||||
{
|
||||
if (useFactory && InventoryItemFactory.Instance != null)
|
||||
{
|
||||
var worldItem = InventoryItemFactory.Instance.CreateWorldItem(item, amount, transform.position);
|
||||
if (worldItem != null && despawnTime > 0)
|
||||
{
|
||||
Destroy(worldItem.gameObject, despawnTime);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback - старый способ
|
||||
var prefab = Resources.Load<GameObject>("Prefabs/WorldItem");
|
||||
if (prefab != null)
|
||||
{
|
||||
var worldItem = Instantiate(prefab, transform.position, Quaternion.identity).GetComponent<WorldItem>();
|
||||
worldItem.Setup(item, amount);
|
||||
Destroy(worldItem.gameObject, despawnTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Despawn()
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[CustomEditor(typeof(ItemGenerator))]
|
||||
public class ItemGeneratorEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
base.OnInspectorGUI();
|
||||
|
||||
if (GUILayout.Button("Generate ItemData"))
|
||||
{
|
||||
var generator = (ItemGenerator)target;
|
||||
var itemData = generator.GenerateItemData();
|
||||
|
||||
string path = $"Assets/Inventory/Items/{itemData.itemName}.asset";
|
||||
AssetDatabase.CreateAsset(itemData, path);
|
||||
AssetDatabase.SaveAssets();
|
||||
|
||||
Debug.Log($"Created item: {itemData.itemName} at {path}");
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
2
Assets/Inventory/Scripts/ItemGenerator.cs.meta
Normal file
2
Assets/Inventory/Scripts/ItemGenerator.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 912124eba177b3d4c8f4890d9b408b13
|
||||
286
Assets/Inventory/Scripts/Slot.cs
Normal file
286
Assets/Inventory/Scripts/Slot.cs
Normal file
@@ -0,0 +1,286 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
|
||||
/// <summary>
|
||||
/// Слот инвентаря - отображает предмет и его количество
|
||||
/// </summary>
|
||||
public class Slot : MonoBehaviour
|
||||
{
|
||||
public int slotIndex;
|
||||
public ItemData item;
|
||||
public int amount;
|
||||
|
||||
[Header("UI References")]
|
||||
public Image iconImage;
|
||||
public TextMeshProUGUI amountText;
|
||||
public GameObject amountPanel;
|
||||
public Image slotBackground;
|
||||
|
||||
[Header("Visual Settings")]
|
||||
[SerializeField] private Color emptySlotColor = new Color(0.2f, 0.2f, 0.2f, 0.5f);
|
||||
[SerializeField] private Color filledSlotColor = new Color(0.3f, 0.3f, 0.3f, 0.9f);
|
||||
[SerializeField] private Color hoverColor = new Color(0.5f, 0.5f, 0.5f, 1f);
|
||||
[SerializeField] private Color selectedColor = new Color(0.4f, 0.6f, 0.9f, 1f);
|
||||
|
||||
[Header("Drag & Drop")]
|
||||
[SerializeField] private bool allowDrag = true;
|
||||
|
||||
public bool IsEmpty => item == null || amount <= 0;
|
||||
public bool HasItem => !IsEmpty;
|
||||
|
||||
// События для внешних подписчиков
|
||||
public System.Action<Slot> OnSlotClicked;
|
||||
public System.Action<Slot> OnSlotRightClicked;
|
||||
public System.Action<Slot> OnSlotHovered;
|
||||
public System.Action<Slot> OnSlotDragStart;
|
||||
|
||||
private bool _isSelected;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
// Автоматическое получение компонентов если не назначены
|
||||
if (iconImage == null)
|
||||
iconImage = transform.Find("Icon")?.GetComponent<Image>();
|
||||
|
||||
if (amountText == null)
|
||||
amountText = transform.Find("AmountPanel/Text")?.GetComponent<TextMeshProUGUI>();
|
||||
|
||||
if (amountPanel == null)
|
||||
amountPanel = transform.Find("AmountPanel")?.gameObject;
|
||||
|
||||
if (slotBackground == null)
|
||||
slotBackground = GetComponent<Image>();
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
UpdateSlotUI();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обновить визуальное отображение слота
|
||||
/// </summary>
|
||||
public void UpdateSlotUI()
|
||||
{
|
||||
if (IsEmpty)
|
||||
{
|
||||
ClearVisuals();
|
||||
return;
|
||||
}
|
||||
|
||||
// Иконка
|
||||
if (item.icon != null)
|
||||
{
|
||||
iconImage.sprite = item.icon;
|
||||
iconImage.enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
iconImage.enabled = false;
|
||||
}
|
||||
|
||||
// Количество
|
||||
if (amount > 1)
|
||||
{
|
||||
amountText.text = amount.ToString();
|
||||
amountPanel.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
amountPanel.SetActive(false);
|
||||
}
|
||||
|
||||
// Цвет фона
|
||||
if (slotBackground != null)
|
||||
slotBackground.color = filledSlotColor;
|
||||
}
|
||||
|
||||
private void ClearVisuals()
|
||||
{
|
||||
iconImage.sprite = null;
|
||||
iconImage.enabled = false;
|
||||
amountPanel?.SetActive(false);
|
||||
|
||||
if (slotBackground != null)
|
||||
slotBackground.color = emptySlotColor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Очистить слот
|
||||
/// </summary>
|
||||
public void Clear()
|
||||
{
|
||||
item = null;
|
||||
amount = 0;
|
||||
UpdateSlotUI();
|
||||
|
||||
// Уведомляем менеджер
|
||||
if (InventoryManager.Instance != null)
|
||||
{
|
||||
InventoryManager.Instance.OnSlotCleared(slotIndex);
|
||||
}
|
||||
|
||||
// Вызываем событие
|
||||
InventoryEvents.Instance?.InvokeSlotChanged(slotIndex, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Установить предмет в слот
|
||||
/// </summary>
|
||||
public void SetItem(ItemData newItem, int newAmount)
|
||||
{
|
||||
item = newItem;
|
||||
amount = newAmount;
|
||||
UpdateSlotUI();
|
||||
|
||||
// Вызываем событие изменения
|
||||
InventoryEvents.Instance?.InvokeSlotChanged(slotIndex, item?.id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавить предметы в слот
|
||||
/// </summary>
|
||||
/// <returns>Количество не поместившихся предметов</returns>
|
||||
public int AddItems(ItemData newItem, int addAmount)
|
||||
{
|
||||
if (item == null)
|
||||
{
|
||||
// Пустой слот - просто кладём
|
||||
item = newItem;
|
||||
amount = Mathf.Min(addAmount, newItem.maxStack);
|
||||
UpdateSlotUI();
|
||||
|
||||
// Событие добавления
|
||||
InventoryEvents.Instance?.InvokeItemAdded(item.id, amount);
|
||||
InventoryEvents.Instance?.InvokeSlotChanged(slotIndex, item.id);
|
||||
|
||||
return addAmount - amount;
|
||||
}
|
||||
|
||||
if (item.id != newItem.id)
|
||||
{
|
||||
// Другой предмет - нельзя добавить
|
||||
return addAmount;
|
||||
}
|
||||
|
||||
// Тот же предмет - пытаемся добавить в стек
|
||||
int space = item.maxStack - amount;
|
||||
if (space <= 0) return addAmount;
|
||||
|
||||
int toAdd = Mathf.Min(space, addAmount);
|
||||
amount += toAdd;
|
||||
UpdateSlotUI();
|
||||
|
||||
// Событие изменения
|
||||
InventoryEvents.Instance?.InvokeItemCountChanged(item.id, amount);
|
||||
InventoryEvents.Instance?.InvokeSlotChanged(slotIndex, item.id);
|
||||
|
||||
return addAmount - toAdd;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Взять часть предметов из слота
|
||||
/// </summary>
|
||||
/// <returns>(предмет, взятое количество)</returns>
|
||||
public (ItemData, int) TakeItems(int takeAmount)
|
||||
{
|
||||
if (IsEmpty) return (null, 0);
|
||||
|
||||
int actualTake = Mathf.Min(takeAmount, amount);
|
||||
amount -= actualTake;
|
||||
|
||||
ItemData resultItem = item;
|
||||
|
||||
if (amount <= 0)
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateSlotUI();
|
||||
// Событие изменения количества
|
||||
InventoryEvents.Instance?.InvokeItemCountChanged(item.id, amount);
|
||||
}
|
||||
|
||||
// Событие удаления
|
||||
InventoryEvents.Instance?.InvokeItemRemoved(resultItem.id, actualTake);
|
||||
|
||||
return (resultItem, actualTake);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Взять все предметы из слота
|
||||
/// </summary>
|
||||
public (ItemData, int) TakeAll()
|
||||
{
|
||||
return TakeItems(amount);
|
||||
}
|
||||
|
||||
// ==================== UI Events ====================
|
||||
|
||||
void OnMouseEnter()
|
||||
{
|
||||
if (slotBackground != null && !_isSelected)
|
||||
slotBackground.color = hoverColor;
|
||||
|
||||
OnSlotHovered?.Invoke(this);
|
||||
}
|
||||
|
||||
void OnMouseExit()
|
||||
{
|
||||
if (slotBackground != null && !_isSelected)
|
||||
slotBackground.color = IsEmpty ? emptySlotColor : filledSlotColor;
|
||||
}
|
||||
|
||||
void OnMouseDown()
|
||||
{
|
||||
if (Input.GetMouseButton(0))
|
||||
{
|
||||
OnSlotClicked?.Invoke(this);
|
||||
|
||||
if (allowDrag)
|
||||
{
|
||||
OnSlotDragStart?.Invoke(this);
|
||||
}
|
||||
}
|
||||
else if (Input.GetMouseButton(1))
|
||||
{
|
||||
OnSlotRightClicked?.Invoke(this);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Установить состояние выделения слота
|
||||
/// </summary>
|
||||
public void SetSelected(bool selected)
|
||||
{
|
||||
_isSelected = selected;
|
||||
if (slotBackground != null)
|
||||
{
|
||||
slotBackground.color = selected ? selectedColor :
|
||||
(IsEmpty ? emptySlotColor : filledSlotColor);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поменять содержимое с другим слотом
|
||||
/// </summary>
|
||||
public void SwapWith(Slot other)
|
||||
{
|
||||
if (other == null || other == this) return;
|
||||
|
||||
var tempItem = this.item;
|
||||
var tempAmount = this.amount;
|
||||
|
||||
this.SetItem(other.item, other.amount);
|
||||
other.SetItem(tempItem, tempAmount);
|
||||
}
|
||||
|
||||
// ==================== Getters ====================
|
||||
|
||||
public ItemData GetItem() => item;
|
||||
public int GetAmount() => amount;
|
||||
public string GetItemId() => item?.id;
|
||||
public bool IsSelected() => _isSelected;
|
||||
}
|
||||
2
Assets/Inventory/Scripts/Slot.cs.meta
Normal file
2
Assets/Inventory/Scripts/Slot.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 700406249e03c6646b1d535e57851f30
|
||||
8
Assets/Inventory/UI.meta
Normal file
8
Assets/Inventory/UI.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d550759647d40c24db6d25005afeac67
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Items.meta
Normal file
8
Assets/Items.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aa34ca36a91fe1242816d2f68f8d9f0a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
8
Assets/TextMesh Pro.meta
Normal file
8
Assets/TextMesh Pro.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f54d1bd14bd3ca042bd867b519fee8cc
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/TextMesh Pro/Examples & Extras.meta
Normal file
8
Assets/TextMesh Pro/Examples & Extras.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce51c8e33b734b4db6086586558c53a3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/TextMesh Pro/Examples & Extras/Fonts.meta
Normal file
8
Assets/TextMesh Pro/Examples & Extras/Fonts.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b63e0053080646b9819789bf3bf9fa17
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
93
Assets/TextMesh Pro/Examples & Extras/Fonts/Anton OFL.txt
Normal file
93
Assets/TextMesh Pro/Examples & Extras/Fonts/Anton OFL.txt
Normal file
@@ -0,0 +1,93 @@
|
||||
Copyright (c) 2011, Vernon Adams (vern@newtypography.co.uk),
|
||||
with Reserved Font Name Anton.
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 73a79399807f4e8388c2cbb5494681ca
|
||||
timeCreated: 1484172033
|
||||
licenseType: Pro
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Anton.ttf
Normal file
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Anton.ttf
Normal file
Binary file not shown.
19
Assets/TextMesh Pro/Examples & Extras/Fonts/Anton.ttf.meta
Normal file
19
Assets/TextMesh Pro/Examples & Extras/Fonts/Anton.ttf.meta
Normal file
@@ -0,0 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 997a43b767814dd0a7642ec9b78cba41
|
||||
timeCreated: 1484172033
|
||||
licenseType: Pro
|
||||
TrueTypeFontImporter:
|
||||
serializedVersion: 2
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 1
|
||||
characterPadding: 0
|
||||
includeFontData: 1
|
||||
use2xBehaviour: 0
|
||||
fontNames: []
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,93 @@
|
||||
Copyright (c) 2010 by vernon adams (vern@newtypography.co.uk),
|
||||
with Reserved Font Name Bangers.
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: efe0bf4ac872451e91612d1ae593f480
|
||||
timeCreated: 1484171296
|
||||
licenseType: Pro
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Bangers.ttf
Normal file
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Bangers.ttf
Normal file
Binary file not shown.
19
Assets/TextMesh Pro/Examples & Extras/Fonts/Bangers.ttf.meta
Normal file
19
Assets/TextMesh Pro/Examples & Extras/Fonts/Bangers.ttf.meta
Normal file
@@ -0,0 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5dd49b3eacc540408c98eee0de38e0f1
|
||||
timeCreated: 1484171297
|
||||
licenseType: Pro
|
||||
TrueTypeFontImporter:
|
||||
serializedVersion: 2
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 1
|
||||
characterPadding: 0
|
||||
includeFontData: 1
|
||||
use2xBehaviour: 0
|
||||
fontNames: []
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,22 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8a2b9e2a607dd2143b58c44bc32410b4
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontName: Electronic Highway Sign
|
||||
fontNames:
|
||||
- Electronic Highway Sign
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,92 @@
|
||||
Copyright (c) 2011-2012, Vernon Adams (vern@newtypography.co.uk), with Reserved Font Names 'Oswald'
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d2cf87a8a7a94aa8b80dff1c807c1178
|
||||
timeCreated: 1484171296
|
||||
licenseType: Pro
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Oswald-Bold.ttf
Normal file
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Oswald-Bold.ttf
Normal file
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c9f6d0e7bc8541498c9a4799ba184ede
|
||||
timeCreated: 1484171297
|
||||
licenseType: Pro
|
||||
TrueTypeFontImporter:
|
||||
serializedVersion: 2
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 1
|
||||
characterPadding: 0
|
||||
includeFontData: 1
|
||||
use2xBehaviour: 0
|
||||
fontNames: []
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f28c334d44214474d9702d3ad79ecb0a
|
||||
timeCreated: 1484171296
|
||||
licenseType: Pro
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,3 @@
|
||||
This font is licensed under the Apache License, Version 2.0.
|
||||
|
||||
See the following link for full licensing terms https://www.apache.org/licenses/LICENSE-2.0
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f0303f887b8fa7243a51432c478ff2f3
|
||||
timeCreated: 1484171296
|
||||
licenseType: Pro
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Roboto-Bold.ttf
Normal file
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Roboto-Bold.ttf
Normal file
Binary file not shown.
@@ -0,0 +1,22 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4beb055f07aaff244873dec698d0363e
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontName: Roboto
|
||||
fontNames:
|
||||
- Roboto
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
92
Assets/TextMesh Pro/Examples & Extras/Fonts/Unity - OFL.txt
Normal file
92
Assets/TextMesh Pro/Examples & Extras/Fonts/Unity - OFL.txt
Normal file
@@ -0,0 +1,92 @@
|
||||
Copyright (c) 2020-2021, Unity, with Reserved Font Names 'Unity'
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0251f66ebc602a944b35bccd13be2738
|
||||
timeCreated: 1484171296
|
||||
licenseType: Pro
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Unity.ttf
Normal file
BIN
Assets/TextMesh Pro/Examples & Extras/Fonts/Unity.ttf
Normal file
Binary file not shown.
21
Assets/TextMesh Pro/Examples & Extras/Fonts/Unity.ttf.meta
Normal file
21
Assets/TextMesh Pro/Examples & Extras/Fonts/Unity.ttf.meta
Normal file
@@ -0,0 +1,21 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f4eec857a4fdf2f43be0e9f3d1a984e7
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontNames:
|
||||
- Unity
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
9
Assets/TextMesh Pro/Examples & Extras/Materials.meta
Normal file
9
Assets/TextMesh Pro/Examples & Extras/Materials.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5808953df7a24274a851aa6dee52d30e
|
||||
folderAsset: yes
|
||||
timeCreated: 1436068007
|
||||
licenseType: Pro
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,84 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Crate - Surface Shader Scene
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords: _EMISSION _NORMALMAP _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
||||
m_LightmapFlags: 1
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 2800000, guid: 8878a782f4334ecbbcf683b3ac780966, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 2800000, guid: 602cb87b6a29443b8636370ea0751574, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _SpecGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- _BumpScale: 0.5
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _EmissionScaleUI: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.233
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 1
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 0.712}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
|
||||
- _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
|
||||
@@ -0,0 +1,6 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e6b9b44320f4448d9d5e0ee634259966
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
138
Assets/TextMesh Pro/Examples & Extras/Materials/Crate - URP.mat
Normal file
138
Assets/TextMesh Pro/Examples & Extras/Materials/Crate - URP.mat
Normal file
@@ -0,0 +1,138 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Crate - URP
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords:
|
||||
- _EMISSION
|
||||
- _NORMALMAP
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 1
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BaseMap:
|
||||
m_Texture: {fileID: 2800000, guid: 602cb87b6a29443b8636370ea0751574, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 2800000, guid: 8878a782f4334ecbbcf683b3ac780966, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 2800000, guid: 602cb87b6a29443b8636370ea0751574, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _SpecGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 1
|
||||
- _BumpScale: 0.5
|
||||
- _ClearCoatMask: 0
|
||||
- _ClearCoatSmoothness: 0
|
||||
- _Cull: 2
|
||||
- _Cutoff: 0.5
|
||||
- _DetailAlbedoMapScale: 1
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EnvironmentReflections: 1
|
||||
- _GlossMapScale: 0
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 0
|
||||
- _Metallic: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.005
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _Smoothness: 1
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _WorkflowMode: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 0.7137255}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 0.7137255}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!114 &7626160506639672020
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3b5cc91c3bf8cf74391252247f52fb59
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,207 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: Ground - Logo Scene
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords: _NORMALMAP
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
data:
|
||||
first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 1cdc5b506b1a4a33a53c30669ced1f51, type: 3}
|
||||
m_Scale: {x: 20, y: 20}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _BumpMap
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 8b8c8a10edf94ddc8cc4cc4fcd5696a9, type: 3}
|
||||
m_Scale: {x: 30, y: 50}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DetailNormalMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _ParallaxMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _OcclusionMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _EmissionMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DetailMask
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DetailAlbedoMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _MetallicGlossMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _BorderTex
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _FillTex
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _EdgeTex
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
data:
|
||||
first:
|
||||
name: _SrcBlend
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _DstBlend
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Radius
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Cutoff
|
||||
second: .5
|
||||
data:
|
||||
first:
|
||||
name: _Shininess
|
||||
second: .220354751
|
||||
data:
|
||||
first:
|
||||
name: _Parallax
|
||||
second: .0199999996
|
||||
data:
|
||||
first:
|
||||
name: _ZWrite
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _Glossiness
|
||||
second: .344000012
|
||||
data:
|
||||
first:
|
||||
name: _BumpScale
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _OcclusionStrength
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _DetailNormalMapScale
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _UVSec
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Mode
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Metallic
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _EmissionScaleUI
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _EdgeSoftness
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _DiffusePower
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _Border
|
||||
second: .0214285739
|
||||
data:
|
||||
first:
|
||||
name: _Size
|
||||
second: .100000001
|
||||
data:
|
||||
first:
|
||||
name: _EdgeWidth
|
||||
second: 0
|
||||
m_Colors:
|
||||
data:
|
||||
first:
|
||||
name: _EmissionColor
|
||||
second: {r: 0, g: 0, b: 0, a: 0}
|
||||
data:
|
||||
first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
data:
|
||||
first:
|
||||
name: _SpecColor
|
||||
second: {r: .5, g: .5, b: .5, a: 1}
|
||||
data:
|
||||
first:
|
||||
name: _EmissionColorUI
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
data:
|
||||
first:
|
||||
name: _FaceColor
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
data:
|
||||
first:
|
||||
name: _BorderColor
|
||||
second: {r: 0, g: 0, b: 0, a: 1}
|
||||
@@ -0,0 +1,6 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c719e38f25a9480abd2480ab621a2949
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,112 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Ground - Surface Shader Scene
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords: _EMISSION
|
||||
m_LightmapFlags: 1
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BorderTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 2800000, guid: c45cd05946364f32aba704f0853a975b, type: 3}
|
||||
m_Scale: {x: 10, y: 10}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EdgeTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _FillTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 2800000, guid: 85ac55597b97403c82fc6601a93cf241, type: 3}
|
||||
m_Scale: {x: 5, y: 5}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- _Border: 0.021428574
|
||||
- _BumpScale: 0.25
|
||||
- _ColorMask: 15
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DiffusePower: 1
|
||||
- _DstBlend: 0
|
||||
- _EdgeSoftness: 0
|
||||
- _EdgeWidth: 0
|
||||
- _EmissionScaleUI: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.348
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _Radius: 0
|
||||
- _Shininess: 0.24302611
|
||||
- _Size: 0.1
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _Strength: 0.2
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BorderColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 0.8784314}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
|
||||
- _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _SpecColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
@@ -0,0 +1,6 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aadd5a709a48466c887296bb5b1b8110
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
173
Assets/TextMesh Pro/Examples & Extras/Materials/Ground - URP.mat
Normal file
173
Assets/TextMesh Pro/Examples & Extras/Materials/Ground - URP.mat
Normal file
@@ -0,0 +1,173 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Ground - URP
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords:
|
||||
- _EMISSION
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 1
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BaseMap:
|
||||
m_Texture: {fileID: 2800000, guid: 85ac55597b97403c82fc6601a93cf241, type: 3}
|
||||
m_Scale: {x: 5, y: 5}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _BorderTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 2800000, guid: c45cd05946364f32aba704f0853a975b, type: 3}
|
||||
m_Scale: {x: 10, y: 10}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EdgeTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _FillTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 2800000, guid: 85ac55597b97403c82fc6601a93cf241, type: 3}
|
||||
m_Scale: {x: 5, y: 5}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _SpecGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 1
|
||||
- _Border: 0.021428574
|
||||
- _BumpScale: 0.25
|
||||
- _ClearCoatMask: 0
|
||||
- _ClearCoatSmoothness: 0
|
||||
- _ColorMask: 15
|
||||
- _Cull: 2
|
||||
- _Cutoff: 0.5
|
||||
- _DetailAlbedoMapScale: 1
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DiffusePower: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EdgeSoftness: 0
|
||||
- _EdgeWidth: 0
|
||||
- _EmissionScaleUI: 0
|
||||
- _EnvironmentReflections: 1
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.348
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _QueueOffset: 0
|
||||
- _Radius: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _Shininess: 0.24302611
|
||||
- _Size: 0.1
|
||||
- _Smoothness: 0.348
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _Strength: 0.2
|
||||
- _Surface: 0
|
||||
- _UVSec: 0
|
||||
- _WorkflowMode: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _BorderColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
|
||||
- _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _SpecColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!114 &8510939975645199906
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 71529b88994c1a341b22bc57c038674a
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,127 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: Small Crate_diffuse
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords: _EMISSION _NORMALMAP
|
||||
m_LightmapFlags: 1
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _BumpMap
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 8878a782f4334ecbbcf683b3ac780966, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _DetailAlbedoMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _DetailMask
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _DetailNormalMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _EmissionMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 602cb87b6a29443b8636370ea0751574, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _MetallicGlossMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _OcclusionMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _ParallaxMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: _BumpScale
|
||||
second: 1
|
||||
- first:
|
||||
name: _Cutoff
|
||||
second: 0.5
|
||||
- first:
|
||||
name: _DetailNormalMapScale
|
||||
second: 1
|
||||
- first:
|
||||
name: _DstBlend
|
||||
second: 0
|
||||
- first:
|
||||
name: _GlossMapScale
|
||||
second: 1
|
||||
- first:
|
||||
name: _Glossiness
|
||||
second: 0.5
|
||||
- first:
|
||||
name: _GlossyReflections
|
||||
second: 1
|
||||
- first:
|
||||
name: _Metallic
|
||||
second: 0
|
||||
- first:
|
||||
name: _Mode
|
||||
second: 0
|
||||
- first:
|
||||
name: _OcclusionStrength
|
||||
second: 1
|
||||
- first:
|
||||
name: _Parallax
|
||||
second: 0.02
|
||||
- first:
|
||||
name: _SmoothnessTextureChannel
|
||||
second: 0
|
||||
- first:
|
||||
name: _SpecularHighlights
|
||||
second: 1
|
||||
- first:
|
||||
name: _SrcBlend
|
||||
second: 1
|
||||
- first:
|
||||
name: _UVSec
|
||||
second: 0
|
||||
- first:
|
||||
name: _ZWrite
|
||||
second: 1
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
- first:
|
||||
name: _EmissionColor
|
||||
second: {r: 0, g: 0, b: 0, a: 1}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 22262639920f43d6be32430e4e58350d
|
||||
timeCreated: 1473643741
|
||||
licenseType: Pro
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
9
Assets/TextMesh Pro/Examples & Extras/Prefabs.meta
Normal file
9
Assets/TextMesh Pro/Examples & Extras/Prefabs.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5bff2544887143f5807c7d5059d07f79
|
||||
folderAsset: yes
|
||||
timeCreated: 1436068007
|
||||
licenseType: Pro
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
280
Assets/TextMesh Pro/Examples & Extras/Prefabs/Text Popup.prefab
Normal file
280
Assets/TextMesh Pro/Examples & Extras/Prefabs/Text Popup.prefab
Normal file
@@ -0,0 +1,280 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &121924
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 224: {fileID: 22414422}
|
||||
- 222: {fileID: 22260028}
|
||||
- 114: {fileID: 11487728}
|
||||
m_Layer: 0
|
||||
m_Name: TextMeshPro Text
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!1 &188050
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 224: {fileID: 22450954}
|
||||
- 222: {fileID: 22204918}
|
||||
- 114: {fileID: 11486278}
|
||||
- 114: {fileID: 11427010}
|
||||
- 114: {fileID: 11405862}
|
||||
- 225: {fileID: 22524478}
|
||||
m_Layer: 0
|
||||
m_Name: Text Popup
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &11405862
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 188050}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_HorizontalFit: 2
|
||||
m_VerticalFit: 2
|
||||
--- !u!114 &11427010
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 188050}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 10
|
||||
m_Right: 10
|
||||
m_Top: 10
|
||||
m_Bottom: 10
|
||||
m_ChildAlignment: 0
|
||||
m_Spacing: 0
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 1
|
||||
--- !u!114 &11486278
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 188050}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.10542818, g: 0.21589755, b: 0.47794116, a: 0.9411765}
|
||||
m_RaycastTarget: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
|
||||
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
|
||||
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
--- !u!114 &11487728
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 121924}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
|
||||
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
|
||||
m_text: Sample
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_outlineColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4278190080
|
||||
m_fontSize: 36
|
||||
m_fontSizeBase: 36
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_textAlignment: 514
|
||||
m_isAlignmentEnumConverted: 1
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_firstOverflowCharacterIndex: -1
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
m_isLinkedTextComponent: 0
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_ignoreRectMaskCulling: 0
|
||||
m_ignoreCulling: 1
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_firstVisibleCharacter: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_textInfo:
|
||||
textComponent: {fileID: 0}
|
||||
characterCount: 6
|
||||
spriteCount: 0
|
||||
spaceCount: 0
|
||||
wordCount: 1
|
||||
linkCount: 0
|
||||
lineCount: 1
|
||||
pageCount: 1
|
||||
materialCount: 1
|
||||
m_havePropertiesChanged: 1
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_spriteAnimator: {fileID: 0}
|
||||
m_isInputParsingRequired: 1
|
||||
m_inputSource: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_subTextObjects:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
m_baseMaterial: {fileID: 2100000, guid: 316f956b856b45c448987b5018ec3ef4, type: 2}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!222 &22204918
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 188050}
|
||||
--- !u!222 &22260028
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 121924}
|
||||
--- !u!224 &22414422
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 121924}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 22450954}
|
||||
m_RootOrder: 0
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!224 &22450954
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 188050}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children:
|
||||
- {fileID: 22414422}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!225 &22524478
|
||||
CanvasGroup:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 188050}
|
||||
m_Enabled: 1
|
||||
m_Alpha: 1
|
||||
m_Interactable: 0
|
||||
m_BlocksRaycasts: 0
|
||||
m_IgnoreParentGroups: 0
|
||||
--- !u!1001 &100100000
|
||||
Prefab:
|
||||
m_ObjectHideFlags: 1
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications: []
|
||||
m_RemovedComponents: []
|
||||
m_ParentPrefab: {fileID: 0}
|
||||
m_RootGameObject: {fileID: 188050}
|
||||
m_IsPrefabParent: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b06f0e6c1dfa4356ac918da1bb32c603
|
||||
timeCreated: 1435130987
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,219 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &100000
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 22495902}
|
||||
- component: {fileID: 3300000}
|
||||
- component: {fileID: 2300000}
|
||||
- component: {fileID: 11400000}
|
||||
- component: {fileID: 22227760}
|
||||
m_Layer: 0
|
||||
m_Name: TextMeshPro - Prefab 1
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!23 &2300000
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_Materials:
|
||||
- {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 0
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &3300000
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_Mesh: {fileID: 0}
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
|
||||
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
|
||||
m_text: Seems to be ok!
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_outlineColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4278190080
|
||||
m_fontSize: 36
|
||||
m_fontSizeBase: 36
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_textAlignment: 0
|
||||
m_isAlignmentEnumConverted: 0
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_firstOverflowCharacterIndex: -1
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
m_isLinkedTextComponent: 0
|
||||
m_isTextTruncated: 0
|
||||
m_enableKerning: 0
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 0
|
||||
m_isCullingEnabled: 0
|
||||
m_ignoreRectMaskCulling: 0
|
||||
m_ignoreCulling: 1
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0.3
|
||||
m_geometrySortingOrder: 0
|
||||
m_firstVisibleCharacter: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 0
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_textInfo:
|
||||
textComponent: {fileID: 11400000}
|
||||
characterCount: 15
|
||||
spriteCount: 0
|
||||
spaceCount: 3
|
||||
wordCount: 4
|
||||
linkCount: 0
|
||||
lineCount: 1
|
||||
pageCount: 1
|
||||
materialCount: 1
|
||||
m_havePropertiesChanged: 1
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_spriteAnimator: {fileID: 0}
|
||||
m_isInputParsingRequired: 1
|
||||
m_inputSource: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 2300000}
|
||||
m_subTextObjects:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
m_maskType: 0
|
||||
--- !u!222 &22227760
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
--- !u!224 &22495902
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: -4.87}
|
||||
m_SizeDelta: {x: 28.005241, y: 4.035484}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1001 &100100000
|
||||
Prefab:
|
||||
m_ObjectHideFlags: 1
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications: []
|
||||
m_RemovedComponents: []
|
||||
m_ParentPrefab: {fileID: 0}
|
||||
m_RootGameObject: {fileID: 100000}
|
||||
m_IsPrefabParent: 1
|
||||
@@ -0,0 +1,6 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a6e39ced0ea046bcb636c3f0b2e2a745
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,219 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &100000
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
serializedVersion: 5
|
||||
m_Component:
|
||||
- component: {fileID: 22478072}
|
||||
- component: {fileID: 3300000}
|
||||
- component: {fileID: 2300000}
|
||||
- component: {fileID: 11400000}
|
||||
- component: {fileID: 22224556}
|
||||
m_Layer: 0
|
||||
m_Name: TextMeshPro - Prefab 2
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!23 &2300000
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RenderingLayerMask: 4294967295
|
||||
m_Materials:
|
||||
- {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 0
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &3300000
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_Mesh: {fileID: 0}
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
|
||||
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
|
||||
m_text: Hello World!
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_outlineColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4278190080
|
||||
m_fontSize: 36
|
||||
m_fontSizeBase: 36
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_textAlignment: 0
|
||||
m_isAlignmentEnumConverted: 0
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_firstOverflowCharacterIndex: -1
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
m_isLinkedTextComponent: 0
|
||||
m_isTextTruncated: 0
|
||||
m_enableKerning: 0
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 0
|
||||
m_isCullingEnabled: 0
|
||||
m_ignoreRectMaskCulling: 0
|
||||
m_ignoreCulling: 1
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0.3
|
||||
m_geometrySortingOrder: 0
|
||||
m_firstVisibleCharacter: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 0
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_textInfo:
|
||||
textComponent: {fileID: 11400000}
|
||||
characterCount: 12
|
||||
spriteCount: 0
|
||||
spaceCount: 1
|
||||
wordCount: 2
|
||||
linkCount: 0
|
||||
lineCount: 1
|
||||
pageCount: 1
|
||||
materialCount: 1
|
||||
m_havePropertiesChanged: 1
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_spriteAnimator: {fileID: 0}
|
||||
m_isInputParsingRequired: 1
|
||||
m_inputSource: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 2300000}
|
||||
m_subTextObjects:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
m_maskType: 0
|
||||
--- !u!222 &22224556
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
--- !u!224 &22478072
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 1
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 100100000}
|
||||
m_GameObject: {fileID: 100000}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 4.48}
|
||||
m_SizeDelta: {x: 19.604034, y: 4.035484}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1001 &100100000
|
||||
Prefab:
|
||||
m_ObjectHideFlags: 1
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications: []
|
||||
m_RemovedComponents: []
|
||||
m_ParentPrefab: {fileID: 0}
|
||||
m_RootGameObject: {fileID: 100000}
|
||||
m_IsPrefabParent: 1
|
||||
@@ -0,0 +1,6 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fdad9d952ae84cafb74c63f2e694d042
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
9
Assets/TextMesh Pro/Examples & Extras/Resources.meta
Normal file
9
Assets/TextMesh Pro/Examples & Extras/Resources.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d6d3a169ad794942a21da6a552d62f6f
|
||||
folderAsset: yes
|
||||
timeCreated: 1436068007
|
||||
licenseType: Pro
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7f422cd1388b01047a58cd07c7a23d9d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,17 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 54d21f6ece3b46479f0c328f8c6007e0, type: 3}
|
||||
m_Name: Blue to Purple - Vertical
|
||||
m_EditorClassIdentifier:
|
||||
topLeft: {r: 0, g: 0.83448267, b: 1, a: 1}
|
||||
topRight: {r: 0.1544118, g: 0.5801215, b: 1, a: 1}
|
||||
bottomLeft: {r: 0.49168324, g: 0, b: 0.7058823, a: 1}
|
||||
bottomRight: {r: 0.4901961, g: 0, b: 0.7019608, a: 1}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 479a66fa4b094512a62b0a8e553ad95a
|
||||
timeCreated: 1468189245
|
||||
licenseType: Pro
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,17 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 54d21f6ece3b46479f0c328f8c6007e0, type: 3}
|
||||
m_Name: Dark to Light Green - Vertical
|
||||
m_EditorClassIdentifier:
|
||||
topLeft: {r: 0, g: .661764741, b: 0, a: 1}
|
||||
topRight: {r: 0, g: .573529422, b: .00224910071, a: 1}
|
||||
bottomLeft: {r: .525490224, g: 1, b: .490196109, a: 1}
|
||||
bottomRight: {r: .421999991, g: .992156923, b: .374000013, a: 1}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4c86a3366cd840348ebe8dc438570ee4
|
||||
timeCreated: 1468443381
|
||||
licenseType: Pro
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user