유니티 기초

자동차 스와이프 SwipeCar

다모아 2023. 8. 1. 09:45

오캠 - 움짤도 있음

 

그림 파일 - 

 

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

public class CarController : MonoBehaviour
{

    public int rotAngle = 0;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //마우스 왼쪽 버튼을 눌렀다면
        if(Input.GetMouseButtonDown(0))
        {
            Debug.Log("왼쪽 버튼 클릭");

            //원점으로 게임오브젝트를 이동하자
            Debug.Log(this); //CarController클래스의 인스턴스
            Debug.Log(this.gameObject); // CarController컴포넌트가 붙어있는 게임오브젝트 car 인스턴스

            //이동하자 : 위치 변경
            //위치 : 게임오브젝트 멤버 Transform 멤버 Position 멤버 x, y, z
            //원점 : 0, 0, 0
            this.gameObject.transform.position = new Vector3(0, 0, 0);
            //this.gameObject.transform.position.x = 0;
            //구조체멤버 싱글로 할당 불가 , 반드시 모두 채워져야한다 (x값만 지정 불가)
        }
        
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CarController : MonoBehaviour
{
    public int rotAngle = 0;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //마우스 왼쪽 버튼을 눌렀다면
        if(Input.GetMouseButtonDown(0))
        {
            Debug.Log("왼쪽 버튼 클릭");
            //이동

            //벡터
            //이동벡터 : 위치
            //물리벡터 : 크기와 방향

            //성분 Vector3(x, y, z)
            // Vector3 연산
            Vector3 a = new Vector3(0, 0, 0);
            Vector3 b = new Vector3(1, 0, 0);

            Vector3 c = a + b;
            // 1, 0, 0
            this.gameObject.transform.position

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

public class CarController : MonoBehaviour
{
    public int rotAngle = 0;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //마우스 왼쪽 버튼을 눌렀다면
        if(Input.GetMouseButtonDown(0))
        {
            Debug.Log("왼쪽 버튼 클릭");
            //이동한다 x축으로 1만큼

            //this.gameObject.transform.position += new Vector3(1, 0, 0);
            //this.gameObject.transform.Translate(1, 0, 0);
            //this.gameObject.transform;
            //거속시
            this.transform.Translate(-1, 0, 0);
        }
        
    }
}

 

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

public class CarController : MonoBehaviour
{
    float moveSpeed = 0;
    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))
        {
            Debug.Log("왼쪽 버튼 클릭");
            this.moveSpeed += 0.2f;
            //이동한다 x축으로 1만큼

            //this.gameObject.transform.position += new Vector3(1, 0, 0);
            //this.gameObject.transform.Translate(1, 0, 0);
            //this.gameObject.transform;
            //거속시
            
        }
        //메 프레임마다 1유닛씩 x축으로 이동

        this.transform.Translate(this.moveSpeed, 0, 0);

        //감쇠한다 ,, 멈춘것처럼보인다.
        this.moveSpeed *= dampingCoefficient;
    }
}

 

Translate : 현재 좌표에 상대적인 이동 값을 나타낸다

나의 좌표에 인수로 전달되는 x, y, z의 값을 더한다.

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

public class CarController : MonoBehaviour
{
    float moveSpeed = 0;
    float dampingCoefficient = 0.96f; //감쇠계수

    private Vector3 startPos; //down 위치
    private Vector3 endPos; //up위치
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //마우스 왼쪽 버튼을 눌렀다면
        if (Input.GetMouseButtonDown(0))
        {
            Debug.LogFormat("Down: {0}", startPos); //A
            startPos = Input.mousePosition;
        }
        else if (Input.GetMouseButtonUp(0)) //왼쪽 버튼을 떼었다면
        {
            Debug.LogFormat("Up: {0}", endPos); //B
            endPos = Input.mousePosition;

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

            //화면좌표계에서의 두점사이의 거리에 비례해서 이동 , 좌표계가 안맞아서 어림잡아 500정도 나눠줬다.
            this.moveSpeed = swipeLength / 500f;

            Debug.LogFormat("moveSpeed: {0}", moveSpeed);
        }
        //x축으로 moveSpeed만큼 매 프레임마다 이동 (Self: 로컬좌표계)
        this.transform.Translate(this.moveSpeed, 0, 0);
        //감쇠 매 프레임마다 0.95f를 moveSpeed에 곱해서 적용
        this.moveSpeed *= this.dampingCoefficient;
    }
}

 


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");
        //UI (Text)
        this.distanceGo = GameObject.Find("Distance");

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

    // Update is called once per frame
    void Update()
    {
        //매프레임마다 자동차와 깃발의 거리를 계산해서 UI에 출력해야 함
        //테스트
        float distanceX = this.flagGo.transform.position.x - this.carGo.transform.position.x;
        //Debug.LogFormat("distanceX: {0}", distanceX); //월드 좌표계
        Text text = this.distanceGo.GetComponent<Text>();
        text.text = string.Format("목표지점까지의 거리 : {0:0.00}m", distanceX);

        if (distanceX <= flagGo.transform.position.z)
        {
            text.text = string.Format("게임오버");
        }
    }
}

 


