質問編集履歴

1

説明不足でしたので、追記させていただきました。

2022/04/21 17:07

投稿

39fiesta
39fiesta

スコア3

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,45 @@
1
1
  http://hoge465.seesaa.net/article/421400008.html
2
2
 
3
+ こちらのサイトを参考に、パネルに下記のスクリプトをアタッチしたのですが、ボタンUI
3
- こちらサイトを参考パネルにこのサイトのスリプトをアタッチしたのですが、ボタンのOnClick()で適切に呼び出す方法がわません。どのように実装すれば良いのか教えていただけましたら幸いです。
4
+ OnClick()の部分にパネルオブジェクトを入れ、functionでSlideInとSlideOutを設定したをそれぞれ作ったのですが、SlideOut()動きません。どのように実装すれば正しく使えるのか教えていただけましたら幸いです。
5
+
6
+ ```C#
7
+ using UnityEngine;
8
+ using UnityEngine.UI;
9
+ using System.Collections;
10
+
11
+ public class PanelSlider : MonoBehaviour {
12
+ public AnimationCurve animCurve = AnimationCurve.Linear(0, 0, 1, 1);
13
+ public Vector3 inPosition; // スライドイン後の位置
14
+ public Vector3 outPosition; // スライドアウト後の位置
15
+ public float duration = 1.0f; // スライド時間(秒)
16
+
17
+ // スライドイン(Pauseボタンが押されたときに、これを呼ぶ)
18
+ public void SlideIn(){
19
+ StartCoroutine( StartSlidePanel(true) );
20
+ }
21
+
22
+ // スライドアウト
23
+ public void SlideOut(){
24
+ StartCoroutine( StartSlidePanel(false) );
25
+ }
26
+
27
+ private IEnumerator StartSlidePanel( bool isSlideIn ){
28
+ float startTime = Time.time; // 開始時間
29
+ Vector3 startPos = transform.localPosition; // 開始位置
30
+ Vector3 moveDistance; // 移動距離および方向
31
+
32
+ if( isSlideIn )
33
+ moveDistance = (inPosition - startPos);
34
+ else{
35
+ moveDistance = (outPosition - startPos);
36
+
37
+ while((Time.time - startTime) < duration){
38
+ transform.localPosition = startPos + moveDistance * animCurve.Evaluate((Time.time - startTime) / duration);
39
+ yield return 0; // 1フレーム後、再開
40
+ }
41
+ transform.localPosition = startPos + moveDistance;
42
+ }
43
+ }
44
+ }
45
+ ```