前提・実現したいこと
unity2Dでパターンロックを利用したゲームを制作中です。
パターンロックのイメージとしては、9つの丸い2Dオブジェクトがあり、それらを線で結ぶイメージです。
丸い2Dオブジェトには、idが割り振られています。
idの並び順でパターンを取得することが狙いです。
該当ソースコードにより、パターンロックは実装できましたが、そこからイベントとの紐づけができません。
実現したいことは以下の例です。
(例)
パターン1の場合、イベントAが発生。
パターン2の場合、イベントBが発生。
該当のソースコードにコードを加える形でご教授いただきたいです。
また、足りない情報等ありましたら、ご教授願います。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
unityC#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class LockPattern : MonoBehaviour 6{ 7 public GameObject linePrefab; 8 public Canvas canvas; 9 10 private Dictionary<int, CircleIdentifier> circles; 11 12 private List<CircleIdentifier> lines; 13 14 private GameObject lineOnEdit; 15 private RectTransform lineOnEditRcTs; 16 private CircleIdentifier circleOnEdit; 17 18 private bool unlocking; 19 20 new bool enabled = true; 21 22 // Start is called before the first frame update 23 void Start() 24 { 25 circles = new Dictionary<int, CircleIdentifier>(); 26 lines = new List<CircleIdentifier>(); 27 28 for (int i = 0;i < transform.childCount;i++) 29 { 30 var circle = transform.GetChild(i); 31 32 var identifier = circle.GetComponent<CircleIdentifier>(); 33 34 identifier.id = i; 35 36 circles.Add(i, identifier); 37 38 // circles.Add(circle.gameObject); 39 40 } 41 } 42 43 // Update is called once per frame 44 void Update() 45 { 46 if(enabled == false) 47 { 48 return; 49 } 50 51 if (unlocking) 52 { 53 Vector3 mousePos = canvas.transform.InverseTransformPoint(Input.mousePosition); 54 55 lineOnEditRcTs.sizeDelta = new Vector2(lineOnEditRcTs.sizeDelta.x, Vector3.Distance(mousePos, circleOnEdit.transform.localPosition)); 56 57 lineOnEditRcTs.rotation = Quaternion.FromToRotation( 58 Vector3.up, 59 (mousePos - circleOnEdit.transform.localPosition).normalized); 60 } 61 } 62 63 IEnumerator Release() 64 { 65 enabled = false; 66 67 yield return new WaitForSeconds(3); 68 69 foreach(var circle in circles) 70 { 71 circle.Value.GetComponent<UnityEngine.UI.Image>().color = Color.white; 72 circle.Value.GetComponent<Animator>().enabled = false; 73 } 74 75 foreach(var line in lines) 76 { 77 Destroy(line.gameObject); 78 } 79 80 lines.Clear(); 81 82 lineOnEdit = null; 83 lineOnEditRcTs = null; 84 circleOnEdit = null; 85 86 enabled = true; 87 } 88 89 GameObject CreateLine(Vector3 pos, int id) 90 { 91 var line = GameObject.Instantiate(linePrefab, canvas.transform); 92 93 line.transform.localPosition = pos; 94 95 var lineIdf = line.AddComponent<CircleIdentifier>(); 96 97 lineIdf.id = id; 98 99 lines.Add(lineIdf); 100 101 return line; 102 } 103 104 105 void TrySetLineEdit(CircleIdentifier circle) 106 { 107 foreach (var line in lines) 108 { 109 if(line.id == circle.id) 110 { 111 return; 112 } 113 } 114 115 lineOnEdit = CreateLine(circle.transform.localPosition, circle.id); 116 lineOnEditRcTs = lineOnEdit.GetComponent<RectTransform>(); 117 circleOnEdit = circle; 118 } 119 120 void EnableColorFade(Animator anim) 121 { 122 anim.enabled = true; 123 anim.Rebind(); 124 } 125 126 public void OnMouseEnterCircle(CircleIdentifier idf) 127 { 128 129 if (enabled == false) 130 { 131 return; 132 } 133 134 //Debug.Log(idf.id); 135 136 if (unlocking) 137 { 138 lineOnEditRcTs.sizeDelta = new Vector2(lineOnEditRcTs.sizeDelta.x, Vector3.Distance(circleOnEdit.transform.localPosition, idf.transform.localPosition)); 139 lineOnEditRcTs.rotation = Quaternion.FromToRotation( 140 Vector3.up, 141 (idf.transform.localPosition - circleOnEdit.transform.localPosition).normalized); 142 143 TrySetLineEdit(idf); 144 } 145 } 146 147 public void OnMouseExitCircle(CircleIdentifier idf) 148 { 149 if (enabled == false) 150 { 151 return; 152 } 153 154 //Debug.Log(idf.id); 155 } 156 157 public void OnMouseDownCircle(CircleIdentifier idf) 158 { 159 if (enabled == false) 160 { 161 return; 162 } 163 164 //Debug.Log(idf.id); 165 166 unlocking = true; 167 168 TrySetLineEdit(idf); 169 } 170 171 public void OnMouseUpCircle(CircleIdentifier idf) 172 { 173 if (enabled == false) 174 { 175 return; 176 } 177 178 //Debug.Log(idf.id); 179 180 if (unlocking) 181 { 182 foreach(var line in lines) 183 { 184 EnableColorFade(circles[line.id].gameObject.GetComponent<Animator>()); 185 } 186 187 Destroy(lines[lines.Count - 1].gameObject); 188 lines.RemoveAt(lines.Count - 1); 189 190 foreach(var line in lines) 191 { 192 EnableColorFade(line.GetComponent<Animator>()); 193 } 194 195 StartCoroutine(Release()); 196 } 197 198 unlocking = false; 199 200 } 201} 202
試したこと
・最初に決められたパスワードを格納
public string curPassword = "12345";
・public void OnMouseEnterCircle(CircleIdentifier idf){}内に以下コードを入れ、idを取得する。
if (idf.id == 0) { Debug.Log("0取得"); input = input + "0"; } if (idf.id == 1) { Debug.Log("1取得"); input = input + "1"; }
・
・
・
id 0~8まで用意。
・void Update(){}内に以下コードを入れ、input情報がcurPasswordと同じなら、
デバッグログが発生。
if (input == curPassword)
{
Debug.Log(”EventA");
}
しかし、id=12345となるようにパターンを完成させても、Debug.Log(”EventA");は発生しなかった。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー