Add Example
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bf363b9517dae5d4a994e7ee161a4b01
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
namespace HalfDog.EasyInteractive
|
namespace HalfDog.EasyInteractive
|
||||||
{
|
{
|
||||||
@@ -24,10 +25,9 @@ namespace HalfDog.EasyInteractive
|
|||||||
if (_isEnter)
|
if (_isEnter)
|
||||||
{
|
{
|
||||||
_isEnter = false;
|
_isEnter = false;
|
||||||
OnExit(dragable, focusable);
|
OnExit();
|
||||||
_isExit = true;
|
_isExit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,8 +52,9 @@ namespace HalfDog.EasyInteractive
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 退出交互情景
|
/// 退出交互情景
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual void OnExit(IDragable subject, IFocusable target)
|
protected virtual void OnExit()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
protected virtual bool EndDrag=>Input.GetMouseButtonUp(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9d56e608b3c413c458b9b77deb091409
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -80,6 +80,25 @@ namespace HalfDog.EasyInteractive
|
|||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
|
//满足条件的InteractCase会被执行
|
||||||
|
//这里的满足条件指的是 交互操作与交互对象类型都要一致
|
||||||
|
IInteractCase activeCase = null;
|
||||||
|
for (int i = 0; i < _executingInteractCases.Count; i++)
|
||||||
|
{
|
||||||
|
if (_executingInteractCases[i].enable && _executingInteractCases[i].Execute(currentFocused, currentSelected, currentDraged))
|
||||||
|
{
|
||||||
|
activeCase = _executingInteractCases[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//如果当前激活的情景更改了,则把激活的情景放到列表最前方第一个进行处理
|
||||||
|
//这是为了在情景更改时首先执行激活情景的退出事件(如果有的话)
|
||||||
|
if (activeCase != null && activeCase != _currentActiveInteractCase)
|
||||||
|
{
|
||||||
|
_currentActiveInteractCase = activeCase;
|
||||||
|
_executingInteractCases.Remove(_currentActiveInteractCase);
|
||||||
|
_executingInteractCases.Insert(0, _currentActiveInteractCase);
|
||||||
|
}
|
||||||
|
|
||||||
//当指针处于UI上时停止对场景中交互对象的操作
|
//当指针处于UI上时停止对场景中交互对象的操作
|
||||||
if (EventSystem.current?.IsPointerOverGameObject() ?? false)
|
if (EventSystem.current?.IsPointerOverGameObject() ?? false)
|
||||||
{
|
{
|
||||||
@@ -131,24 +150,7 @@ namespace HalfDog.EasyInteractive
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//满足条件的InteractCase会被执行
|
|
||||||
//这里的满足条件指的是 交互操作与交互对象类型都要一致
|
|
||||||
IInteractCase activeCase = null;
|
|
||||||
for (int i = 0; i < _executingInteractCases.Count; i++)
|
|
||||||
{
|
|
||||||
if (_executingInteractCases[i].enable && _executingInteractCases[i].Execute(currentFocused, currentSelected, currentDraged) )
|
|
||||||
{
|
|
||||||
activeCase = _executingInteractCases[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//如果当前激活的情景更改了,则把激活的情景放到列表最前方第一个进行处理
|
|
||||||
//这是为了在情景更改时首先执行激活情景的退出事件(如果有的话)
|
|
||||||
if (activeCase!=null && activeCase != _currentActiveInteractCase)
|
|
||||||
{
|
|
||||||
_currentActiveInteractCase = activeCase;
|
|
||||||
_executingInteractCases.Remove(_currentActiveInteractCase);
|
|
||||||
_executingInteractCases.Insert(0, _currentActiveInteractCase);
|
|
||||||
}
|
|
||||||
//Debug.Log($"【Focus:{currentFocused?.interactTag.Name}】【Select:{currentSelected?.interactTag.Name}]】【Drag:{currentDraged?.interactTag.Name}】");
|
//Debug.Log($"【Focus:{currentFocused?.interactTag.Name}】【Select:{currentSelected?.interactTag.Name}]】【Drag:{currentDraged?.interactTag.Name}】");
|
||||||
|
|
||||||
if (Input.GetMouseButtonDown(0) && currentFocused!=null)
|
if (Input.GetMouseButtonDown(0) && currentFocused!=null)
|
||||||
@@ -189,6 +191,7 @@ namespace HalfDog.EasyInteractive
|
|||||||
currentDraged?.ProcessDrag();
|
currentDraged?.ProcessDrag();
|
||||||
}
|
}
|
||||||
//Debug.Log(currentFocused?.interactTag.Name ?? "Null");
|
//Debug.Log(currentFocused?.interactTag.Name ?? "Null");
|
||||||
|
|
||||||
}
|
}
|
||||||
public void Reset()
|
public void Reset()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a653129659e2b5d46bb3353c8dee5684
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 703e92e40a29cb0459623b68af154c01
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5aec9540f094b1b40b7fa4a6ecf30807
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,114 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d5c97c10483bdf345b6ddc0512bfada7
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 13
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 0
|
||||||
|
sRGBTexture: 1
|
||||||
|
linearTexture: 0
|
||||||
|
fadeOut: 0
|
||||||
|
borderMipMap: 0
|
||||||
|
mipMapsPreserveCoverage: 0
|
||||||
|
alphaTestReferenceValue: 0.5
|
||||||
|
mipMapFadeDistanceStart: 1
|
||||||
|
mipMapFadeDistanceEnd: 3
|
||||||
|
bumpmap:
|
||||||
|
convertToNormalMap: 0
|
||||||
|
externalNormalMap: 0
|
||||||
|
heightScale: 0.25
|
||||||
|
normalMapFilter: 0
|
||||||
|
flipGreenChannel: 0
|
||||||
|
isReadable: 0
|
||||||
|
streamingMipmaps: 0
|
||||||
|
streamingMipmapsPriority: 0
|
||||||
|
vTOnly: 0
|
||||||
|
ignoreMipmapLimit: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 6
|
||||||
|
cubemapConvolution: 0
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: 1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
filterMode: 1
|
||||||
|
aniso: 1
|
||||||
|
mipBias: 0
|
||||||
|
wrapU: 1
|
||||||
|
wrapV: 1
|
||||||
|
wrapW: 0
|
||||||
|
nPOTScale: 0
|
||||||
|
lightmap: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
spriteMode: 1
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spriteGenerateFallbackPhysicsShape: 1
|
||||||
|
alphaUsage: 1
|
||||||
|
alphaIsTransparency: 1
|
||||||
|
spriteTessellationDetail: -1
|
||||||
|
textureType: 8
|
||||||
|
textureShape: 1
|
||||||
|
singleChannelComponent: 0
|
||||||
|
flipbookRows: 1
|
||||||
|
flipbookColumns: 1
|
||||||
|
maxTextureSizeSet: 0
|
||||||
|
compressionQualitySet: 0
|
||||||
|
textureFormatSet: 0
|
||||||
|
ignorePngGamma: 0
|
||||||
|
applyGammaDecoding: 0
|
||||||
|
swizzle: 50462976
|
||||||
|
cookieLightType: 0
|
||||||
|
platformSettings:
|
||||||
|
- serializedVersion: 3
|
||||||
|
buildTarget: DefaultTexturePlatform
|
||||||
|
maxTextureSize: 2048
|
||||||
|
resizeAlgorithm: 0
|
||||||
|
textureFormat: -1
|
||||||
|
textureCompression: 1
|
||||||
|
compressionQuality: 50
|
||||||
|
crunchedCompression: 0
|
||||||
|
allowsAlphaSplitting: 0
|
||||||
|
overridden: 0
|
||||||
|
ignorePlatformSupport: 0
|
||||||
|
androidETC2FallbackOverride: 0
|
||||||
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
|
- serializedVersion: 3
|
||||||
|
buildTarget: Standalone
|
||||||
|
maxTextureSize: 2048
|
||||||
|
resizeAlgorithm: 0
|
||||||
|
textureFormat: -1
|
||||||
|
textureCompression: 1
|
||||||
|
compressionQuality: 50
|
||||||
|
crunchedCompression: 0
|
||||||
|
allowsAlphaSplitting: 0
|
||||||
|
overridden: 0
|
||||||
|
ignorePlatformSupport: 0
|
||||||
|
androidETC2FallbackOverride: 0
|
||||||
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
|
spriteSheet:
|
||||||
|
serializedVersion: 2
|
||||||
|
sprites: []
|
||||||
|
outline: []
|
||||||
|
physicsShape: []
|
||||||
|
bones: []
|
||||||
|
spriteID: 5e97eb03825dee720800000000000000
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
nameFileIdTable: {}
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9d24099f9ba36f04988058879dc6781d
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
%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
|
||||||
|
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords: []
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap:
|
||||||
|
RenderType: Opaque
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BaseMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
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: 0}
|
||||||
|
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:
|
||||||
|
- _AlphaClip: 0
|
||||||
|
- _AlphaToMask: 0
|
||||||
|
- _Blend: 0
|
||||||
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _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: 0.5
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _SrcBlendAlpha: 1
|
||||||
|
- _Surface: 0
|
||||||
|
- _WorkflowMode: 1
|
||||||
|
- _ZWrite: 1
|
||||||
|
m_Colors:
|
||||||
|
- _BaseColor: {r: 0.7783019, g: 1, b: 0.95422506, a: 1}
|
||||||
|
- _Color: {r: 0.7783019, g: 1, b: 0.954225, a: 1}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
|
--- !u!114 &6246152726478536194
|
||||||
|
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: 7
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 42aff5f63de320b49827cd66145a2119
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
%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: Item
|
||||||
|
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords: []
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap:
|
||||||
|
RenderType: Opaque
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BaseMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
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: 0}
|
||||||
|
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:
|
||||||
|
- _AlphaClip: 0
|
||||||
|
- _AlphaToMask: 0
|
||||||
|
- _Blend: 0
|
||||||
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _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: 0.5
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _SrcBlendAlpha: 1
|
||||||
|
- _Surface: 0
|
||||||
|
- _WorkflowMode: 1
|
||||||
|
- _ZWrite: 1
|
||||||
|
m_Colors:
|
||||||
|
- _BaseColor: {r: 1, g: 0.495283, b: 0.5359876, a: 1}
|
||||||
|
- _Color: {r: 1, g: 0.495283, b: 0.5359876, a: 1}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
|
--- !u!114 &2952506703872078247
|
||||||
|
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: 7
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fc54c2611d7066942a5b854425e8879b
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &-722990847617551464
|
||||||
|
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: 7
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 8
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Table
|
||||||
|
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords: []
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap:
|
||||||
|
RenderType: Opaque
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BaseMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
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: 0}
|
||||||
|
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:
|
||||||
|
- _AlphaClip: 0
|
||||||
|
- _AlphaToMask: 0
|
||||||
|
- _Blend: 0
|
||||||
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _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: 0.5
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _SrcBlendAlpha: 1
|
||||||
|
- _Surface: 0
|
||||||
|
- _WorkflowMode: 1
|
||||||
|
- _ZWrite: 1
|
||||||
|
m_Colors:
|
||||||
|
- _BaseColor: {r: 0.3679245, g: 0.24217868, b: 0.15445887, a: 1}
|
||||||
|
- _Color: {r: 0.36792448, g: 0.24217865, b: 0.15445882, a: 1}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b11820ee1c2f3e344ba5395f8e0fad9b
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
%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: TempSceneItem
|
||||||
|
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords:
|
||||||
|
- _ALPHAPREMULTIPLY_ON
|
||||||
|
- _SURFACE_TYPE_TRANSPARENT
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: 3000
|
||||||
|
stringTagMap:
|
||||||
|
RenderType: Transparent
|
||||||
|
disabledShaderPasses:
|
||||||
|
- DepthOnly
|
||||||
|
- SHADOWCASTER
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BaseMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
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: 0}
|
||||||
|
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:
|
||||||
|
- _AlphaClip: 0
|
||||||
|
- _AlphaToMask: 0
|
||||||
|
- _Blend: 0
|
||||||
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _ClearCoatMask: 0
|
||||||
|
- _ClearCoatSmoothness: 0
|
||||||
|
- _Cull: 2
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DetailAlbedoMapScale: 1
|
||||||
|
- _DetailNormalMapScale: 1
|
||||||
|
- _DstBlend: 10
|
||||||
|
- _DstBlendAlpha: 10
|
||||||
|
- _EnvironmentReflections: 1
|
||||||
|
- _GlossMapScale: 0
|
||||||
|
- _Glossiness: 0
|
||||||
|
- _GlossyReflections: 0
|
||||||
|
- _Metallic: 0
|
||||||
|
- _OcclusionStrength: 1
|
||||||
|
- _Parallax: 0.005
|
||||||
|
- _QueueOffset: 0
|
||||||
|
- _ReceiveShadows: 1
|
||||||
|
- _Smoothness: 0
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _SrcBlendAlpha: 1
|
||||||
|
- _Surface: 1
|
||||||
|
- _WorkflowMode: 1
|
||||||
|
- _ZWrite: 0
|
||||||
|
m_Colors:
|
||||||
|
- _BaseColor: {r: 0, g: 1, b: 0.029119251, a: 0.20392157}
|
||||||
|
- _Color: {r: 0, g: 1, b: 0.029119251, a: 0.20392157}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
|
--- !u!114 &4145539594127847447
|
||||||
|
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: 7
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ad698dcb1f015e74585d9d1397c722bc
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 24efc298397e85845b767fb4a0c5299c
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
Quick Outline
|
||||||
|
=============
|
||||||
|
|
||||||
|
Developed by Chris Nolet (c) 2018
|
||||||
|
|
||||||
|
|
||||||
|
Instructions
|
||||||
|
------------
|
||||||
|
|
||||||
|
To add an outline to an object, drag-and-drop the Outline.cs
|
||||||
|
script onto the object. The outline materials will be loaded
|
||||||
|
at runtime.
|
||||||
|
|
||||||
|
You can also add outlines programmatically with:
|
||||||
|
|
||||||
|
var outline = gameObject.AddComponent<Outline>();
|
||||||
|
|
||||||
|
outline.OutlineMode = Outline.Mode.OutlineAll;
|
||||||
|
outline.OutlineColor = Color.yellow;
|
||||||
|
outline.OutlineWidth = 5f;
|
||||||
|
|
||||||
|
The outline script does a small amount of work in Awake().
|
||||||
|
For best results, use outline.enabled to toggle the outline.
|
||||||
|
Avoid removing and re-adding the component if possible.
|
||||||
|
|
||||||
|
For large meshes, you may also like to enable 'Precompute
|
||||||
|
Outline' in the editor. This will reduce the amount of work
|
||||||
|
performed in Awake().
|
||||||
|
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
---------------
|
||||||
|
|
||||||
|
If the outline appears off-center, please try the following:
|
||||||
|
|
||||||
|
1. Set 'Read/Write Enabled' on each model's import settings.
|
||||||
|
2. Disable 'Optimize Mesh Data' in the player settings.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5933bfd39d7a5b843a0ed821f85bca19
|
||||||
|
timeCreated: 1522619008
|
||||||
|
licenseType: Store
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 70fd40674751a8042a8b9b2e8d9f915f
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1522559128
|
||||||
|
licenseType: Store
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 80ac8e52d3c31a94babd161e86bc6b97
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1522559139
|
||||||
|
licenseType: Store
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
%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: OutlineFill
|
||||||
|
m_Shader: {fileID: 4800000, guid: 4e76d4023d7e0411297c670f878973e2, type: 3}
|
||||||
|
m_ShaderKeywords:
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap: {}
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs: []
|
||||||
|
m_Floats:
|
||||||
|
- _OutlineWidth: 2
|
||||||
|
- _ZTest: 8
|
||||||
|
m_Colors:
|
||||||
|
- _OutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 311313efa011949e98b6761d652ad13c
|
||||||
|
timeCreated: 1520576285
|
||||||
|
licenseType: Store
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
%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: OutlineMask
|
||||||
|
m_Shader: {fileID: 4800000, guid: 341b058cd7dee4f5cba5cc59a513619e, type: 3}
|
||||||
|
m_ShaderKeywords:
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap: {}
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs: []
|
||||||
|
m_Floats:
|
||||||
|
- _ZTest: 8
|
||||||
|
m_Colors: []
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 106f3ff43a17d4967a2b64c7a92e49ec
|
||||||
|
timeCreated: 1520576276
|
||||||
|
licenseType: Store
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6a63caa2b0e993043a42c11f35ff2d1a
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1522559134
|
||||||
|
licenseType: Store
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
//
|
||||||
|
// OutlineFill.shader
|
||||||
|
// QuickOutline
|
||||||
|
//
|
||||||
|
// Created by Chris Nolet on 2/21/18.
|
||||||
|
// Copyright © 2018 Chris Nolet. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
Shader "Custom/Outline Fill" {
|
||||||
|
Properties {
|
||||||
|
[Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
|
||||||
|
|
||||||
|
_OutlineColor("Outline Color", Color) = (1, 1, 1, 1)
|
||||||
|
_OutlineWidth("Outline Width", Range(0, 10)) = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SubShader {
|
||||||
|
Tags {
|
||||||
|
"Queue" = "Transparent+110"
|
||||||
|
"RenderType" = "Transparent"
|
||||||
|
"DisableBatching" = "True"
|
||||||
|
}
|
||||||
|
|
||||||
|
Pass {
|
||||||
|
Name "Fill"
|
||||||
|
Cull Off
|
||||||
|
ZTest [_ZTest]
|
||||||
|
ZWrite Off
|
||||||
|
Blend SrcAlpha OneMinusSrcAlpha
|
||||||
|
ColorMask RGB
|
||||||
|
|
||||||
|
Stencil {
|
||||||
|
Ref 1
|
||||||
|
Comp NotEqual
|
||||||
|
}
|
||||||
|
|
||||||
|
CGPROGRAM
|
||||||
|
#include "UnityCG.cginc"
|
||||||
|
|
||||||
|
#pragma vertex vert
|
||||||
|
#pragma fragment frag
|
||||||
|
|
||||||
|
struct appdata {
|
||||||
|
float4 vertex : POSITION;
|
||||||
|
float3 normal : NORMAL;
|
||||||
|
float3 smoothNormal : TEXCOORD3;
|
||||||
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||||||
|
};
|
||||||
|
|
||||||
|
struct v2f {
|
||||||
|
float4 position : SV_POSITION;
|
||||||
|
fixed4 color : COLOR;
|
||||||
|
UNITY_VERTEX_OUTPUT_STEREO
|
||||||
|
};
|
||||||
|
|
||||||
|
uniform fixed4 _OutlineColor;
|
||||||
|
uniform float _OutlineWidth;
|
||||||
|
|
||||||
|
v2f vert(appdata input) {
|
||||||
|
v2f output;
|
||||||
|
|
||||||
|
UNITY_SETUP_INSTANCE_ID(input);
|
||||||
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||||||
|
|
||||||
|
float3 normal = any(input.smoothNormal) ? input.smoothNormal : input.normal;
|
||||||
|
float3 viewPosition = UnityObjectToViewPos(input.vertex);
|
||||||
|
float3 viewNormal = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, normal));
|
||||||
|
|
||||||
|
output.position = UnityViewToClipPos(viewPosition + viewNormal * -viewPosition.z * _OutlineWidth / 1000.0);
|
||||||
|
output.color = _OutlineColor;
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
fixed4 frag(v2f input) : SV_Target {
|
||||||
|
return input.color;
|
||||||
|
}
|
||||||
|
ENDCG
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4e76d4023d7e0411297c670f878973e2
|
||||||
|
timeCreated: 1520575782
|
||||||
|
licenseType: Store
|
||||||
|
ShaderImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
defaultTextures: []
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
//
|
||||||
|
// OutlineMask.shader
|
||||||
|
// QuickOutline
|
||||||
|
//
|
||||||
|
// Created by Chris Nolet on 2/21/18.
|
||||||
|
// Copyright © 2018 Chris Nolet. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
Shader "Custom/Outline Mask" {
|
||||||
|
Properties {
|
||||||
|
[Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
SubShader {
|
||||||
|
Tags {
|
||||||
|
"Queue" = "Transparent+100"
|
||||||
|
"RenderType" = "Transparent"
|
||||||
|
}
|
||||||
|
|
||||||
|
Pass {
|
||||||
|
Name "Mask"
|
||||||
|
Cull Off
|
||||||
|
ZTest [_ZTest]
|
||||||
|
ZWrite Off
|
||||||
|
ColorMask 0
|
||||||
|
|
||||||
|
Stencil {
|
||||||
|
Ref 1
|
||||||
|
Pass Replace
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 341b058cd7dee4f5cba5cc59a513619e
|
||||||
|
timeCreated: 1520575773
|
||||||
|
licenseType: Store
|
||||||
|
ShaderImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
defaultTextures: []
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3ddbd65d69a9f0b48bab4fe96a1fe099
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1522559122
|
||||||
|
licenseType: Store
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,309 @@
|
|||||||
|
//
|
||||||
|
// Outline.cs
|
||||||
|
// QuickOutline
|
||||||
|
//
|
||||||
|
// Created by Chris Nolet on 3/30/18.
|
||||||
|
// Copyright © 2018 Chris Nolet. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[DisallowMultipleComponent]
|
||||||
|
|
||||||
|
public class Outline : MonoBehaviour {
|
||||||
|
private static HashSet<Mesh> registeredMeshes = new HashSet<Mesh>();
|
||||||
|
|
||||||
|
public enum Mode {
|
||||||
|
OutlineAll,
|
||||||
|
OutlineVisible,
|
||||||
|
OutlineHidden,
|
||||||
|
OutlineAndSilhouette,
|
||||||
|
SilhouetteOnly
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mode OutlineMode {
|
||||||
|
get { return outlineMode; }
|
||||||
|
set {
|
||||||
|
outlineMode = value;
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color OutlineColor {
|
||||||
|
get { return outlineColor; }
|
||||||
|
set {
|
||||||
|
outlineColor = value;
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float OutlineWidth {
|
||||||
|
get { return outlineWidth; }
|
||||||
|
set {
|
||||||
|
outlineWidth = value;
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
private class ListVector3 {
|
||||||
|
public List<Vector3> data;
|
||||||
|
}
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Mode outlineMode;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Color outlineColor = Color.white;
|
||||||
|
|
||||||
|
[SerializeField, Range(0f, 10f)]
|
||||||
|
private float outlineWidth = 2f;
|
||||||
|
|
||||||
|
[Header("Optional")]
|
||||||
|
|
||||||
|
[SerializeField, Tooltip("Precompute enabled: Per-vertex calculations are performed in the editor and serialized with the object. "
|
||||||
|
+ "Precompute disabled: Per-vertex calculations are performed at runtime in Awake(). This may cause a pause for large meshes.")]
|
||||||
|
private bool precomputeOutline;
|
||||||
|
|
||||||
|
[SerializeField, HideInInspector]
|
||||||
|
private List<Mesh> bakeKeys = new List<Mesh>();
|
||||||
|
|
||||||
|
[SerializeField, HideInInspector]
|
||||||
|
private List<ListVector3> bakeValues = new List<ListVector3>();
|
||||||
|
|
||||||
|
private Renderer[] renderers;
|
||||||
|
private Material outlineMaskMaterial;
|
||||||
|
private Material outlineFillMaterial;
|
||||||
|
|
||||||
|
private bool needsUpdate;
|
||||||
|
|
||||||
|
void Awake() {
|
||||||
|
|
||||||
|
// Cache renderers
|
||||||
|
renderers = GetComponentsInChildren<Renderer>();
|
||||||
|
|
||||||
|
// Instantiate outline materials
|
||||||
|
outlineMaskMaterial = Instantiate(Resources.Load<Material>(@"Materials/OutlineMask"));
|
||||||
|
outlineFillMaterial = Instantiate(Resources.Load<Material>(@"Materials/OutlineFill"));
|
||||||
|
|
||||||
|
outlineMaskMaterial.name = "OutlineMask (Instance)";
|
||||||
|
outlineFillMaterial.name = "OutlineFill (Instance)";
|
||||||
|
|
||||||
|
// Retrieve or generate smooth normals
|
||||||
|
LoadSmoothNormals();
|
||||||
|
|
||||||
|
// Apply material properties immediately
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnEnable() {
|
||||||
|
foreach (var renderer in renderers) {
|
||||||
|
|
||||||
|
// Append outline shaders
|
||||||
|
var materials = renderer.sharedMaterials.ToList();
|
||||||
|
|
||||||
|
materials.Add(outlineMaskMaterial);
|
||||||
|
materials.Add(outlineFillMaterial);
|
||||||
|
|
||||||
|
renderer.materials = materials.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnValidate() {
|
||||||
|
|
||||||
|
// Update material properties
|
||||||
|
needsUpdate = true;
|
||||||
|
|
||||||
|
// Clear cache when baking is disabled or corrupted
|
||||||
|
if (!precomputeOutline && bakeKeys.Count != 0 || bakeKeys.Count != bakeValues.Count) {
|
||||||
|
bakeKeys.Clear();
|
||||||
|
bakeValues.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate smooth normals when baking is enabled
|
||||||
|
if (precomputeOutline && bakeKeys.Count == 0) {
|
||||||
|
Bake();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update() {
|
||||||
|
if (needsUpdate) {
|
||||||
|
needsUpdate = false;
|
||||||
|
|
||||||
|
UpdateMaterialProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnDisable() {
|
||||||
|
foreach (var renderer in renderers) {
|
||||||
|
|
||||||
|
// Remove outline shaders
|
||||||
|
var materials = renderer.sharedMaterials.ToList();
|
||||||
|
|
||||||
|
materials.Remove(outlineMaskMaterial);
|
||||||
|
materials.Remove(outlineFillMaterial);
|
||||||
|
|
||||||
|
renderer.materials = materials.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnDestroy() {
|
||||||
|
|
||||||
|
// Destroy material instances
|
||||||
|
Destroy(outlineMaskMaterial);
|
||||||
|
Destroy(outlineFillMaterial);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bake() {
|
||||||
|
|
||||||
|
// Generate smooth normals for each mesh
|
||||||
|
var bakedMeshes = new HashSet<Mesh>();
|
||||||
|
|
||||||
|
foreach (var meshFilter in GetComponentsInChildren<MeshFilter>()) {
|
||||||
|
|
||||||
|
// Skip duplicates
|
||||||
|
if (!bakedMeshes.Add(meshFilter.sharedMesh)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serialize smooth normals
|
||||||
|
var smoothNormals = SmoothNormals(meshFilter.sharedMesh);
|
||||||
|
|
||||||
|
bakeKeys.Add(meshFilter.sharedMesh);
|
||||||
|
bakeValues.Add(new ListVector3() { data = smoothNormals });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoadSmoothNormals() {
|
||||||
|
|
||||||
|
// Retrieve or generate smooth normals
|
||||||
|
foreach (var meshFilter in GetComponentsInChildren<MeshFilter>()) {
|
||||||
|
|
||||||
|
// Skip if smooth normals have already been adopted
|
||||||
|
if (!registeredMeshes.Add(meshFilter.sharedMesh)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve or generate smooth normals
|
||||||
|
var index = bakeKeys.IndexOf(meshFilter.sharedMesh);
|
||||||
|
var smoothNormals = (index >= 0) ? bakeValues[index].data : SmoothNormals(meshFilter.sharedMesh);
|
||||||
|
|
||||||
|
// Store smooth normals in UV3
|
||||||
|
meshFilter.sharedMesh.SetUVs(3, smoothNormals);
|
||||||
|
|
||||||
|
// Combine submeshes
|
||||||
|
var renderer = meshFilter.GetComponent<Renderer>();
|
||||||
|
|
||||||
|
if (renderer != null) {
|
||||||
|
CombineSubmeshes(meshFilter.sharedMesh, renderer.sharedMaterials);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear UV3 on skinned mesh renderers
|
||||||
|
foreach (var skinnedMeshRenderer in GetComponentsInChildren<SkinnedMeshRenderer>()) {
|
||||||
|
|
||||||
|
// Skip if UV3 has already been reset
|
||||||
|
if (!registeredMeshes.Add(skinnedMeshRenderer.sharedMesh)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear UV3
|
||||||
|
skinnedMeshRenderer.sharedMesh.uv4 = new Vector2[skinnedMeshRenderer.sharedMesh.vertexCount];
|
||||||
|
|
||||||
|
// Combine submeshes
|
||||||
|
CombineSubmeshes(skinnedMeshRenderer.sharedMesh, skinnedMeshRenderer.sharedMaterials);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Vector3> SmoothNormals(Mesh mesh) {
|
||||||
|
|
||||||
|
// Group vertices by location
|
||||||
|
var groups = mesh.vertices.Select((vertex, index) => new KeyValuePair<Vector3, int>(vertex, index)).GroupBy(pair => pair.Key);
|
||||||
|
|
||||||
|
// Copy normals to a new list
|
||||||
|
var smoothNormals = new List<Vector3>(mesh.normals);
|
||||||
|
|
||||||
|
// Average normals for grouped vertices
|
||||||
|
foreach (var group in groups) {
|
||||||
|
|
||||||
|
// Skip single vertices
|
||||||
|
if (group.Count() == 1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the average normal
|
||||||
|
var smoothNormal = Vector3.zero;
|
||||||
|
|
||||||
|
foreach (var pair in group) {
|
||||||
|
smoothNormal += smoothNormals[pair.Value];
|
||||||
|
}
|
||||||
|
|
||||||
|
smoothNormal.Normalize();
|
||||||
|
|
||||||
|
// Assign smooth normal to each vertex
|
||||||
|
foreach (var pair in group) {
|
||||||
|
smoothNormals[pair.Value] = smoothNormal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return smoothNormals;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CombineSubmeshes(Mesh mesh, Material[] materials) {
|
||||||
|
|
||||||
|
// Skip meshes with a single submesh
|
||||||
|
if (mesh.subMeshCount == 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip if submesh count exceeds material count
|
||||||
|
if (mesh.subMeshCount > materials.Length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append combined submesh
|
||||||
|
mesh.subMeshCount++;
|
||||||
|
mesh.SetTriangles(mesh.triangles, mesh.subMeshCount - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateMaterialProperties() {
|
||||||
|
|
||||||
|
// Apply properties according to mode
|
||||||
|
outlineFillMaterial.SetColor("_OutlineColor", outlineColor);
|
||||||
|
|
||||||
|
switch (outlineMode) {
|
||||||
|
case Mode.OutlineAll:
|
||||||
|
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||||
|
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||||
|
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Mode.OutlineVisible:
|
||||||
|
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||||
|
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
|
||||||
|
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Mode.OutlineHidden:
|
||||||
|
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||||
|
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
|
||||||
|
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Mode.OutlineAndSilhouette:
|
||||||
|
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
|
||||||
|
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
|
||||||
|
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Mode.SilhouetteOnly:
|
||||||
|
outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
|
||||||
|
outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
|
||||||
|
outlineFillMaterial.SetFloat("_OutlineWidth", 0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5fea29bb7c508c244a1f805a5fd3fc4d
|
||||||
|
timeCreated: 1522369084
|
||||||
|
licenseType: Store
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b1ead22abd8bf1e4e9a2d25e774b8ab0
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
using HalfDog.EasyInteractive;
|
||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[InteractCase(typeof(UIItem), typeof(Table))]
|
||||||
|
public class DragToScene : DragSubjectFocusTargetInteractCase
|
||||||
|
{
|
||||||
|
private UIItem uiItem;
|
||||||
|
private Table table;
|
||||||
|
public DragToScene(Type subject, Type target) : base(subject, target)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnEnter(IDragable subject, IFocusable target)
|
||||||
|
{
|
||||||
|
Debug.Log("Enter Case");
|
||||||
|
uiItem = (subject as UIItem);
|
||||||
|
table = (target as Table);
|
||||||
|
table.tempItem.gameObject.SetActive(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnExecute(IDragable subject, IFocusable target)
|
||||||
|
{
|
||||||
|
if (Input.GetMouseButtonUp(0))
|
||||||
|
{
|
||||||
|
GameObject.FindObjectOfType<SceneItem>(true).gameObject.SetActive(true);
|
||||||
|
Debug.Log("Execute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnExit()
|
||||||
|
{
|
||||||
|
Debug.Log("Exit Case");
|
||||||
|
table.tempItem.gameObject.SetActive(false);
|
||||||
|
uiItem.icon.gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 87ee89c2a3f8df54096b48ac81c7fdae
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using HalfDog.EasyInteractive;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Unity.VisualScripting;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[InteractCase(typeof(SceneItem), typeof(UIItem))]
|
||||||
|
public class DragToUI : DragSubjectFocusTargetInteractCase
|
||||||
|
{
|
||||||
|
private SceneItem sceneItem;
|
||||||
|
public DragToUI(Type subject, Type target) : base(subject, target)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
protected override void OnEnter(IDragable subject, IFocusable target)
|
||||||
|
{
|
||||||
|
Debug.Log("Enter Case");
|
||||||
|
sceneItem = (subject as SceneItem);
|
||||||
|
}
|
||||||
|
protected override void OnExecute(IDragable subject, IFocusable target)
|
||||||
|
{
|
||||||
|
if (EndDrag)
|
||||||
|
{
|
||||||
|
Debug.Log("Execute");
|
||||||
|
(target as UIItem).icon.gameObject.SetActive(true);
|
||||||
|
(target as UIItem).icon.sprite = sceneItem.iconSprite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
protected override void OnExit()
|
||||||
|
{
|
||||||
|
Debug.Log("Exit Case");
|
||||||
|
sceneItem.gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: de97bca2efbdafb4884428172f199c75
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
public class GhostIcon : MonoBehaviour
|
||||||
|
{
|
||||||
|
public static GhostIcon Instance;
|
||||||
|
private Image _icon;
|
||||||
|
private bool _isShow = false;
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
Instance = this;
|
||||||
|
}
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
_icon = GetComponent<Image>();
|
||||||
|
gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
private void Update()
|
||||||
|
{
|
||||||
|
if (_isShow)
|
||||||
|
{
|
||||||
|
transform.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void ShowGhostIcon(Sprite sprite)
|
||||||
|
{
|
||||||
|
if (sprite == null) return;
|
||||||
|
transform.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z);
|
||||||
|
_icon.sprite = sprite;
|
||||||
|
gameObject.SetActive(true);
|
||||||
|
_isShow = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HideGhostIcon()
|
||||||
|
{
|
||||||
|
_isShow = false;
|
||||||
|
gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 637063d8e14f01b40a70497c738425bd
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
using HalfDog.EasyInteractive;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class SceneItem : MonoBehaviour, IDragable
|
||||||
|
{
|
||||||
|
public Sprite iconSprite;
|
||||||
|
public Type interactTag => typeof(SceneItem);
|
||||||
|
public bool enableDrag => true;
|
||||||
|
public bool enableFocus => true;
|
||||||
|
private Outline _outline;
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
_outline = GetComponent<Outline>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnFocus()
|
||||||
|
{
|
||||||
|
_outline.enabled = true;
|
||||||
|
}
|
||||||
|
public void EndFocus()
|
||||||
|
{
|
||||||
|
_outline.enabled = false;
|
||||||
|
}
|
||||||
|
public void OnDrag()
|
||||||
|
{
|
||||||
|
Debug.Log("Begin Drag");
|
||||||
|
GhostIcon.Instance.ShowGhostIcon(iconSprite);
|
||||||
|
gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
public void ProcessDrag()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public void EndDrag()
|
||||||
|
{
|
||||||
|
Debug.Log("End Drag");
|
||||||
|
GhostIcon.Instance.HideGhostIcon();
|
||||||
|
gameObject.SetActive(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: dc46a818fd9886f4a89e1148cb61fb5a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
using HalfDog.EasyInteractive;
|
||||||
|
|
||||||
|
public class Table : MonoBehaviour, IFocusable
|
||||||
|
{
|
||||||
|
public GameObject tempItem;
|
||||||
|
public Type interactTag => typeof(Table);
|
||||||
|
public bool enableFocus => true;
|
||||||
|
private Outline _outline;
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
_outline = GetComponent<Outline>();
|
||||||
|
}
|
||||||
|
public void OnFocus()
|
||||||
|
{
|
||||||
|
_outline.enabled = true;
|
||||||
|
}
|
||||||
|
public void EndFocus()
|
||||||
|
{
|
||||||
|
_outline.enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2c72fe5ebd1ffbd4d9dda7c9ff7b864b
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
using HalfDog.EasyInteractive;
|
||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
public class UIItem : InteractableUIElement,IDragable
|
||||||
|
{
|
||||||
|
public Image icon;
|
||||||
|
public Type interactTag => typeof(UIItem);
|
||||||
|
public bool enableFocus => true;
|
||||||
|
public bool enableDrag => true;
|
||||||
|
|
||||||
|
public void OnFocus()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public void EndFocus()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public void OnDrag()
|
||||||
|
{
|
||||||
|
Debug.Log("Begin Drag");
|
||||||
|
if (!icon.gameObject.activeSelf) return;
|
||||||
|
GhostIcon.Instance.ShowGhostIcon(icon.sprite);
|
||||||
|
icon.gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
public void ProcessDrag()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public void EndDrag()
|
||||||
|
{
|
||||||
|
Debug.Log("End Drag");
|
||||||
|
GhostIcon.Instance.HideGhostIcon();
|
||||||
|
icon.gameObject.SetActive(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1263b19a7ad3f9e42ae0df0e3f70afc6
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 47c5ea27fffe88a49991f6e452361d84
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bf5aabd43ba1b444e98409d42623a191
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 60c245106e3bde84d92a670377c41e97
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d962775d4e4d55841b7e09058d74e960
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 125af9525bead8d42b9ec48a79432e75
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: af6affaf0bf500d4899e52282d8608eb
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1732134d2c83cf64ebaada6f5a377299
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Reference in New Issue
Block a user