using System.Collections.Generic; using UnityEngine; public class Game_Lucky : MonoBehaviour { public GameObject go_dropobj; // 떨어질 공 prefab public Transform tf_cup; // 컵 (움직이고 회전하는 부분) public Transform tf_cupin; // 컵 안 (공들이 들어가는 위치 부모) List list_dropobj = new List(); // 회전 관련 변수 private bool isRotating = false; private float targetZ = 0f; private float rotateSpeed = 150f; // 초당 몇 도 회전할지 bool bRotCup = false; public void Set() { gameObject.SetActive(true); bRotCup = false; // tf_cup의 z 회전값을 0으로 변경 tf_cup.rotation = Quaternion.Euler(0, 0, 0); // list_dropobj.Count 가 0 이면 50개 생성해서 tf_cupin 안에 넣기 if (list_dropobj.Count == 0) { for (int i = 0; i < 50; i++) { GameObject obj = Instantiate(go_dropobj, tf_cupin); obj.transform.localPosition = Get_CupInLocalPos(); list_dropobj.Add(obj); } } Set_Ball(); } void Set_Ball() { list_dropobj.ForEach(f => f.transform.localPosition = Get_CupInLocalPos()); // 컵 안에서 시작 //list_dropobj.ForEach(f => f.GetComponent().gravityScale = Random.Range(0.01f, 0.3f)); } Vector3 Get_CupInLocalPos() { return new Vector3(Random.Range(-50f, 50f), 30f + Random.Range(-50f, 50f), 0f); } public void OnMyDrag() { if (!bRotCup) { // 마우스/터치 입력 위치 → 월드 좌표 변환 Vector3 mousePos = Input.mousePosition; Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos); // tf_cup을 터치한 위치의 x 값만 받아서 거기에 위치시킴 Vector3 cupPos = tf_cup.position; cupPos.x = worldPos.x; tf_cup.position = cupPos; } } public void OnClick_Screen() { if (bRotCup) { gameObject.SetActive(false); return; } bRotCup = true; // 마우스/터치 입력 위치 → 월드 좌표 변환 Vector3 mousePos = Input.mousePosition; Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos); // tf_cup을 터치한 위치의 x 값만 받아서 거기에 위치시킴 Vector3 cupPos = tf_cup.position; cupPos.x = worldPos.x; tf_cup.position = cupPos; // 회전 시작 (목표: -150도) targetZ = -150f; isRotating = true; } private void Update() { if (isRotating) { // 현재 z 회전값 float currentZ = tf_cup.eulerAngles.z; if (currentZ > 180f) currentZ -= 360f; // -180~180 범위로 맞추기 // 목표 각도로 부드럽게 이동 float newZ = Mathf.MoveTowards(currentZ, targetZ, rotateSpeed * Time.deltaTime); tf_cup.rotation = Quaternion.Euler(0, 0, newZ); // 목표 각도 도달했으면 정지 if (Mathf.Approximately(newZ, targetZ)) { isRotating = false; } } } }