110 lines
3.2 KiB
C#
110 lines
3.2 KiB
C#
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<GameObject> list_dropobj = new List<GameObject>();
|
|
|
|
// 회전 관련 변수
|
|
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<Rigidbody2D>().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;
|
|
}
|
|
}
|
|
}
|
|
} |