Unity- 자동차 스와이프 예제
씬으 오브젝트 배치하고 order in layer 설정을 바꿔준다. maincamera의 background color도 바꿨다.
interaction: 스와이프하면
car controller를 만든다.
swipe한 길이에 따라서 자동차의 이동거리를 정의
자동차가 움직이면 점점 속도가 줄어야한다.> 감쇄계수를 곱해서 적용
https://docs.unity3d.com/ScriptReference/Transform.Translate.html
World 좌표계: 변하지 않는다. 항상 오른쪽이 +x, 위가 +y, 앞 +z
벡터의 뺄셈 - 한 오브젝트에서 다른 오브젝트까지의 거리와 방향을 구하고자 할 때 사용한다.
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UIElements;
public class CarController : MonoBehaviour
{
public float x;
public float y;
public float z;
float dampingCoefficient = 0.96f;//감쇠계수
Vector3 startPos;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
startPos = Input.mousePosition;
Debug.LogFormat("Down: {0}", startPos);//A
//움직이기-위치 정보 변함
//원점으로 게임 오브젝트 이동
Debug.Log(this);//CarController 클래스의 인스턴스
Debug.Log(this.gameObject);//CarController 컴포넌틑가 붙어있는 게임 오브젝트 Instance
//구조체의 멤버 싱글로 할당 불가
//따라서 Vector3는 구조체이므로 모두 채워줘야함
// x = 0.5f;
// this.gameObject.transform.position += new Vector3 (x,y,z);
this.x = 0.2f;
}
else if (Input.GetMouseButtonUp(0))//B
{
Debug.LogFormat("Up: {0}", Input.mousePosition);
Vector3 endPos = Input.mousePosition;
float swipeLength = endPos.x - this.startPos.x;//B.x - A.x : x좌표의 거리
this.x = swipeLength*0.0005f;//world좌표계와 local 좌표계를 맞춰주기 위해서
//화면 좌표계의 거리에 비례해서 이동(mousPosition은 world이므로)
}
this.transform.Translate(this.x, this.y, this.z);
this.x *= dampingCoefficient;//속도가 점점 느려진다.
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShurikenController : MonoBehaviour
{
float dampingCoefficient = 0.96f;//감쇠계수
Vector3 startPos;
float x;
float y;
float z;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
GetLength();
Move();
Rotate();
}
void GetLength()//swipe 거리를 구하는 메서드
{
if (Input.GetMouseButtonDown(0))
{
startPos = Input.mousePosition;
Debug.LogFormat("Down: {0}", startPos);//A
}
else if (Input.GetMouseButtonUp(0))
{
Vector3 endPos = Input.mousePosition;
Debug.LogFormat("Up: {0}", endPos);//B
float swipeLength = endPos.y-startPos.y;
this.y = swipeLength*0.0005f;
}
}
void Rotate()
{
float rotAngle = 3;
this.transform.Rotate(0, 0, rotAngle);
rotAngle *= dampingCoefficient;//감쇠계수를 곱해 angle을 줄임
Debug.Log(rotAngle);
}
void Move()
{
this.transform.Translate(this.x, this.y, this.z, Space.World);
this.y *= dampingCoefficient;//속도가 점점 느려진다.
}
}
'유니티 기초' 카테고리의 다른 글
Unity-Prefab, 예제-랜덤한 위치에 화살생성, hp게이지 만들기 (0) | 2023.08.02 |
---|---|
Unity-Player Setting에서 Deafult Orientaiton (0) | 2023.08.02 |
Unity- CatEscape 예제, time (0) | 2023.08.01 |
Unity-자동차 스와이프 예제2-UI, 사운드추가 (0) | 2023.08.01 |
HelloWorld-Unity 기본, life Cycle, 룰렛 프로젝트 (0) | 2023.07.31 |