|
|
|
@ -10,12 +10,9 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
[SerializeField] |
|
|
|
[SerializeField] |
|
|
|
private bool standby = true; |
|
|
|
private bool standby = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Range(0, 15)] |
|
|
|
[Range(0, 15)] |
|
|
|
public float disappearTime = 5; |
|
|
|
public float disappearTime = 5; |
|
|
|
|
|
|
|
|
|
|
|
//public Material mat; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Area area; |
|
|
|
public Area area; |
|
|
|
public List<Area> AppearArea = new List<Area>(); |
|
|
|
public List<Area> AppearArea = new List<Area>(); |
|
|
|
|
|
|
|
|
|
|
|
@ -24,9 +21,6 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
[SerializeField] |
|
|
|
[SerializeField] |
|
|
|
private RectTransform fakeButton; |
|
|
|
private RectTransform fakeButton; |
|
|
|
|
|
|
|
|
|
|
|
private const float checktriggerColliderTime = 0.5f; |
|
|
|
|
|
|
|
private float triggerColliderTimer; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[SerializeField] |
|
|
|
[SerializeField] |
|
|
|
List<CharacterDummy> specificPositions = new List<CharacterDummy>(); |
|
|
|
List<CharacterDummy> specificPositions = new List<CharacterDummy>(); |
|
|
|
|
|
|
|
|
|
|
|
@ -42,28 +36,34 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
int trigger_clip_index = 0; |
|
|
|
int trigger_clip_index = 0; |
|
|
|
[SerializeField] |
|
|
|
[SerializeField] |
|
|
|
private DShowMoviePlayer[] players; |
|
|
|
private DShowMoviePlayer[] players; |
|
|
|
//private MeshRenderer m_meshRender; |
|
|
|
|
|
|
|
public Color color; |
|
|
|
|
|
|
|
private bool isSleep; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public float videoStopTime = 1.5f; |
|
|
|
public float videoStopTime = 1.5f; |
|
|
|
|
|
|
|
|
|
|
|
const int TRIGGER = 0; |
|
|
|
enum State |
|
|
|
const int STANDBY = 1; |
|
|
|
{ |
|
|
|
|
|
|
|
TRIGGER = 0, |
|
|
|
|
|
|
|
STANDBY = 1, |
|
|
|
|
|
|
|
SLEEP = 2 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
State state = State.SLEEP; |
|
|
|
|
|
|
|
DShowMoviePlayer StatePlayer { get { return players[(int)state]; } } |
|
|
|
|
|
|
|
MeshRenderer StateRenderer { get { return renderers[(int)state]; } } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MeshRenderer[] renderers; |
|
|
|
|
|
|
|
|
|
|
|
int Status { get { return System.Convert.ToInt32(standby); } } |
|
|
|
bool isTriggered = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Coroutine flow = null; |
|
|
|
|
|
|
|
|
|
|
|
List<MeshRenderer> renderers; |
|
|
|
[SerializeField] |
|
|
|
|
|
|
|
string debugString; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void Awake() |
|
|
|
private void Awake() |
|
|
|
{ |
|
|
|
{ |
|
|
|
renderers = new List<MeshRenderer>(); |
|
|
|
renderers = GetComponentsInChildren<MeshRenderer>(); |
|
|
|
renderers.AddRange(GetComponentsInChildren<MeshRenderer>()); |
|
|
|
if (renderers.Length != 2) |
|
|
|
if (renderers.Count != 2) |
|
|
|
Debug.LogWarningFormat("{0} renderer count is {1}", gameObject.name, renderers.Length); |
|
|
|
Debug.LogWarningFormat("{0} renderer count is {1}", gameObject.name, renderers.Count); |
|
|
|
|
|
|
|
//m_meshRender = GetComponent<MeshRenderer>(); |
|
|
|
//m_meshRender = GetComponent<MeshRenderer>(); |
|
|
|
//mat = new Material(Shader.Find("Unlit/ColorTransparent")); |
|
|
|
//mat = new Material(Shader.Find("Unlit/ColorTransparent")); |
|
|
|
//m_meshRender.material = mat; |
|
|
|
//m_meshRender.material = mat; |
|
|
|
@ -100,7 +100,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
fakeButton.anchorMin = new Vector2(0, 0); |
|
|
|
fakeButton.anchorMin = new Vector2(0, 0); |
|
|
|
fakeButton.anchorMax = new Vector2(0, 0); |
|
|
|
fakeButton.anchorMax = new Vector2(0, 0); |
|
|
|
fakeButton.pivot = new Vector2(0.5f, 0.5f); |
|
|
|
fakeButton.pivot = new Vector2(0.5f, 0.5f); |
|
|
|
var standby_scale = renderers[STANDBY].transform.localScale; |
|
|
|
var standby_scale = renderers[(int)State.STANDBY].transform.localScale; |
|
|
|
fakeButton.sizeDelta = new Vector2(standby_scale.x, standby_scale.y) * FrozenScreenToWorldSpace.Instance.finalPixelsByMeter; |
|
|
|
fakeButton.sizeDelta = new Vector2(standby_scale.x, standby_scale.y) * FrozenScreenToWorldSpace.Instance.finalPixelsByMeter; |
|
|
|
fakeButton.anchoredPosition3D = new Vector3(0, 0, 0); |
|
|
|
fakeButton.anchoredPosition3D = new Vector3(0, 0, 0); |
|
|
|
fakeButton.localScale = Vector3.one; |
|
|
|
fakeButton.localScale = Vector3.one; |
|
|
|
@ -115,7 +115,6 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
{ |
|
|
|
{ |
|
|
|
foreach (var rdr in renderers) |
|
|
|
foreach (var rdr in renderers) |
|
|
|
{ |
|
|
|
{ |
|
|
|
//rdr.sharedMaterial = new Material(rdr.sharedMaterial); |
|
|
|
|
|
|
|
rdr.material.mainTextureScale = new Vector2(1, -1); |
|
|
|
rdr.material.mainTextureScale = new Vector2(1, -1); |
|
|
|
rdr.material.mainTextureOffset = new Vector2(0, -1); |
|
|
|
rdr.material.mainTextureOffset = new Vector2(0, -1); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -123,13 +122,15 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
|
|
|
|
|
|
|
|
private void OnEnable() |
|
|
|
private void OnEnable() |
|
|
|
{ |
|
|
|
{ |
|
|
|
standby = true; |
|
|
|
|
|
|
|
isSleep = false; |
|
|
|
|
|
|
|
StartCoroutine(PlayStandbyOnStart()); |
|
|
|
|
|
|
|
InitialTouchButton(); |
|
|
|
InitialTouchButton(); |
|
|
|
StartCoroutine(RandomPosNoTriggerOther()); |
|
|
|
ResetFlow(); |
|
|
|
color = new Color(1, 1, 1, 0); |
|
|
|
//standby = true; |
|
|
|
StartCoroutine(Sleep()); |
|
|
|
//isSleep = false; |
|
|
|
|
|
|
|
//StartCoroutine(PlayStandbyOnStart()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//StartCoroutine(RandomPosNoTriggerOther()); |
|
|
|
|
|
|
|
//color = new Color(1, 1, 1, 0); |
|
|
|
|
|
|
|
//StartCoroutine(Sleep()); |
|
|
|
if (fakeButton != null) |
|
|
|
if (fakeButton != null) |
|
|
|
fakeButton.gameObject.SetActive(true); |
|
|
|
fakeButton.gameObject.SetActive(true); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -140,6 +141,108 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
fakeButton.gameObject.SetActive(false); |
|
|
|
fakeButton.gameObject.SetActive(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void ResetFlow() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (flow != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
StopCoroutine(flow); |
|
|
|
|
|
|
|
flow = null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
isTriggered = false; |
|
|
|
|
|
|
|
foreach (var rdr in renderers) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
rdr.material.color = new Color(1, 1, 1, 0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
foreach (var ply in players) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ply.Pause(); |
|
|
|
|
|
|
|
ply.Frame = 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
flow = StartCoroutine(Flow()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IEnumerator Flow() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
debugString = "setup"; |
|
|
|
|
|
|
|
// setup |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (specificPositions.Count > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
SetSpecificPos(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
RandomAppearWall(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
roaming_seed = Random.Range(0.0f, 1.0f); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trigger_clip_index = ++trigger_clip_index % triggerClips.Count; |
|
|
|
|
|
|
|
players[(int)State.TRIGGER].VideoAsset = triggerClips[trigger_clip_index]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
yield return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugString = "STANDBY"; |
|
|
|
|
|
|
|
// standby |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
state = State.STANDBY; |
|
|
|
|
|
|
|
var player = StatePlayer; |
|
|
|
|
|
|
|
player.Loop = isStandbyLoop; |
|
|
|
|
|
|
|
player.Play(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (isTriggered == false) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
debugString = "STANDBY is not triggered"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (player.Loop == false) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (player.IsPlaying == false) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
player.Pause(); |
|
|
|
|
|
|
|
player.Frame = player.TotalNumFrames; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
yield return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugString = "TRIGGER"; |
|
|
|
|
|
|
|
// trigger |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
state = State.TRIGGER; |
|
|
|
|
|
|
|
var player = StatePlayer; |
|
|
|
|
|
|
|
player.Play(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (player.IsPlaying) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
debugString = "TRIGGER is playing"; |
|
|
|
|
|
|
|
yield return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
player.Pause(); |
|
|
|
|
|
|
|
player.Frame = player.TotalNumFrames; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugString = "TRIGGER is stopped"; |
|
|
|
|
|
|
|
yield return new WaitForSeconds(videoStopTime); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugString = "SLEEP"; |
|
|
|
|
|
|
|
// sleep |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
state = State.SLEEP; |
|
|
|
|
|
|
|
yield return new WaitForSeconds(disappearTime); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
flow = null; |
|
|
|
|
|
|
|
yield return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
IEnumerator PlayStandbyOnStart() |
|
|
|
IEnumerator PlayStandbyOnStart() |
|
|
|
{ |
|
|
|
{ |
|
|
|
DShowMoviePlayer player = CurrentPlayer; |
|
|
|
DShowMoviePlayer player = CurrentPlayer; |
|
|
|
@ -151,46 +254,68 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
yield return null; |
|
|
|
yield return null; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
*/ |
|
|
|
void Update() |
|
|
|
void Update() |
|
|
|
{ |
|
|
|
{ |
|
|
|
/* |
|
|
|
for (int i = 0; i < players.Length; i++) |
|
|
|
if (Input.GetKeyDown(KeyCode.R)) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
if (!isTriggerCollider) |
|
|
|
if (players[i].IsPlaying) |
|
|
|
StartCoroutine(RandomPosNoTriggerOther()); |
|
|
|
renderers[i].material.mainTexture = players[i].Texture; |
|
|
|
} |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
UpdateMaterial(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isSleep == false) |
|
|
|
// standby material |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (standby == false) |
|
|
|
float smooth = Time.deltaTime * 2.0f; |
|
|
|
{ |
|
|
|
if (state != State.STANDBY && isStandbyLoop == false) |
|
|
|
CheckPlayFinished(); |
|
|
|
smooth = 1.0f; |
|
|
|
|
|
|
|
float alpha = System.Convert.ToInt32(state == State.STANDBY); |
|
|
|
|
|
|
|
var mat = renderers[(int)State.STANDBY].material; |
|
|
|
|
|
|
|
mat.color = new Color(1, 1, 1, Mathf.Lerp(mat.color.a, alpha, smooth)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var mat = renderers[STANDBY].material; |
|
|
|
// trigger material |
|
|
|
float a = Mathf.Lerp(mat.color.a, 0.0f, Time.deltaTime); |
|
|
|
{ |
|
|
|
mat.color = new Color(1, 1, 1, a); |
|
|
|
float smooth = Time.deltaTime * 2.0f; |
|
|
|
} |
|
|
|
if (state == State.TRIGGER) |
|
|
|
else if (standby && roaming > 0.0f) |
|
|
|
smooth = 1.0f; |
|
|
|
{ |
|
|
|
float alpha = System.Convert.ToInt32(state == State.TRIGGER); |
|
|
|
UpdateRoamingPosition(); |
|
|
|
var mat = renderers[(int)State.TRIGGER].material; |
|
|
|
UpdateWallRoiFromPosition(); |
|
|
|
mat.color = new Color(1, 1, 1, Mathf.Lerp(mat.color.a, alpha, smooth)); |
|
|
|
UpdateButtonPos(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isTriggerCollider) |
|
|
|
switch (state) |
|
|
|
CheckTriggerCollider(); |
|
|
|
{ |
|
|
|
} |
|
|
|
case State.STANDBY: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (roaming > 0.0f) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
UpdateRoamingPosition(); |
|
|
|
|
|
|
|
UpdateWallRoiFromPosition(); |
|
|
|
|
|
|
|
UpdateButtonPos(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case State.TRIGGER: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
void CheckTriggerCollider() |
|
|
|
} |
|
|
|
{ |
|
|
|
break; |
|
|
|
triggerColliderTimer -= Time.deltaTime; |
|
|
|
case State.SLEEP: |
|
|
|
if (triggerColliderTimer <= 0) |
|
|
|
{ |
|
|
|
isTriggerCollider = false; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (Input.GetKeyDown(KeyCode.R)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ResetFlow(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (flow == null) |
|
|
|
|
|
|
|
ResetFlow(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void UpdateRoamingPosition() |
|
|
|
void UpdateRoamingPosition() |
|
|
|
@ -198,7 +323,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
float noise = Mathf.PerlinNoise(Time.time * 0.4f, roaming_seed) > 0.5f ? 1.0f : -1.0f; |
|
|
|
float noise = Mathf.PerlinNoise(Time.time * 0.4f, roaming_seed) > 0.5f ? 1.0f : -1.0f; |
|
|
|
noise *= roaming * Time.deltaTime; |
|
|
|
noise *= roaming * Time.deltaTime; |
|
|
|
//float padding = transform.localScale.x * 0.5f; |
|
|
|
//float padding = transform.localScale.x * 0.5f; |
|
|
|
float padding = renderers[TRIGGER].transform.localScale.x * 0.5f; |
|
|
|
float padding = renderers[(int)State.TRIGGER].transform.localScale.x * 0.5f; |
|
|
|
Vector3 pos = transform.position; |
|
|
|
Vector3 pos = transform.position; |
|
|
|
switch (area) |
|
|
|
switch (area) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -220,21 +345,6 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void UpdateMaterial() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var mat = CurrentRenderer.material; |
|
|
|
|
|
|
|
mat.mainTexture = CurrentPlayer.Texture; |
|
|
|
|
|
|
|
mat.SetColor("_Color", color); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CheckPlayFinished() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (CurrentPlayer.IsFinished) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
StartCoroutine(Sleep()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void RandomAppearWall() |
|
|
|
void RandomAppearWall() |
|
|
|
{ |
|
|
|
{ |
|
|
|
Vector3 newPos = Vector3.zero; |
|
|
|
Vector3 newPos = Vector3.zero; |
|
|
|
@ -262,7 +372,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
|
|
|
|
|
|
|
|
void RandomPos() |
|
|
|
void RandomPos() |
|
|
|
{ |
|
|
|
{ |
|
|
|
float minX = renderers[TRIGGER].transform.localScale.x / 2; |
|
|
|
float minX = renderers[(int)State.TRIGGER].transform.localScale.x / 2; |
|
|
|
#if true |
|
|
|
#if true |
|
|
|
switch (area) |
|
|
|
switch (area) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -318,7 +428,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
void UpdateButtonPos() |
|
|
|
void UpdateButtonPos() |
|
|
|
{ |
|
|
|
{ |
|
|
|
//Vector2 newScreenPos = FrozenScreenToWorldSpace.Instance.GetFinalScreenPos(area, wallRoi); |
|
|
|
//Vector2 newScreenPos = FrozenScreenToWorldSpace.Instance.GetFinalScreenPos(area, wallRoi); |
|
|
|
var roi = FrozenScreenToWorldSpace.Instance.GetWallRoiFromPosition(area, renderers[STANDBY].transform.position); |
|
|
|
var roi = FrozenScreenToWorldSpace.Instance.GetWallRoiFromPosition(area, renderers[(int)State.STANDBY].transform.position); |
|
|
|
Vector2 newScreenPos = FrozenScreenToWorldSpace.Instance.GetFinalScreenPos(area, roi); |
|
|
|
Vector2 newScreenPos = FrozenScreenToWorldSpace.Instance.GetFinalScreenPos(area, roi); |
|
|
|
fakeButton.anchoredPosition = newScreenPos; |
|
|
|
fakeButton.anchoredPosition = newScreenPos; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -341,117 +451,9 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
|
|
|
|
|
|
|
|
private void Trigger(PointerEventData data) |
|
|
|
private void Trigger(PointerEventData data) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (!standby || isSleep) |
|
|
|
if (state != State.STANDBY) |
|
|
|
return; |
|
|
|
return; |
|
|
|
standby = false; |
|
|
|
|
|
|
|
CurrentPlayer.Play(); |
|
|
|
|
|
|
|
CurrentRenderer.material.mainTexture = CurrentPlayer.Texture; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Idle() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
standby = true; |
|
|
|
|
|
|
|
CurrentPlayer.Play(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DShowMoviePlayer CurrentPlayer { get { return players[Status]; } } |
|
|
|
isTriggered = true; |
|
|
|
MeshRenderer CurrentRenderer { get { return renderers[Status]; } } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IEnumerator Sleep() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
standby = false; |
|
|
|
|
|
|
|
isSleep = true; |
|
|
|
|
|
|
|
yield return StartCoroutine(WaitVideoStopTimeFadeOut()); |
|
|
|
|
|
|
|
yield return new WaitForSeconds(GetDisappear()); |
|
|
|
|
|
|
|
yield return StartCoroutine(RandomPosNoTriggerOther()); |
|
|
|
|
|
|
|
yield return StartCoroutine(WaitVideoStandbyFadeIn()); |
|
|
|
|
|
|
|
isSleep = false; |
|
|
|
|
|
|
|
Idle(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IEnumerator Fade(float targetA) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
float value = 0; |
|
|
|
|
|
|
|
float origin = color.a; |
|
|
|
|
|
|
|
while (value < 1) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
value = Mathf.Clamp(value + Time.deltaTime, 0, 1); |
|
|
|
|
|
|
|
color.a = Mathf.Lerp(origin, targetA, value); |
|
|
|
|
|
|
|
yield return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
color.a = targetA; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IEnumerator WaitVideoStandbyFadeIn() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
standby = true; |
|
|
|
|
|
|
|
CurrentPlayer.Play(); |
|
|
|
|
|
|
|
CurrentRenderer.material.mainTexture = CurrentPlayer.Texture; |
|
|
|
|
|
|
|
yield return StartCoroutine(Fade(1)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IEnumerator WaitVideoStopTimeFadeOut() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
yield return new WaitForSeconds(videoStopTime); |
|
|
|
|
|
|
|
yield return StartCoroutine(Fade(0)); |
|
|
|
|
|
|
|
CurrentPlayer.Pause(); |
|
|
|
|
|
|
|
CurrentPlayer.Frame = 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public bool isTriggerCollider; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnTriggerExit(Collider other) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
isTriggerCollider = false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void OnTriggerStay(Collider other) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
isTriggerCollider = true; |
|
|
|
|
|
|
|
triggerColliderTimer = checktriggerColliderTime; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnTriggerEnter(Collider other) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
isTriggerCollider = true; |
|
|
|
|
|
|
|
triggerColliderTimer = checktriggerColliderTime; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public float GetDisappear() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return disappearTime; |
|
|
|
|
|
|
|
/* |
|
|
|
|
|
|
|
float distime = disappearTime - Random.Range(0, disappearTime / 2); |
|
|
|
|
|
|
|
distime = disappearTime * distime - distime * distime + 0.5f * distime; |
|
|
|
|
|
|
|
return distime; |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IEnumerator RandomPosNoTriggerOther() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (specificPositions.Count > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
SetSpecificPos(); |
|
|
|
|
|
|
|
yield return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
RandomAppearWall(); |
|
|
|
|
|
|
|
yield return new WaitForSeconds(0.1f); |
|
|
|
|
|
|
|
while (isTriggerCollider) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
RandomAppearWall(); |
|
|
|
|
|
|
|
yield return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
roaming_seed = Random.Range(0.0f, 1.0f); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trigger_clip_index = ++trigger_clip_index % triggerClips.Count; |
|
|
|
|
|
|
|
players[0].VideoAsset = triggerClips[trigger_clip_index]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
yield return null; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|