From 804bfb96bdcad0585b3849d89f549eb92798d04b Mon Sep 17 00:00:00 2001 From: hecomi Date: Sat, 12 Nov 2016 03:56:46 +0900 Subject: [PATCH] add board-style screen. --- .../{Monitor.prefab => Monitor Board.prefab} | Bin 7972 -> 7964 bytes ....prefab.meta => Monitor Board.prefab.meta} | 0 .../Examples/Prefabs/Monitor Plane.prefab | Bin 0 -> 7980 bytes .../Prefabs/Monitor Plane.prefab.meta | 8 ++ .../Scenes/Multiple Monitors Roundly.unity | Bin 14976 -> 15032 bytes .../Examples/Scenes/Primary Monitor.unity | Bin 14320 -> 14304 bytes .../Examples/Scenes/Zoom.unity | Bin 23512 -> 22824 bytes .../Scripts/MultipleMonitorCreator.cs | 10 ++- .../Scripts/MultipleMonitorRoundLayouter.cs | 6 +- .../Materials/uDD_Screen_Standard.mat | Bin 5148 -> 5152 bytes .../Materials/uDD_Screen_Unlit.mat | Bin 5188 -> 5252 bytes .../Materials/uDD_Screen_Unlit_BlackMask.mat | Bin 5156 -> 5160 bytes .../uDD_Screen_Unlit_Transparent.mat | Bin 5156 -> 5160 bytes Assets/uDesktopDuplication/Models.meta | 9 ++ .../uDesktopDuplication/Models/uDD_Board.fbx | Bin 0 -> 32816 bytes .../Models/uDD_Board.fbx.meta | 78 ++++++++++++++++++ .../Shaders/uDD_Common.cginc | 18 ++++ .../Shaders/uDD_Unlit.shader | 12 +-- .../Shaders/uDD_Unlit_BlackMask.shader | 4 + .../Shaders/uDD_Unlit_Transparent.shader | 5 ++ 20 files changed, 138 insertions(+), 12 deletions(-) rename Assets/uDesktopDuplication/Examples/Prefabs/{Monitor.prefab => Monitor Board.prefab} (87%) rename Assets/uDesktopDuplication/Examples/Prefabs/{Monitor.prefab.meta => Monitor Board.prefab.meta} (100%) create mode 100644 Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab create mode 100644 Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab.meta create mode 100644 Assets/uDesktopDuplication/Models.meta create mode 100644 Assets/uDesktopDuplication/Models/uDD_Board.fbx create mode 100644 Assets/uDesktopDuplication/Models/uDD_Board.fbx.meta diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor.prefab b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Board.prefab similarity index 87% rename from Assets/uDesktopDuplication/Examples/Prefabs/Monitor.prefab rename to Assets/uDesktopDuplication/Examples/Prefabs/Monitor Board.prefab index ae0f09c27f376660c59a4a569705648891fc6cff..2f3b99b303d30aff7a5be5cae4d7291e9de6d880 100644 GIT binary patch delta 206 zcmZ2tH^)wZfk8%>fk9q|fq{V^$PU;jAS2DVa}qRZCE8)QW$ z7XaxFnHFJQpeerjd6^~oMG8*&iA5<443ouW12sUVBS3>ag00}#f9R`yp=}pXtic{= ZpaRgqJfkDQHfk9q{fq{V^$WGWOAS2DVaI&tnxaa!ee;0|@{1<(%LeLvVKLngGXluAhp`zL6dd~xeFgFx t>rD1 diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor.prefab.meta b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Board.prefab.meta similarity index 100% rename from Assets/uDesktopDuplication/Examples/Prefabs/Monitor.prefab.meta rename to Assets/uDesktopDuplication/Examples/Prefabs/Monitor Board.prefab.meta diff --git a/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab b/Assets/uDesktopDuplication/Examples/Prefabs/Monitor Plane.prefab new file mode 100644 index 0000000000000000000000000000000000000000..6d2132fe5e4c6b48c23a912a54f57d1d1006f1d8 GIT binary patch literal 7980 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 delta 145 zcmdl{+E6OMz+mjoz+lzDz`(!{WG8GCP+=C`#9|{Ym@m_=oYAwa!>igu7ATv)(a)V} z@&wkB$q7OllU>-{H!omw(As?8z>$$LVzQ!Y3;nrWrE)`~UwxqsT_3BGt`28nYA` zr6(`98HE4;2dU1m31I`#1(O}Uq!~LV#{$V4lPkTXWfNE#7$yK^(!dy^ z`oTj>O_1sjlQ#m@HB3J1CC&N)sDI<+w_f71E7%zrT!6BFfi@R0FoF~^#NKN%0MQ>N zD|$;aI!w0pmX=+>0Wnz|C@#(bF*y;c&S3IHpt_97YrUnJZg5UM|A%JD_k^qy*3j#_e3j~QwHVE7Trau71{{(7Go)9R@SUGuJ zpxER$0UVQcf_OHY1TA1z1_5Y9WfHiT0M fD8!)P*njA&eW7iaJp)67{p5$fGMm4IKVb#{W#*JL delta 904 zcmYjPO-xfk5S}fC7Adv}gvzsqzXqCMZIf0Y5h+2_SFp5Dnn;kejZ~;979VIZkytn> z@duoXKX)UEMxi8fBcKO77&-PLf#|__s)-~Lqjk1@MfT;}`R1G1-Pw8jVu>Z+vKj#Q zM}UDO0BDJ)$b#K$Gg~iP;cq&fX61`DlF{TKxo*xjcGq&eb?N*2{6O;8R2gZv2nqrp zO#tx@OqJE+>&j%los>@087pqr5>pa11g0j?3UeOB8_6dZiuZK}=V=c=_X&pyJb}^2 z^+5)4u2Y@B+W+ez?h|wbaAfr>M6VO*%yUpegb#l37HyO(=txG(>IVxdm34P`e54~5 zjYfvT68_MbY+mn#blN*|b3Ag%9hwMBkx=vuj0SR?sB64WiVP2jCE^{it2e@viD~1j zYIY1yI;YtRE;=iih##DSAxJHuTVz7+r^UqW8)Txun$bY>2DXSo%Y_1fF^cd$ zDj}WbSp!=$7H&5vwnmosfXT6oa%>Lo(;i7&5Cua6^)g5~zv;J1kVgz4Am`n|9kJ9H zls$bRfJjkC2HDd>ax92{XvfER)Fl|yhX58R=ite^{i`vOU-gd2ZmhAF6hPw2Lv;MDn{{ZbV&nf@_ diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs index 9a3bba5..eee40e5 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs @@ -9,6 +9,10 @@ public class MultipleMonitorCreator : MonoBehaviour bool hasMonitorUnsupportStateChecked = false; float removeWaitTimer_ = 0f; + public enum MeshForwardDirection { Y, Z } + [Tooltip("Please specify the upper vector direction of the mesh (e.g. Plane's upper direction is Y.)")] + public MeshForwardDirection meshForwardDirection = MeshForwardDirection.Z; + public class MonitorInfo { public GameObject gameObject { get; set; } @@ -88,7 +92,11 @@ public class MultipleMonitorCreator : MonoBehaviour var monitor = texture.monitor; // Set width / height - go.transform.localScale = new Vector3(monitor.widthMeter, go.transform.localScale.y, monitor.heightMeter); + if (meshForwardDirection == MeshForwardDirection.Y) { + go.transform.localScale = new Vector3(monitor.widthMeter, go.transform.localScale.y, monitor.heightMeter); + } else { + go.transform.localScale = new Vector3(monitor.widthMeter, monitor.heightMeter, go.transform.localScale.z); + } // Set parent as this object go.transform.SetParent(transform); diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs index a45abf8..d28b0c1 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs @@ -36,7 +36,11 @@ public class MultipleMonitorRoundLayouter : MultipleMonitorLayouter uddTex.transform.localRotation = Quaternion.AngleAxis(angle * Mathf.Rad2Deg, Vector3.up) * info.originalRotation; angle += (width * 0.5f + margin) / radius; - uddTex.bend = uDesktopDuplication.Texture.Bend.Y; + if (creator_.meshForwardDirection == MultipleMonitorCreator.MeshForwardDirection.Y) { + uddTex.bend = uDesktopDuplication.Texture.Bend.Y; + } else { + uddTex.bend = uDesktopDuplication.Texture.Bend.Z; + } uddTex.radius = radius; uddTex.width = uddTex.monitor.widthMeter; } diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Standard.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Standard.mat index 29bdadee22418e44f08d371a42e9e3f44533bf8f..1a5df84a317fa320ac28831ecd59ccef8c148bf1 100644 GIT binary patch delta 73 zcmbQEu|R`^fq`QQ1A~adMvfK^MupA29GlryWEmJ3JpIC4gF@mX6ylvjeSG4b9G$%t c;$3|`gM&T&{ebeD69gVJGCFK_5xT($0Fhx5+yDRo delta 69 zcmZ3WF-L=gfq`QQ1A~anMvfK^Mw!jM9Glq{WEdD2JpIC4gF@mX6ylvjeSG5m-P{!7 ZU41=+gFXHIHm3+YW@Kd8>>+f65dcv`5@7%U diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit.mat index d1733a2402c59bced4d9011fecabf29c7fb89af4..79bce7a7085390c6be93f3515d379deb484ac40d 100644 GIT binary patch delta 142 zcmX@2(W1%0z`(JDfkC8YBS#AdW6S1Vj`i%enhXpKo_=AjK_T%G3h~aNK0fhIj?Uf+ z@vgp}!NH#XehTrS!LClOelGF;en7R1K>QyFfD{AQIKL<)wSr;t meF2Tls|8XS86_tR3W;;Ff~1{N^HL@&3TZJqZ1xfQ!3Y4NW+os2 delta 108 zcmZqCJfgwDz`(JDfkDJ&BS#Adqs!)Aj`i%88Vn2!o_=AjK_T%G3h~aNK0fjOZf*+k zuD+hZ!Jhtp3h|-Au1>CgF7f_;j6k*jfdEJ`a89li(B6DOpn#E4VzQ%<_~Z;BWk!b0 IJwiVi0Vt&&Pyhe` diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_BlackMask.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_BlackMask.mat index 12bc14eba32631a1da0fcd74b33161ad07ea90f6..021110ed29748a359a379da835d8914fe945840f 100644 GIT binary patch delta 73 zcmZ3Yu|k7`fq`QQ1A~ahMvfK^MvcwA9J|?7WEmJ3JpIC4gF@mX6ylvjeSG4b9G$%t c;$3|`gM&T&{ebeDGXx$pGCFMb5xT($0Gp8$6aWAK delta 69 zcmZ3Xu|$J|fq`QQ1A~alMvfK^MwQLI9J|>SWEdD2JpIC4gF@mX6ylvjeSG5m-P{!7 ZU41=+gFXHIHs=UDW@Kd893XUq5dd1#5}5!1 diff --git a/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Transparent.mat b/Assets/uDesktopDuplication/Materials/uDD_Screen_Unlit_Transparent.mat index d07230f289175943011edfc2fc02b33e8fb98ecc..e65f5f4e45ff5cb7e7058c7d50c9511a6dc34406 100644 GIT binary patch delta 73 zcmZ3Yu|k7`fq`QQ1A~ahMvfK^MvcwA9J|?7WEmJ3JpIC4gF@mX6ylvjeSG4b9G$%t c;$3|`gM&T&{ebeDGXx$pGCFMb5xT($0Gp8$6aWAK delta 69 zcmZ3Xu|$J|fq`QQ1A~alMvfK^MwQLI9J|>SWEdD2JpIC4gF@mX6ylvjeSG5m-P{!7 ZU41=+gFXHIHs=UDW@Kd893XUq5dd1#5}5!1 diff --git a/Assets/uDesktopDuplication/Models.meta b/Assets/uDesktopDuplication/Models.meta new file mode 100644 index 0000000..ccf1ab0 --- /dev/null +++ b/Assets/uDesktopDuplication/Models.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 75494e992a22ea44d9b614d7fd3dc235 +folderAsset: yes +timeCreated: 1478887431 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/uDesktopDuplication/Models/uDD_Board.fbx b/Assets/uDesktopDuplication/Models/uDD_Board.fbx new file mode 100644 index 0000000000000000000000000000000000000000..aa742a37082e7dd4628748bbd89314fd548fbd1f GIT binary patch literal 32816 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