Stereoscopic Slideshow
parent
6e9b67cfb8
commit
b7bf08930d
|
@ -684,7 +684,7 @@ MonoBehaviour:
|
||||||
- {fileID: -4731438336562001402}
|
- {fileID: -4731438336562001402}
|
||||||
- {fileID: 4135229692886101830}
|
- {fileID: 4135229692886101830}
|
||||||
- {fileID: 2220871646205782247}
|
- {fileID: 2220871646205782247}
|
||||||
m_renderMode: 1
|
m_renderMode: 0
|
||||||
m_depthSubmissionMode: 0
|
m_depthSubmissionMode: 0
|
||||||
m_symmetricProjection: 0
|
m_symmetricProjection: 0
|
||||||
--- !u!114 &-3022769360335504799
|
--- !u!114 &-3022769360335504799
|
||||||
|
@ -2133,3 +2133,4 @@ MonoBehaviour:
|
||||||
- {fileID: -7494486358618572369}
|
- {fileID: -7494486358618572369}
|
||||||
m_renderMode: 1
|
m_renderMode: 1
|
||||||
m_depthSubmissionMode: 0
|
m_depthSubmissionMode: 0
|
||||||
|
m_symmetricProjection: 0
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
Tree("Root") {
|
Tree("Root") {
|
||||||
Composite(Sequence) {
|
Composite(Sequence) {
|
||||||
Composite (Marathon) {
|
Composite (Marathon) {
|
||||||
RunTree("Fading_Text")
|
|
||||||
RunTree("Fading_Bush")
|
RunTree("Fading_Bush")
|
||||||
|
RunTree("Play_Depthkit")
|
||||||
}
|
}
|
||||||
BTC.Show("GO.Canvas")
|
|
||||||
Composite(Race) {
|
Composite(Race) {
|
||||||
Composite(Sequence) {
|
Composite(Sequence) {
|
||||||
// Blue Cube
|
// Blue Cube
|
||||||
|
@ -22,24 +21,24 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Tree("Fading_Text") {
|
|
||||||
Composite (Sequence) {
|
|
||||||
BTC.FadeOut("TextMeshPro.Canvas")
|
|
||||||
BTC.FadeIn("TextMeshPro.Canvas")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Tree("Fading_Bush") {
|
Tree("Fading_Bush") {
|
||||||
Composite (Sequence) {
|
Composite (Sequence) {
|
||||||
BTC.FadeIn("Renderer.STATIC.bushBaked")
|
BTC.FadeIn("Renderer.STATIC.bushBaked")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tree("Play_Depthkit") {
|
||||||
|
Composite(Sequence) {
|
||||||
|
BTC.Show("Depthkit.STATIC.D21A")
|
||||||
|
BTC.Run("Depthkit.STATIC.D21A")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Tree("Reset") {
|
Tree("Reset") {
|
||||||
Composite(Marathon) {
|
Composite(Marathon) {
|
||||||
BTC.Hide("GO.Canvas")
|
|
||||||
BTC.Hide("GO.STATIC.-152100")
|
BTC.Hide("GO.STATIC.-152100")
|
||||||
BTC.Hide("GO.STATIC")
|
BTC.Hide("GO.STATIC")
|
||||||
BTC.FadeOut("Renderer.STATIC.bushBaked")
|
BTC.FadeOut("Renderer.STATIC.bushBaked")
|
||||||
|
BTC.Hide("Depthkit.STATIC.D21A")
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
Tree("Root") {
|
||||||
|
BTC.Run("StereoSlideshow.CompleteXROriginSetUp.IMG0047")
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 860366996b80f463584f75cf0281e80d
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -143,7 +143,7 @@ ModelImporter:
|
||||||
importPhysicalCameras: 1
|
importPhysicalCameras: 1
|
||||||
importVisibility: 1
|
importVisibility: 1
|
||||||
importBlendShapes: 1
|
importBlendShapes: 1
|
||||||
importCameras: 1
|
importCameras: 0
|
||||||
importLights: 1
|
importLights: 1
|
||||||
nodeNameCollisionStrategy: 1
|
nodeNameCollisionStrategy: 1
|
||||||
fileIdsGeneration: 2
|
fileIdsGeneration: 2
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using MyBT;
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
using UnityEditor;
|
||||||
|
[CustomEditor(typeof(NamedStereoscopicSlideshow))]
|
||||||
|
public class NamedStereoscopicSlideshowInspector : ComponentHandlerInspector {
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[System.Serializable]
|
||||||
|
public class NamedStereoscopicSlideshow : ComponentHandler {
|
||||||
|
|
||||||
|
public override string TypeLabel()
|
||||||
|
{
|
||||||
|
return "StereoSlideshow";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ContentLabel()
|
||||||
|
{
|
||||||
|
UpdateComponent();
|
||||||
|
string[] fullPath = photoTransition.imgPathList[0].Split('/');
|
||||||
|
string filename = fullPath[fullPath.Length - 1];
|
||||||
|
string fileNameWithoutExt = filename.Remove(filename.Length - 5); // remove .jpeg
|
||||||
|
string final = fileNameWithoutExt.Length > 10 ? fileNameWithoutExt.Substring(0, 10) : fileNameWithoutExt; // first 10 characters
|
||||||
|
return final;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void UpdateComponent()
|
||||||
|
{
|
||||||
|
base.UpdateComponent();
|
||||||
|
photoTransition = GetComponent<PhotoTransition>();
|
||||||
|
if (photoTransition == null)
|
||||||
|
{
|
||||||
|
Debug.Log($"NamedStereoscopicSlideshow.UpdateComponent photoTransition is null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PhotoTransition photoTransition;
|
||||||
|
float _timeLeft;
|
||||||
|
float _totalTime = 5.0f;
|
||||||
|
|
||||||
|
public override void Run(NodeState nodeState)
|
||||||
|
{
|
||||||
|
switch (nodeState)
|
||||||
|
{
|
||||||
|
case NodeState.FirstRun:
|
||||||
|
photoTransition.Reset();
|
||||||
|
_timeLeft = _totalTime;
|
||||||
|
StartCoroutine(photoTransition.SetUp());
|
||||||
|
break;
|
||||||
|
case NodeState.Running:
|
||||||
|
_timeLeft -= Time.deltaTime;
|
||||||
|
if (_timeLeft < 0)
|
||||||
|
{
|
||||||
|
StartCoroutine(photoTransition.LoadNextImage());
|
||||||
|
_timeLeft = _totalTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (photoTransition.IsSlideshowFinished())
|
||||||
|
{
|
||||||
|
Task.SetSucceeded();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case NodeState.Aborting:
|
||||||
|
photoTransition.Reset();
|
||||||
|
_timeLeft = _totalTime;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 04127b6bcb23c4d00a2639b54db59ea2
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 90945948616a441e2ae6b7210940d695
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2cc997087ddfed54f97fe057e7bc91c9
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 87771824a45c27741989588b75cf621b
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 813571ffdd414844da8bee3252681a08
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,132 @@
|
||||||
|
//----------------------------------------------------------------.
|
||||||
|
// 球に対して、Equirectangular360/Equirectangular180 SBS/FishEye180 SBSのステレオパノラマ投影を行う.
|
||||||
|
//----------------------------------------------------------------.
|
||||||
|
Shader "Hidden/Panorama180View/panoramaSphereRendering"
|
||||||
|
{
|
||||||
|
Properties
|
||||||
|
{
|
||||||
|
_MainTex ("Texture", 2D) = "white" {}
|
||||||
|
_Intensity ("Intensity", Range (0, 10.0)) = 1.0
|
||||||
|
}
|
||||||
|
SubShader
|
||||||
|
{
|
||||||
|
Tags { "RenderType"="Opaque" "Queue"="geometry-100" }
|
||||||
|
|
||||||
|
LOD 100
|
||||||
|
ZWrite On
|
||||||
|
|
||||||
|
Pass
|
||||||
|
{
|
||||||
|
CGPROGRAM
|
||||||
|
#pragma vertex vert
|
||||||
|
#pragma fragment frag
|
||||||
|
|
||||||
|
#include "UnityCG.cginc"
|
||||||
|
|
||||||
|
#define UNITY_PI2 (UNITY_PI * 2.0)
|
||||||
|
|
||||||
|
struct appdata
|
||||||
|
{
|
||||||
|
float4 vertex : POSITION;
|
||||||
|
float2 uv : TEXCOORD0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct v2f
|
||||||
|
{
|
||||||
|
float2 uv : TEXCOORD0;
|
||||||
|
float4 vertex : SV_POSITION;
|
||||||
|
};
|
||||||
|
|
||||||
|
sampler2D _MainTex;
|
||||||
|
float4 _MainTex_ST;
|
||||||
|
float _Intensity;
|
||||||
|
int _Mode; // 0 : Equirectangular360 TopAndBottom、1 : Equirectangular180 SideBySide、2 : FishEye180 SideBySide.
|
||||||
|
|
||||||
|
int _TransitionType; // 0 : 遷移しない、 1 : フェードイン、 2 : フェードアウト、 3 : ブレンド.
|
||||||
|
sampler2D _DestTex; // 状態遷移時の移行先のテクスチャ.
|
||||||
|
float _TPos; // 遷移の移行値 (0.0 - 1.0).
|
||||||
|
float4 _FadeInColor; // フェードインの色.
|
||||||
|
float4 _FadeOutColor; // フェードアウトの色.
|
||||||
|
|
||||||
|
v2f vert (appdata v)
|
||||||
|
{
|
||||||
|
v2f o;
|
||||||
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
||||||
|
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
|
||||||
|
//o.uv = v.uv;
|
||||||
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* テクスチャ上のUV位置を計算.
|
||||||
|
*/
|
||||||
|
float2 calcUV (float2 _uv) {
|
||||||
|
float2 uv = _uv;
|
||||||
|
|
||||||
|
if (_Mode == 2) {
|
||||||
|
// FishEyeからequirectangularの変換.
|
||||||
|
// reference : http://paulbourke.net/dome/fish2/
|
||||||
|
float theta = UNITY_PI2 * (uv.x - 0.5);
|
||||||
|
float phi = UNITY_PI * (uv.y - 0.5);
|
||||||
|
float sinP = sin(phi);
|
||||||
|
float cosP = cos(phi);
|
||||||
|
float sinT = sin(theta);
|
||||||
|
float cosT = cos(theta);
|
||||||
|
float3 vDir = float3(cosP * sinT, cosP * cosT, sinP);
|
||||||
|
|
||||||
|
theta = atan2(vDir.z, vDir.x);
|
||||||
|
phi = atan2(sqrt(vDir.x * vDir.x + vDir.z * vDir.z), vDir.y);
|
||||||
|
float r = phi / UNITY_PI;
|
||||||
|
|
||||||
|
uv.x = 0.5 + r * cos(theta);
|
||||||
|
uv.y = 0.5 + r * sin(theta);
|
||||||
|
uv.x *= 0.5;
|
||||||
|
|
||||||
|
if (unity_StereoEyeIndex == 1) {
|
||||||
|
uv.x += 0.5;
|
||||||
|
}
|
||||||
|
} if (_Mode == 0) { // Equirectangular360 TopAndBottom.
|
||||||
|
uv.y *= 0.5;
|
||||||
|
if (unity_StereoEyeIndex == 0) {
|
||||||
|
uv.y += 0.5;
|
||||||
|
}
|
||||||
|
} else if (_Mode == 1) { // Equirectangular180 SideBySide.
|
||||||
|
uv.x -= 0.25;
|
||||||
|
if (unity_StereoEyeIndex == 1) {
|
||||||
|
uv.x += 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return uv;
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 frag (v2f i) : SV_Target
|
||||||
|
{
|
||||||
|
float2 uv = i.uv;
|
||||||
|
|
||||||
|
if (uv.x < 0.25 || uv.x > 0.75) return float4(0.0, 0.0, 0.0, 1.0);
|
||||||
|
|
||||||
|
// UV値を計算.
|
||||||
|
uv = calcUV(uv);
|
||||||
|
|
||||||
|
float4 col = tex2D(_MainTex, uv);
|
||||||
|
col.rgb *= _Intensity;
|
||||||
|
|
||||||
|
if (_TransitionType == 1) { // フェードイン.
|
||||||
|
col.rgb = lerp(_FadeInColor.rgb, col.rgb, _TPos);
|
||||||
|
|
||||||
|
} else if (_TransitionType == 2) { // フェードアウト.
|
||||||
|
col.rgb = lerp(col.rgb, _FadeOutColor.rgb, _TPos);
|
||||||
|
|
||||||
|
} else if (_TransitionType == 3) { // ブレンド.
|
||||||
|
float4 col2 = tex2D(_DestTex, uv);
|
||||||
|
col2.rgb *= _Intensity;
|
||||||
|
col.rgb = lerp(col.rgb, col2.rgb, _TPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
return col;
|
||||||
|
}
|
||||||
|
ENDCG
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4f38283228bf75441836d159564d7390
|
||||||
|
ShaderImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
defaultTextures: []
|
||||||
|
nonModifiableTextures: []
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2849ba4d9bb80114482417a9ca73fea4
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
|
@ -0,0 +1,97 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9dfee461a74deb944aa1179683344d46
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 23
|
||||||
|
fileIDToRecycleName:
|
||||||
|
100000: //RootNode
|
||||||
|
400000: //RootNode
|
||||||
|
2100000: background
|
||||||
|
2300000: //RootNode
|
||||||
|
3300000: //RootNode
|
||||||
|
4300000: sphere
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
importMaterials: 1
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
motionNodeName:
|
||||||
|
rigImportErrors:
|
||||||
|
rigImportWarnings:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 1
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
optimizeMeshForGPU: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
preserveHierarchy: 0
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
previousCalculatedGlobalScale: 1
|
||||||
|
hasPreviousCalculatedGlobalScale: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
importAnimation: 1
|
||||||
|
copyAvatar: 0
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 2
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
animationType: 0
|
||||||
|
humanoidOversampling: 1
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3bad6245bcc5a2341b5278255b78be8d
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,318 @@
|
||||||
|
#pragma warning disable 0414
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Panorama180View.Panorama180View
|
||||||
|
* Equirectangular180のVR表示を行う.
|
||||||
|
*/
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.Video;
|
||||||
|
using UnityEngine.Rendering;
|
||||||
|
|
||||||
|
namespace Panorama180View {
|
||||||
|
[RequireComponent(typeof(Camera))]
|
||||||
|
public class Panorama180View : MonoBehaviour
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 背景の種類.
|
||||||
|
*/
|
||||||
|
public enum BackgroundType {
|
||||||
|
Image,
|
||||||
|
Video
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* パノラマの種類.
|
||||||
|
*/
|
||||||
|
public enum PanoramaType {
|
||||||
|
Equirectangular360TopAndBottom,
|
||||||
|
Equirectangular180SideBySide,
|
||||||
|
FishEye180SideBySide
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状態遷移の種類.
|
||||||
|
*/
|
||||||
|
public enum StateTransitionType {
|
||||||
|
None, // 状態遷移なし.
|
||||||
|
FadeIn, // フェードイン (フェードイン色 ==> image).
|
||||||
|
FadeOut, // フェードアウト (image ==> フェードアウト色).
|
||||||
|
Blend, // 静止画合成 (image ==> destinationImage).
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[SerializeField] BackgroundType fileType = BackgroundType.Image; // 背景の種類.
|
||||||
|
[SerializeField] Texture2D image = null; // 背景画像のパノラマ.
|
||||||
|
[SerializeField] VideoClip video = null; // 背景動画のパノラマ.
|
||||||
|
|
||||||
|
[SerializeField] PanoramaType projectonType = PanoramaType.Equirectangular180SideBySide; // パノラマの種類.
|
||||||
|
[SerializeField, Range(1.0f, 10000.0f)] float radius = 500.0f; // 背景球の半径.
|
||||||
|
[SerializeField, Range(0.0f, 10.0f)] float intensity = 1.0f; // 明るさ.
|
||||||
|
|
||||||
|
private GameObject m_backgroundSphere = null; // 背景球.
|
||||||
|
private Material m_backgroundSphereMat = null; // 背景のマテリアル.
|
||||||
|
private GameObject m_videoG = null; // VideoClip用のGameObject.
|
||||||
|
private VideoPlayer m_videoPlayer = null; // Video再生用.
|
||||||
|
private GameObject m_audioSource = null; // Audioの発生源.
|
||||||
|
private RenderTexture m_renderTexture = null; // 1フレームのキャプチャ用.
|
||||||
|
|
||||||
|
//-------------------------------------------------.
|
||||||
|
// 以下、静止画の状態遷移用.
|
||||||
|
//-------------------------------------------------.
|
||||||
|
private StateTransitionType m_stateTransitionType = StateTransitionType.None; // 状態遷移の種類.
|
||||||
|
private Texture2D m_destinationImage; // 状態遷移時の静止画像.
|
||||||
|
private Color m_fadeInColor = Color.black; // フェイドインの色.
|
||||||
|
private Color m_fadeOutColor = Color.white; // フェイドアウトの色.
|
||||||
|
private float m_transitionStartTime = 0.0f; // 状態遷移の開始時間.
|
||||||
|
private float m_transitionInterval = 1.0f; // 状態遷移の時間間隔.
|
||||||
|
private bool m_inTransition = false; // 遷移中の場合true.
|
||||||
|
|
||||||
|
//-------------------------------------------------.
|
||||||
|
void Start () {
|
||||||
|
// 背景球を作成.
|
||||||
|
m_CreateBackgroundSphere();
|
||||||
|
|
||||||
|
// VideoPlayerの作成.
|
||||||
|
m_CreateVideoPlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update () {
|
||||||
|
if (!m_UpdateTransition()) { // 状態遷移させる.
|
||||||
|
// 背景テクスチャを指定.
|
||||||
|
m_SetBackgroundTexture();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnDestroy () {
|
||||||
|
if (m_renderTexture != null) {
|
||||||
|
Destroy(m_renderTexture);
|
||||||
|
m_renderTexture = null;
|
||||||
|
}
|
||||||
|
if (m_videoG != null) {
|
||||||
|
GameObject.Destroy(m_videoG);
|
||||||
|
m_videoG = null;
|
||||||
|
}
|
||||||
|
if (m_audioSource != null) {
|
||||||
|
GameObject.Destroy(m_audioSource);
|
||||||
|
m_audioSource = null;
|
||||||
|
}
|
||||||
|
if (m_backgroundSphereMat != null) {
|
||||||
|
Destroy(m_backgroundSphereMat);
|
||||||
|
}
|
||||||
|
if (m_backgroundSphere != null) {
|
||||||
|
GameObject.Destroy(m_backgroundSphere);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 背景球を作成.
|
||||||
|
*/
|
||||||
|
private void m_CreateBackgroundSphere () {
|
||||||
|
if (m_backgroundSphereMat == null) {
|
||||||
|
// 以下、ビルドして実行する時にShaderを読み込めるように
|
||||||
|
// Shader.FindではなくResources.Load<Shader>を使用している.
|
||||||
|
Shader shader = Resources.Load<Shader>("Shaders/panoramaSphereRendering");
|
||||||
|
m_backgroundSphereMat = new Material(shader);
|
||||||
|
}
|
||||||
|
if (m_backgroundSphere == null) {
|
||||||
|
Mesh mesh = Resources.Load<Mesh>("Objects/backgroundSphere_vr360");
|
||||||
|
m_backgroundSphere = new GameObject("panorama360Sphere");
|
||||||
|
|
||||||
|
MeshRenderer meshRenderer = m_backgroundSphere.AddComponent<MeshRenderer>();
|
||||||
|
MeshFilter meshFilter = m_backgroundSphere.AddComponent<MeshFilter>();
|
||||||
|
meshRenderer.shadowCastingMode = ShadowCastingMode.Off;
|
||||||
|
meshRenderer.receiveShadows = false;
|
||||||
|
meshRenderer.material = m_backgroundSphereMat;
|
||||||
|
meshFilter.mesh = mesh;
|
||||||
|
|
||||||
|
m_backgroundSphere.transform.localScale = new Vector3(radius, radius, radius);
|
||||||
|
m_backgroundSphere.transform.position = this.transform.position;
|
||||||
|
|
||||||
|
// Y軸中心の回転角度.
|
||||||
|
Quaternion currentCameraRot = this.transform.rotation;
|
||||||
|
float cRotY = currentCameraRot.eulerAngles.y;
|
||||||
|
m_backgroundSphere.transform.rotation = Quaternion.Euler(0, cRotY + 90, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* VideoPlayerを作成.
|
||||||
|
*/
|
||||||
|
private void m_CreateVideoPlayer () {
|
||||||
|
// Audioソース用のGameObjectを作成.
|
||||||
|
// Audioは、指定のGameObjectを中心に音が鳴る.
|
||||||
|
if (m_audioSource == null) {
|
||||||
|
m_audioSource = new GameObject("AudioSource");
|
||||||
|
m_audioSource.transform.position = this.transform.position;
|
||||||
|
}
|
||||||
|
AudioSource audioSource = m_audioSource.AddComponent<AudioSource>();
|
||||||
|
|
||||||
|
// Video再生用のGameObjectを作成.
|
||||||
|
if (m_videoG == null) {
|
||||||
|
m_videoG = new GameObject("VideoPlayer");
|
||||||
|
//m_videoG.transform.parent = m_rootG.transform;
|
||||||
|
if (m_videoG.GetComponent<VideoPlayer>() == null) {
|
||||||
|
m_videoG.AddComponent<VideoPlayer>();
|
||||||
|
}
|
||||||
|
m_videoPlayer = m_videoG.GetComponent<VideoPlayer>();
|
||||||
|
m_videoPlayer.renderMode = VideoRenderMode.RenderTexture;
|
||||||
|
m_videoPlayer.isLooping = true;
|
||||||
|
|
||||||
|
m_videoPlayer.playOnAwake = true;
|
||||||
|
m_videoPlayer.waitForFirstFrame = true; // ソースVideoの最初のフレームが表示される状態になるまで待機する.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 背景テクスチャを指定.
|
||||||
|
*/
|
||||||
|
private void m_SetBackgroundTexture () {
|
||||||
|
if (m_backgroundSphere == null || m_backgroundSphereMat == null) return;
|
||||||
|
|
||||||
|
if (fileType == BackgroundType.Image) {
|
||||||
|
// 静止画のパラメータを渡す.
|
||||||
|
m_backgroundSphere.SetActive(image != null);
|
||||||
|
m_videoG.SetActive(false);
|
||||||
|
m_audioSource.SetActive(false);
|
||||||
|
|
||||||
|
m_backgroundSphereMat.SetTexture("_MainTex", image);
|
||||||
|
m_backgroundSphereMat.SetFloat("_Intensity", intensity);
|
||||||
|
m_backgroundSphereMat.SetInt("_Mode", (int)projectonType);
|
||||||
|
m_backgroundSphereMat.SetInt("_TransitionType", 0);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// VideoClipのパラメータを渡す.
|
||||||
|
m_backgroundSphere.SetActive(video != null);
|
||||||
|
m_videoG.SetActive(video != null);
|
||||||
|
m_audioSource.SetActive(video != null);
|
||||||
|
|
||||||
|
if (m_videoPlayer == null) return;
|
||||||
|
if (m_renderTexture != null) {
|
||||||
|
if (video == null || (m_renderTexture.width != video.width || m_renderTexture.height != video.height)) {
|
||||||
|
if (m_renderTexture != null) {
|
||||||
|
Destroy(m_renderTexture);
|
||||||
|
m_renderTexture = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_videoPlayer.clip = video;
|
||||||
|
|
||||||
|
if (video != null) {
|
||||||
|
int width = (int)video.width;
|
||||||
|
int height = (int)video.height;
|
||||||
|
if (m_renderTexture == null) {
|
||||||
|
m_renderTexture = new RenderTexture(width, height, 0, RenderTextureFormat.ARGB32);
|
||||||
|
m_videoPlayer.targetTexture = m_renderTexture;
|
||||||
|
|
||||||
|
{
|
||||||
|
AudioSource audioSource = m_audioSource.GetComponent<AudioSource>();
|
||||||
|
if (audioSource != null) {
|
||||||
|
m_videoPlayer.EnableAudioTrack(0, true);
|
||||||
|
m_videoPlayer.SetTargetAudioSource(0, audioSource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_renderTexture != null) {
|
||||||
|
m_backgroundSphereMat.SetTexture("_MainTex", m_renderTexture);
|
||||||
|
m_backgroundSphereMat.SetFloat("_Intensity", intensity);
|
||||||
|
m_backgroundSphereMat.SetInt("_Mode", (int)projectonType);
|
||||||
|
m_backgroundSphereMat.SetInt("_TransitionType", 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------.
|
||||||
|
// 静止画の場合の状態遷移用.
|
||||||
|
//-----------------------------------------------------------------.
|
||||||
|
/**
|
||||||
|
* 状態遷移。Updateごとに呼ばれる.
|
||||||
|
*/
|
||||||
|
private bool m_UpdateTransition () {
|
||||||
|
if (m_stateTransitionType == StateTransitionType.None) return false;
|
||||||
|
if (fileType != BackgroundType.Image) return false;
|
||||||
|
|
||||||
|
float passTime = Time.time - m_transitionStartTime;
|
||||||
|
m_inTransition = (passTime < m_transitionInterval);
|
||||||
|
float tPos = passTime / m_transitionInterval;
|
||||||
|
tPos = Mathf.Clamp(tPos, 0.0f, 1.0f);
|
||||||
|
|
||||||
|
m_backgroundSphere.SetActive(image != null);
|
||||||
|
m_videoG.SetActive(false);
|
||||||
|
m_audioSource.SetActive(false);
|
||||||
|
|
||||||
|
m_backgroundSphereMat.SetTexture("_MainTex", image);
|
||||||
|
m_backgroundSphereMat.SetFloat("_Intensity", intensity);
|
||||||
|
m_backgroundSphereMat.SetInt("_Mode", (int)projectonType);
|
||||||
|
|
||||||
|
m_backgroundSphereMat.SetInt("_TransitionType", (int)m_stateTransitionType); // 状態遷移させるモード.
|
||||||
|
m_backgroundSphereMat.SetTexture("_DestTex", m_destinationImage);
|
||||||
|
m_backgroundSphereMat.SetFloat("_TPos", tPos);
|
||||||
|
m_backgroundSphereMat.SetVector("_FadeInColor", new Vector4(m_fadeInColor.r, m_fadeInColor.g, m_fadeInColor.b, 1.0f));
|
||||||
|
m_backgroundSphereMat.SetVector("_FadeOutColor", new Vector4(m_fadeOutColor.r, m_fadeOutColor.g, m_fadeOutColor.b, 1.0f));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------.
|
||||||
|
// 外部からアクセス.
|
||||||
|
//-----------------------------------------------------------------.
|
||||||
|
/**
|
||||||
|
* バージョン.
|
||||||
|
*/
|
||||||
|
public int GetVersion () { return 0x101; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状態遷移の変更.
|
||||||
|
*/
|
||||||
|
public void SetStateTransition (StateTransitionType type) {
|
||||||
|
if (m_inTransition) return;
|
||||||
|
m_stateTransitionType = type;
|
||||||
|
m_transitionStartTime = Time.time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Textureの変更.
|
||||||
|
*/
|
||||||
|
public void SetSrcTexture (Texture2D tex) {
|
||||||
|
if (m_inTransition) return;
|
||||||
|
image = tex;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 遷移先のTextureの変更.
|
||||||
|
*/
|
||||||
|
public void SetDestTexture (Texture2D tex) {
|
||||||
|
if (m_inTransition) return;
|
||||||
|
m_destinationImage = tex;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* フェードインの色を指定.
|
||||||
|
*/
|
||||||
|
public void SetFadeInColor (Color col) {
|
||||||
|
if (m_inTransition) return;
|
||||||
|
m_fadeInColor = col;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* フェードアウトの色を指定.
|
||||||
|
*/
|
||||||
|
public void SetFadeOutColor (Color col) {
|
||||||
|
if (m_inTransition) return;
|
||||||
|
m_fadeOutColor = col;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状態遷移の間隔(秒)を指定.
|
||||||
|
*/
|
||||||
|
public void SetTransitionInterval (float interval) {
|
||||||
|
if (m_inTransition) return;
|
||||||
|
m_transitionInterval = interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5be50d4c78681f94fa7eee0386219792
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,48 @@
|
||||||
|
//------------------------------------------------.
|
||||||
|
// Panorama180View
|
||||||
|
//------------------------------------------------.
|
||||||
|
|
||||||
|
[ How to use ] ----------------
|
||||||
|
|
||||||
|
Please turn on "Virtual Reality Supported" in "XR Settings" of "Project Settings".
|
||||||
|
|
||||||
|
1. Copy the "Panorama180View" folder to the project.
|
||||||
|
2. Added "Scripts/Panorama180View/Panorama180View" to the MainCamera component.
|
||||||
|
3. In the Inspector of MainCamera, specify the parameter of "Panorama180View".
|
||||||
|
|
||||||
|
File Type : Image or Video
|
||||||
|
Image : Still image
|
||||||
|
Video : Video Clip
|
||||||
|
ProjectionType : Equirectangular360TopAndBottom Place left eye / right eye equirectangular 360 degrees image on the top and bottom
|
||||||
|
Equirectangular180SideBySide Place left eye / right eye equirectangular 180 degrees image on the left and right
|
||||||
|
FishEye180SideBySide Place left eye / right eye fish eye 180 degrees image on the left and right
|
||||||
|
Radius : Background sphere radius
|
||||||
|
Intensity : Background brightness
|
||||||
|
|
||||||
|
|
||||||
|
[ 使い方 ] ----------------
|
||||||
|
|
||||||
|
"Project Settings"の"XR Settings"で"Virtual Reality Supported"をOnにして使用してください。
|
||||||
|
|
||||||
|
1. "Panorama180View"フォルダをプロジェクトにコピー。
|
||||||
|
2. MainCameraのコンポーネントに"Scripts/Panorama180View/Panorama180View"を追加。
|
||||||
|
3. MainCameraのInspectorで、"Panorama180View"のパラメータを指定。
|
||||||
|
File Type : Image(静止画像)/Vodeo(動画)
|
||||||
|
Image : 静止画のTexture
|
||||||
|
Video : 動画のVideo Clip
|
||||||
|
ProjectionType : Equirectangular360TopAndBottom 上下に左目/右目のEquirectangular360画像を配置
|
||||||
|
Equirectangular180SideBySide 左右に左目/右目のEquirectangular180画像を配置
|
||||||
|
FishEye180SideBySide 左右に左目/右目の魚眼180画像を配置
|
||||||
|
Radius : 背景球の半径
|
||||||
|
Intensity : 明るさ
|
||||||
|
|
||||||
|
[ Change Log ] ----------------
|
||||||
|
|
||||||
|
[03/13/2019]
|
||||||
|
|
||||||
|
- Added methods of state transition with panorama180 still image.
|
||||||
|
- Added sample scene "StateTransition".
|
||||||
|
|
||||||
|
[03/08/2019]
|
||||||
|
|
||||||
|
- first version
|
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 36363d4ad2b51704a955dd80cf2466da
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d30b9a945a08543918f700fd6e5cd57e
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 25210524aed564f88a4f2745153ad79f
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,39 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.Events;
|
||||||
|
using UnityEngine.InputSystem;
|
||||||
|
|
||||||
|
public class OnButtonPress : MonoBehaviour
|
||||||
|
{
|
||||||
|
[Tooltip("Actions to check")]
|
||||||
|
public InputAction action = null;
|
||||||
|
|
||||||
|
// When the button is pressed
|
||||||
|
public UnityEvent OnPress = new UnityEvent();
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
action.started += Pressed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
action.started -= Pressed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
action.Enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
action.Disable();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Pressed(InputAction.CallbackContext context)
|
||||||
|
{
|
||||||
|
OnPress.Invoke();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f3657284cbc344c10b72aff76116332b
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,102 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using System.IO;
|
||||||
|
using UnityEngine.Networking;
|
||||||
|
|
||||||
|
public class PhotoTransition : MonoBehaviour
|
||||||
|
{
|
||||||
|
public List<string> imgPathList = null;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
List<Texture2D> _imgList = new List<Texture2D>();
|
||||||
|
|
||||||
|
private Panorama180View.Panorama180View _panorama180View = null;
|
||||||
|
private int _state = 0;
|
||||||
|
|
||||||
|
// Start is called before the first frame update
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update is called once per frame
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator BlendImage(Texture2D srcImg, Texture2D destImg)
|
||||||
|
{
|
||||||
|
_panorama180View.SetSrcTexture(srcImg);
|
||||||
|
_panorama180View.SetDestTexture(destImg);
|
||||||
|
|
||||||
|
_panorama180View.SetTransitionInterval(2.0f);
|
||||||
|
_panorama180View.SetStateTransition(Panorama180View.Panorama180View.StateTransitionType.Blend);
|
||||||
|
|
||||||
|
yield return new WaitForSeconds(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerator LoadNextImage()
|
||||||
|
{
|
||||||
|
if (_state < imgPathList.Count - 1)
|
||||||
|
{
|
||||||
|
yield return StartCoroutine(BlendImage(_imgList[_state], _imgList[_state + 1]));
|
||||||
|
_state++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_imgList.Count < imgPathList.Count)
|
||||||
|
{
|
||||||
|
yield return StartCoroutine(ImageLoader(imgPathList[_state + 1]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsSlideshowFinished()
|
||||||
|
{
|
||||||
|
if (_state == imgPathList.Count-1) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
_imgList.Clear();
|
||||||
|
_state = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerator SetUp()
|
||||||
|
{
|
||||||
|
// Load first two images
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
yield return StartCoroutine(ImageLoader(imgPathList[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
_panorama180View = this.GetComponent<Panorama180View.Panorama180View>();
|
||||||
|
_panorama180View.SetSrcTexture(_imgList[0]);
|
||||||
|
|
||||||
|
_panorama180View.SetTransitionInterval(2.0f);
|
||||||
|
|
||||||
|
_panorama180View.SetStateTransition(Panorama180View.Panorama180View.StateTransitionType.FadeIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator ImageLoader(string path)
|
||||||
|
{
|
||||||
|
string imgPath = Path.Combine(Application.streamingAssetsPath, path);
|
||||||
|
imgPath = "file://" + imgPath; // For testing in editor
|
||||||
|
|
||||||
|
using (UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(imgPath))
|
||||||
|
{
|
||||||
|
yield return uwr.SendWebRequest();
|
||||||
|
|
||||||
|
if (uwr.result != UnityWebRequest.Result.Success)
|
||||||
|
{
|
||||||
|
Debug.Log(uwr.error);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Texture2D tex = DownloadHandlerTexture.GetContent(uwr);
|
||||||
|
_imgList.Add(tex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0f6672e37ce3d4ed9915e5766be6fa61
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a48f0d3fb3f0142318353e12ca0153e8
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c4e2c37d42f614521ab25c2e722b8c18
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 19 MiB |
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: be1106f0c2add453d93a76eb15c5e86f
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 19 MiB |
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 30757dc81dd964d269beda18a3f63003
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 21 MiB |
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e438032979ef740508c32bd4e4304788
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 17 MiB |
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6151f6d8480154c7895ec28ded2c68c0
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 18 MiB |
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 698877680d23e46d58fd7d678938f7a0
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue