//3D座標を指定するUGUIの場合は親を設定するメリットがないので用意しない /// <summary> /// 指定された場所に指定された設定でUGUIのメッセージを表示する /// </summary> public void ShowMessage(string message, Vector3 position, Quaternion rotation, FontSettings settings) { AbstractUGUIText text = textPool.GetInstance(); text.transform.SetPositionAndRotation(uiCamera.WorldToScreenPoint(position), rotation); InitializeUGUIText(text, message, settings); StartCoroutine(settings.showAnimation.GetAnimation(text, settings.showAnimationTime).OnCompleted(() => { if (settings.limitLife <= 0.0f) { StartCoroutine(settings.hideAnimation.GetAnimation(text, settings.hideAnimationTime).OnCompleted(() => { textPool.ReturnInstance(text); })); } else { KKUtilities.Delay(settings.limitLife, () => { StartCoroutine(settings.hideAnimation.GetAnimation(text, settings.hideAnimationTime).OnCompleted(() => { textPool.ReturnInstance(text); })); }, this); } })); }
/// <summary> /// 指定された場所に指定された設定でUGUIのメッセージを表示する /// </summary> public void ShowMessage(string message, Vector2 localPosition, Quaternion localRotation, Transform parent, FontSettings settings) { AbstractUGUIText text = textPool.GetInstance(); InitializeUGUIText(text, message, settings); text.RectTransform.SetParent(parent); text.RectTransform.anchoredPosition = localPosition; text.RectTransform.localRotation = localRotation; StartCoroutine(settings.showAnimation.GetAnimation(text, settings.showAnimationTime).OnCompleted(() => { if (settings.limitLife <= 0.0f) { StartCoroutine(settings.hideAnimation.GetAnimation(text, settings.hideAnimationTime).OnCompleted(() => { textPool.ReturnInstance(text); })); } else { KKUtilities.Delay(settings.limitLife, () => { StartCoroutine(settings.hideAnimation.GetAnimation(text, settings.hideAnimationTime).OnCompleted(() => { textPool.ReturnInstance(text); })); }, this); } })); }
public void StartCountDown(Action onEndCountDown, Action onNoThanks) { if (countDownCoroutine != null) { StopCoroutine(countDownCoroutine); } noThanksButton.OnClickEvent.RemoveAllListeners(); noThanksButton.AddListener(() => { if (onNoThanks != null) { onNoThanks.Invoke(); } }); countDownCoroutine = StartCoroutine(KKUtilities.FloatLerp(timeLimit, (t) => { timeLimitGauge.Image.fillAmount = 1.0f - t; }).OnCompleted(() => { if (onEndCountDown != null) { onEndCountDown.Invoke(); } gameObject.SetActive(false); countDownCoroutine = null; })); }
/// <summary> /// 指定された場所に指定された設定で3Dのメッセージを表示する /// </summary> public void ShowMessage3D(string message, Vector3 position, Quaternion rotation, Transform parent, FontSettings settings) { AbstractTextMesh text = textMeshPool.GetInstance(); InitializeTextMesh(text, message, settings); text.transform.SetParent(parent); text.transform.SetPositionAndRotation(position, rotation); StartCoroutine(settings.showAnimation.GetAnimation(text, settings.showAnimationTime).OnCompleted(() => { if (settings.limitLife <= 0.0f) { StartCoroutine(settings.hideAnimation.GetAnimation(text, settings.hideAnimationTime).OnCompleted(() => { textMeshPool.ReturnInstance(text); })); } else { KKUtilities.Delay(settings.limitLife, () => { StartCoroutine(settings.hideAnimation.GetAnimation(text, settings.hideAnimationTime).OnCompleted(() => { textMeshPool.ReturnInstance(text); })); }, this); } })); }
void Update() { if (player == null) { return; } if (!IsWork) { return; } if (Input.GetKeyDown(KeyCode.E)) { ChangeMouseControl(); } Vector2 inputVector = GetInputVector(); rotationX += inputVector.x * rotationSpeedX * Time.deltaTime; rotationY += inputVector.y * rotationSpeedY * Time.deltaTime; rotationX = rotationX % 360.0f; rotationY = Mathf.Clamp(rotationY, minRotationY, maxRotationY); Vector3 targetPosition = transform.position + KKUtilities.SphereCoordinate(rotationX, rotationY, 1.0f); transform.LookAt(targetPosition); player.transform.localRotation = Quaternion.Euler(new Vector3(0.0f, transform.eulerAngles.y, 0.0f)); }
/// <summary> /// 指定された地点にパーティクルを配置し、limitLife秒後にactiveをfalseにする /// </summary> public PoolMonoBehaviour Play(string name, Vector3 position, Quaternion rotation, float limitLife) { PoolMonoBehaviour particle = Play(name, position, rotation); KKUtilities.Delay(limitLife, () => particle.gameObject.SetActive(false), this); return(particle); }
/// <summary> /// 指定された地点にパーティクルを配置し、limitLife秒後にactiveをfalseにする /// </summary> public PoolMonoBehaviour Play(string name, Vector3 localPosition, Quaternion localRotation, float limitLife, Transform parent) { PoolMonoBehaviour particle = Play(name, localPosition, localRotation, parent); KKUtilities.Delay(limitLife, () => particle.gameObject.SetActive(false), this); return(particle); }
public PoolMonoBehaviour Play(string name, Vector3 position, float limitLife, Transform parent) { PoolMonoBehaviour spriteAnimation = Play(name, position, parent); KKUtilities.Delay(limitLife, () => spriteAnimation.gameObject.SetActive(false), this); return(spriteAnimation); }
public static Coroutine Fade(this UGUIParts self, float duration, float targetAlpha) { var startAlpha = self.Alpha; return(self.StartCoroutine(KKUtilities.FloatLerp(duration, (t) => { self.Alpha = Mathf.Lerp(startAlpha, targetAlpha, Easing.InQuad(t)); }))); }
public static Coroutine LocalMove(this MonoBehaviour mono, float duration, Vector3 targetPos, EaseType ease, bool isScalable = true) { Vector3 startPos = mono.transform.localPosition; return(mono.StartCoroutine(KKUtilities.FloatLerp(duration, (t) => { mono.transform.localPosition = Vector3.LerpUnclamped(startPos, targetPos, Easing.GetEase(t, ease)); }, isScalable))); }
public static Coroutine PopUp(this UGUIParts self, float duration) { self.transform.localScale = Vector3.zero; self.gameObject.SetActive(true); return(self.StartCoroutine(KKUtilities.FloatLerp(duration, (t) => { self.transform.localScale = Vector3.LerpUnclamped(Vector3.zero, Vector3.one, Easing.OutBack(t)); }))); }
protected override IEnumerator TutorialAnimation() { while (true) { yield return(KKUtilities.FloatLerp(speed, (t) => { fingerImage.RectTransform.anchoredPosition = Vector2.LerpUnclamped(startPoint.anchoredPosition, endPoint.anchoredPosition, curve.Evaluate(t)); })); } }
public void HideMenu() { StopAllCoroutines(); StartCoroutine(KKUtilities.FloatLerp(0.3f, (t) => { container.alpha = Mathf.Lerp(1.0f, 0.0f, t); }).OnCompleted(() => { container.gameObject.SetActive(false); })); }
protected override IEnumerator TutorialAnimation() { float maxScale = 1.2f; while (true) { yield return(KKUtilities.FloatLerp(speed, (t) => { fingerImage.transform.localScale = Vector3.Lerp(Vector3.one, Vector3.one * maxScale, curve.Evaluate(t)); })); } }
void ChangeVolume(float startVolume, float endVolume, float duration, Action callback = null) { StartCoroutine(KKUtilities.FloatLerp(duration, (t) => { Volume = Mathf.Lerp(startVolume, endVolume, t); }).OnCompleted(() => { if (callback != null) { callback.Invoke(); } })); }
IEnumerator NotificationAnimation() { var wait = new WaitForSeconds(0.75f); while (true) { yield return(KKUtilities.FloatLerp(2.0f, (t) => { transform.localScale = Vector3.LerpUnclamped(Vector3.one, Vector3.one * 1.2f, scaleCurve.Evaluate(t)); })); yield return(wait); } }
public virtual void Hide() { StartCoroutine(KKUtilities.FloatLerp(showAnimationTime * 0.5f, (t) => { panel.Alpha = Mathf.Lerp(panel.DefaultAlpha, 0.0f, Easing.OutQuad(t)); })); StartCoroutine(hideAnimation.GetAnimation(this, hideAnimationTime).OnCompleted(() => { panel.gameObject.SetActive(false); Container.SetActive(false); OnHideAnimationEnd.Invoke(); })); }
//loopするSEを鳴らしたい場合は止める条件を設定する public void LoopPlay(AudioClip clip, float limitLife, Action callback, float volume = 1.0f, float pitch = 1.0f) { Source.loop = true; Play(clip, volume, pitch); KKUtilities.Delay(limitLife, () => { Source.Stop(); if (callback != null) { callback.Invoke(); } }, this); }
/// <summary> /// 指定された地点に瞬間的なパーティクルを再生する /// </summary> public void PlayOneShot(string name, Vector3 position, Quaternion rotation, Transform parent) { MomentParticle particle = GetMomentParticle(name); if (particle == null) { return; } particle.transform.SetPositionAndRotation(position, rotation); particle.transform.SetParent(parent); particle.Play(); KKUtilities.Delay(0.1f, () => particle.transform.SetParent(transform), this); }
public virtual void Show() { panel.gameObject.SetActive(true); Container.SetActive(true); Alpha = 1; StartCoroutine(KKUtilities.FloatLerp(showAnimationTime * 0.5f, (t) => { panel.Alpha = Mathf.Lerp(0.0f, panel.DefaultAlpha, Easing.InQuad(t)); })); StartCoroutine(showAnimation.GetAnimation(this, showAnimationTime).OnCompleted(() => { OnShowAnimationEnd.Invoke(); })); }
protected override void OnClick() { Button.interactable = false; Vector3 startPos = buttonImage.transform.position; Vector3 endPos = shadowImage.transform.position; StartCoroutine(KKUtilities.FloatLerp(0.15f, (t) => { buttonImage.transform.position = Vector3.Lerp(startPos, endPos, Easing.Yoyo(t)); }, false).OnCompleted(() => { base.OnClick(); Button.interactable = true; })); }
IEnumerator Fade(Color startColor, Color endColor, float duration, Action endCallback, bool finishedPanelActive) { panel.color = startColor; panel.gameObject.SetActive(true); yield return(StartCoroutine(KKUtilities.FloatLerp(duration, (t) => { panel.color = Color.Lerp(startColor, endColor, t); }) )); fadeCoroutine = null; panel.gameObject.SetActive(finishedPanelActive); if (endCallback != null) { endCallback.Invoke(); } }
/// <summary> /// 指定された地点に瞬間的なパーティクルを再生する /// </summary> public void PlayOneShot(string name, Vector3 position, Quaternion rotation, Color color, Transform parent) { MomentParticle particle = GetMomentParticle(name); if (particle == null) { return; } particle.transform.SetPositionAndRotation(position, rotation); particle.transform.SetParent(parent); var main = particle.ParticleSystem.main; var defaultColor = main.startColor; main.startColor = color; particle.Play(); main.startColor = defaultColor; KKUtilities.Delay(main.duration, () => particle.transform.SetParent(transform), this); }
void ChangeStateAnimation() { StopAllCoroutines(); var start = circle.RectTransform.anchoredPosition; var end = IsOn ? selectedCirclePosition : unSelectedCirclePosition; if (!gameObject.activeInHierarchy) { Refresh(); return; } AudioManager.Instance.PlaySE("Click", 0.3f); StartCoroutine(KKUtilities.FloatLerp(0.15f, (t) => { circle.RectTransform.anchoredPosition = Vector2.Lerp(start, end, Easing.OutQuad(t)); }).OnCompleted(() => { Refresh(); })); }
public void HideDialog() { if (currentViewDialog.Count <= 0) { return; } Dialog dialog = currentViewDialog.Dequeue(); DialogPool dialogPool; if (!dialogDictionary.TryGetValue(dialog.DialogName, out dialogPool)) { return; } StartCoroutine(KKUtilities.WaitAction(dialog.OnHideAnimationEnd, () => { dialogPool.ReturnInstance(dialog); })); dialog.Hide(); }
public void LoadSceneAsync(string loadSceneName, Color fadeColor, Action <float> loading, float duration = 1.0f) { FadeOut(duration, fadeColor, () => { AsyncOperation asyncOperation = LoadSceneAsync(loadSceneName); bool isDone = false; KKUtilities.While(() => { if (loading != null) { loading.Invoke(asyncOperation.progress); } isDone = asyncOperation.isDone; //ロードが終わったらフェードアウトする if (isDone) { FadeIn(duration, fadeColor); } return(!isDone); }, this); }); }
public MyCoroutine GetAnimation(UIParts parts, float duration) { return(new MyCoroutine(KKUtilities.FloatLerp(duration, (t) => logic(parts, t)))); }
/// <summary> /// predicateが真を返すまで待機し、その後actionを実行する /// </summary> public static Coroutine WaitUntil(this MonoBehaviour mono, Func <bool> predicate, Action action) { return(mono.StartCoroutine(KKUtilities.WaitUntil(predicate, action))); }
/// <summary> /// アクションが呼ばれるまで待機する /// </summary> public static Coroutine WaitAction <T1, T2>(this MonoBehaviour mono, MyUnityEvent <T1, T2> action, Action callback = null) { return(mono.StartCoroutine(KKUtilities.WaitAction(action, callback))); }
/// <summary> /// 1フレームに1回actionを実行する(updateの戻り値は継続するか?) /// </summary> public static Coroutine DoWhile(this MonoBehaviour mono, Func <bool> update) { return(mono.StartCoroutine(KKUtilities.DoWhile(update))); }