CarController

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

public class CarController : MonoBehaviour
{
    float moveSpeed = 0;
    float dampingCoefficient = 0.96f; //감쇠계수

    private Vector3 startPos; //down 위치
    private Vector3 endPos; //up위치

    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.LogFormat("Down: {0}", startPos); //A
            startPos = Input.mousePosition;

        }
        else if (Input.GetMouseButtonUp(0)) //왼쪽 버튼을 떼었다면
        {
            Debug.LogFormat("Up: {0}", endPos); //B
            endPos = Input.mousePosition;

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

            //화면좌표계에서의 두점사이의 거리에 비례해서 이동 , 좌표계가 안맞아서 어림잡아 500정도 나눠줬다.
            this.moveSpeed = swipeLength / 500f;

            Debug.LogFormat("moveSpeed: {0}", moveSpeed);
            this.PlayMoveSound();
        }
        //x축으로 moveSpeed만큼 매 프레임마다 이동 (Self: 로컬좌표계)
        this.transform.Translate(this.moveSpeed, 0, 0);
        //감쇠 매 프레임마다 0.95f를 moveSpeed에 곱해서 적용
        this.moveSpeed *= this.dampingCoefficient;


    }
    public void PlayLoseSound()
    {
        //오디오 실행
        AudioSource audio = this.gameObject.GetComponent<AudioSource>();
        //audio.Play();
        AudioClip clip = this.audioClips[1];
        audio.PlayOneShot(clip);
    }

    public void PlayMoveSound()
    {
        //오디오 실행
        AudioSource audio = this.gameObject.GetComponent<AudioSource>();
        //audio.Play();
        AudioClip clip = this.audioClips[0];
        audio.PlayOneShot(clip);
    }
}

 

ShurikenController

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

public class ShurikenController : MonoBehaviour
{
    public float moveSpeed = 0f;
    public float dampingCoeffient = 0.96f;
    private Vector3 startPos;
    private Vector3 endPos;
    public float rotSpeed = 10f;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //왼쪽마우스 버튼 클릭시
        if(Input.GetMouseButtonDown(0))
        {
            Debug.LogFormat("Down: {0}", Input.mousePosition);
            this.startPos = Input.mousePosition;
        }
        //왼쪽마우스 버튼 뗐을 때
        else if(Input.GetMouseButtonUp(0))
        {
            Debug.LogFormat("Up: {0}", Input.mousePosition);
            this.endPos = Input.mousePosition;

            //거리
            float swipeLength = endPos.y - startPos.y;
            Debug.LogFormat("swipeLength: {0}", swipeLength);

            //this.moveSpeed = swipeLength / 500f;
            this.moveSpeed = 1;
            Debug.LogFormat("moveSpeed: {0}", moveSpeed);

        }

        transform.Translate(0, this.moveSpeed, 0, Space.World);
        // 속도 * 시간 
        transform.Rotate(0, 0, rotSpeed);

    }
}

 

GameDirector

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

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

    private bool isGameOver = false;
    // Start is called before the first frame update
    void Start()
    {

        //자동차
        this.carGo = GameObject.Find("car");
        //깃발
        this.flagGo = GameObject.Find("flag");
        //UI (Text)
        this.distanceGo = GameObject.Find("Distance");

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

    }

    // Update is called once per frame
    void Update()
    {
        //매프레임마다 자동차와 깃발의 거리를 계산해서 UI에 출력해야 함
        //테스트
        float distanceX = this.flagGo.transform.position.x - this.carGo.transform.position.x;
        //Debug.LogFormat("distanceX: {0}", distanceX); //월드 좌표계
        Text text = this.distanceGo.GetComponent<Text>();

        if (distanceX >= flagGo.transform.position.z)
        {
            text.text = string.Format("목표지점까지의 거리 : {0:0.00}m", distanceX);
        }
        else
        {
            if (isGameOver == false)
            {
                text.text = string.Format("게임오버");
                CarController carController = this.carGo.GetComponent<CarController>();
                carController.PlayLoseSound();
                isGameOver = true;
            }
        }
    }
}

'유니티 기초' 카테고리의 다른 글

pixel_sword  (0) 2023.08.03
챕터6 고양이 점프[점프막기, 카메라 아래 최소치 정하기 미완]  (0) 2023.08.02
챕터5 고양이탈출 - Prefab  (0) 2023.08.02
챕터5 고양이탈출  (0) 2023.08.01
유니티  (0) 2023.07.31