일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 가상현실
- 유니티
- 오브젝트 풀링
- meta
- CGV
- 유니티 UI
- Photon Fusion
- 유니티 GUI
- input system
- 오큘러스
- 드래곤 플라이트 모작
- 멀티플레이
- 포트폴리오
- 개발
- Oculus
- 드래곤 플라이트
- OVR
- 앱 배포
- 개발일지
- HAPTIC
- 연습
- XR
- 유니티 Json 데이터 연동
- 팀 프로젝트
- VR
- ChatGPT
- meta xr
- 팀프로젝트
- 길건너 친구들
- 모작
Archives
- Today
- Total
EasyCastleUNITY
Swipe Car && 수리검 던지기 본문
Swipe Car
CarController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CarController : MonoBehaviour
{
private float moveSpeed = 0.0f;
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}", Input.mousePosition);
this.startPos = Input.mousePosition;
}
//버튼이 띄어지는 순간
else if(Input.GetMouseButtonUp(0))
{
Debug.LogFormat("Up: {0}", Input.mousePosition);
this.endPos = Input.mousePosition;
//Vector3 c = this.endPos - this.startPos;
float swipeLength=this.endPos.x - this.startPos.x;
Debug.LogFormat("swipeLength:{0}",swipeLength);
//화면 좌표계에서의 두점사이의 거리에 비례해서 이동
//but, 이동 좌표계가 안맞아서 어림잡아 500정도 나눔
this.moveSpeed = swipeLength / 500f;
Debug.LogFormat("moveSpeed: {0}", moveSpeed);
}
this.transform.Translate(this.moveSpeed, 0, 0);
//감쇠 , 점점 감소 -> 0.00x 0과 비슷해짐
this.moveSpeed *= this.dampingCoefficient;
}
}
유의해야 될 점,
Input.mousePosition을 통해 swipeLength를 계산한다.
문제점은 이 메서드는 pixel 좌표계를 통해 계산을 하기에,
이 값을 그대로 누르면 한번 이동시키면, 예를 들어, 880unit 같이 한번에 엄청나게 이동하게 되는 것이다.
즉, 이 값을 사용하기위해, 크기를 줄인다. 500정도를 나누었다.
이값을 moveSpeed에 저장하고, 계속 움직이는 것을 막기 위해 감쇠 계수를 이용하여 속도를 0 가까이 만들어준다.
수리검 던지기
ShurikenController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShurikenController : MonoBehaviour
{
private float moveSpeed =0.0f;
private float dampingCoefficient = 0.96f;
private float rotAngle = 0.0f;
private Vector3 startPos;
private Vector3 endPos;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
this.startPos = Input.mousePosition;
Debug.LogFormat("Down: {0}", this.startPos);
}
else if (Input.GetMouseButtonUp(0))
{
this.rotAngle = 10; //클릭시 회전 각도 10으로
//이동
this.endPos = Input.mousePosition;
Debug.LogFormat("Up:{0}", this.endPos);
float swipeLength = this.endPos.y - this.startPos.y;
this.moveSpeed = swipeLength / 1000f;
Debug.LogFormat("moveSpeed: {0}", moveSpeed);
//회전
}
//회전 하면 수리검의 local좌표계의 y방향도 바뀌므로
//제대로 이동시키려면 이동은 world 좌표계를 기준으로 이동하도록 만들어 준다.
//회전
this.transform.Rotate(0, 0, rotAngle);
this.rotAngle *= dampingCoefficient;
//이동
this.transform.Translate(0, this.moveSpeed, 0,Space.World);
this.moveSpeed *= dampingCoefficient;
}
}
유의해야 될점
회전과 이동이 같이 들어가게 되면서 간단한 문제가 발생한다.
바로 회전을 하는 순간, 수리검의 local 좌표계의 y도 계속 변하기 때문이다.
따라서 회전을 하며, 원래대로 날아가게 하려면,
이동을 local 좌표계가 아닌, world 좌표계를 통해 움직이게 하는 것이 좋다.
'유니티 기초' 카테고리의 다른 글
구름 오르기 (0) | 2023.08.02 |
---|---|
고양이 화살 피하기 게임 (0) | 2023.08.02 |
2023/08/01 복습 (0) | 2023.08.01 |
Swipe car 음향 및 UI 추가 (0) | 2023.08.01 |
간단 룰렛 (0) | 2023.08.01 |