본문 바로가기
KDT/유니티 기초

23/08/05 유니티 기초 복습(Roulette, CarSwipe)

by 잰쟁 2023. 8. 5.
728x90

1. Roulette

마우스 클릭 (왼쪽버튼)으로 룰렛 회전 후 서서히 감속시켜 멈추게하기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RouletteController : MonoBehaviour
{
    public float rotAngle = 0; //회전속도
    public float dampingCoefficient = 0.96f;  //감쇠계수 설정

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            this.rotAngle = 10; //마우스를 누르면 속도 10으로 회전
        }
        this.transform.Rotate(0, 0, this.rotAngle);

        //감쇠계수 곱하기
        this.rotAngle *= dampingCoefficient;
        Debug.Log(rotAngle);
    }
}

 

2. CarSwipe

마우스를 끈 거리만큼 차 이동후 서서히 감속시켜 멈추게 하기

깃발까지의 차 이동거리 나타내기

 

1) 클릭하면 단순히 차를 이동시키고 서서히 멈추게 하기 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CarController : MonoBehaviour
{
    public float carSpeed = 0;  //맨 처음 차 속도
    public float dampingCoefficient = 0.98f;  //감쇠계수 설정

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))  //마우스를 클릭하면
        {
            this.carSpeed = 0.2f;  //차 속도 설정
        }
        transform.Translate(this.carSpeed, 0, 0);  // x축으로 설정한 속도만큼 차 이동
        this.carSpeed *= dampingCoefficient;
    }
}

2) 남은거리 표시 및 게임오버 나타내기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameDirector : MonoBehaviour
{
    GameObject carGo;
    GameObject flagGo;
    GameObject distanceGo;

    // Start is called before the first frame update
    void Start()
    {
        //게임오브젝트 이름으로 찾기!
        this.carGo = GameObject.Find("car");
        this.flagGo = GameObject.Find("flag");
        this.distanceGo = GameObject.Find("Distance");

        Debug.LogFormat("{0}", distanceGo);
        Debug.LogFormat("{0}", carGo);
        Debug.LogFormat("{0}", flagGo);
    }

    // Update is called once per frame
    void Update()
    {
        //차와 깃발(게임오브젝트) 사이의 거리
        //게임오브젝트의 좌표 : 게임오브젝트이름.transform.position
        float distanceX = this.flagGo.transform.position.x - this.carGo.transform.position.x;
        Debug.LogFormat("distanceX : {0}", distanceX);
        
        //UI에 나타내기(게임오버 추가)
        Text text = distanceGo.GetComponent<Text>();
        text.text = string.Format("목표 지점까지 거리 : {0:0.00}m", distanceX);
        if (distanceX < 0)
        {
            text.text = string.Format("Game Over");
        }
    }
}

 

3) 오디오 소리내기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CarController : MonoBehaviour
{
    public float carSpeed = 0;  //맨 처음 차 속도
    public float dampingCoefficient = 0.96f;  //감쇠계수 설정
    private Vector3 startPos;
    public AudioClip[] audioClips;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))  //마우스를 클릭하면
        {
            Debug.Log("down");
            this.startPos = Input.mousePosition;  //마우스 클릭했을 때의 위치
        }
        else if (Input.GetMouseButtonUp(0))
        {
            Debug.Log("up");
            Vector3 endPos = Input.mousePosition;  //마우스를 떼었을 때의 위치 

            //화면좌표에서 두 점사이의 거리
            float swipeLength = endPos.x - startPos.x;
            Debug.LogFormat("swipeLength : {0}", swipeLength);

            //스와이프 길이 -> 차 속도로 변경 (500은 이동좌표계가 안 맞아 임의로 나눠줌)
            this.carSpeed = swipeLength / 500f;
            Debug.LogFormat("carSpeed : {0}", carSpeed);

            //오디오 실행
            PlayMoveSound();
        }
        this.transform.Translate(this.carSpeed, 0, 0);  // 매프레임마다 설정한 속도만큼 차 이동
        this.carSpeed *= dampingCoefficient; //감속
    }
    //움직일때 오디오 재생 메서드
    public void PlayMoveSound()
    {
        AudioClip clip = this.audioClips[0];
        GetComponent<AudioSource>().PlayOneShot(clip);  //한 번만 재생
    }

    //게임오버 오디오 재생 메서드
    public void PlayLoseSound()
    {
        AudioClip clip = this.audioClips[1];
        GetComponent<AudioSource>().PlayOneShot(clip);  //한 번만 재생
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameDirector : MonoBehaviour
{
    GameObject carGo;
    GameObject flagGo;
    GameObject distanceGo;

    // Start is called before the first frame update
    void Start()
    {
        //게임오브젝트 이름으로 찾기!
        this.carGo = GameObject.Find("car");
        this.flagGo = GameObject.Find("flag");
        this.distanceGo = GameObject.Find("Distance");

        Debug.LogFormat("{0}", distanceGo);
        Debug.LogFormat("{0}", carGo);
        Debug.LogFormat("{0}", flagGo);
    }

    private bool isGameOver = false;

    // Update is called once per frame
    void Update()
    {
        //차와 깃발(게임오브젝트) 사이의 거리 계산해서 UI에 표시
        //게임오브젝트의 좌표 : 게임오브젝트이름.transform.position
        float distanceX = this.flagGo.transform.position.x - this.carGo.transform.position.x;
        Debug.LogFormat("distanceX : {0}", distanceX);
        Text text = distanceGo.GetComponent<Text>();
        text.text = string.Format("목표 지점까지 거리 : {0:0.00}m", distanceX);
        
        if (distanceX < 0)
        {
            if(this.isGameOver == false)
            {
                CarController carController = this.carGo.GetComponent<CarController>();
                carController.PlayLoseSound();
                this.isGameOver = true;
            }
            text.text = string.Format("Game Over");
        }
    }
}