1. 개요
모바일 비행 슈팅 게임 Sky Force 시리즈 게임에서 비행기를 조작할 때 터치한 위치로 비행기가 따라 다닙니다.
비행기에서 먼 곳을 터치하면 터치한 위치로 이동하기 위해 비행기가 움직이고, 비행기가 터치 위치에 도달하면, 터치와 동일한 위치에서 따라 다닙니다.
마우스로 조작을 원하시면 하단의 링크를 통해 마우스 입력 버전을 참고해주세요.
2. 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerControl : MonoBehavior
{
public float moveSpeed = 2f; // 비행기의 이동 속도
private Rigidbody2D rigid2D; // 비행기의 강체(Rigidbody)
private bool isFar = false; // 터치와 비행기의 거리 체크
private Vector3 inputPosition; // 터치의 월드 포지션
private Vector2 moveDir; // 화면 터치 시 비행기 이동 방향
void Start ()
{
rigid2D = GetComponent<Rigidbody2D>();
}
void Update ()
{
if(rigid2D == null || Input.touchCount < 1) // 강체가 없거나 터치가 없으면 리턴
return;
moveDir = Vector2.zero; // 방향 초기화
if(Input.GetTouch(0).phase == TouchPhase.Began)
{
inputPosition = GetInputPosition(Input.GetTouch(0).position);
if (Vector3.Distance(transform.position, inputPosition) > .2f)
{
isFar = true; // 비행기와 터치 사이의 거리가 먼 상태
}
}
if(Input.GetTouch(0).phase == TouchPhase.Ended)
{
isFar = false;
}
if(Input.GetTouch(0).phase == TouchPhase.Moved)
{
inputPosition = GetInputPosition(Input.GetTouch(0).position);
if (isFar) // 거리가 먼 상태
{
moveDir = GetDirection(transform.position, inputPosition);
// 터치와 비행기 거리를 체크
isFar = (Vector3.Distance(transform.position, inputPosition) > .2f);
}
else // 터치에 가까운 상태
{
transform.position = inputPosition;
}
}
rigid2D.velocity = moveDir * moveSpeed; // 방향에 속도를 곱해서 강체에 적용
}
// 터치의 스크린 포지션을 월드 포지션으로 변경
public Vector3 GetInputPosition(Vector3 position)
{
Vector3 screenPosition = position + (Vector3.back * Camera.main.transform.position.z);
return Camera.main.ScreenToWorldPoint(screenPosition);
}
// 두 포지션 사이의 방향
public Vector2 GetDirection (Vector2 from, Vector2 to)
{
Vector2 delta = to - from;
float radian = Mathf.Atan2(delta.y, delta.x);
return new Vector2(Mathf.Cos(radian), Mathf.Sin(radian));
}
}
3. 사용방법
- 움직이려는 물체(비행기)에 Rigidbody2D 컴포넌트가 포함되어 있어야합니다.
- 비행기 속도는 터치와의 거리가 먼 상태에서 적용됩니다.
- 에디터에서 테스트 하기 위해서는 터치 입력부분을 아래 마우스 입력 버전을 참고하세요.
[Unity,C#] 2D 비행 슈팅 조작 스크립트 작성 (마우스 입력)
[Unity,C#] 2D 비행 슈팅 조작 스크립트 작성 (마우스 입력)
1. 개요 비행슈팅 조작법을 터치에서 마우스로 변경한 코드입니다. 2. 코드 using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerControl : MonoBehavior { publ..
www.dasony.net
반응형
'Develop > Tips' 카테고리의 다른 글
| [Unity,C#] 2D 비행 슈팅 조작 스크립트 작성 (마우스 입력) (0) | 2020.03.11 |
|---|---|
| [SWIFT] let 과 var의 차이 (0) | 2019.12.15 |
| [GPGS] 구글 플레이 게임 서비스 유니티 플러그인 사용 시 실시간 갱신 문제 (1) | 2019.01.06 |
| [UNITY] Google 에서 제공하는 Admob 플러그인 사용시 Crash로 게임 실행이 안될때 (2) | 2019.01.03 |
| [C#,UI] 마우스 or 터치 입력 포지션이 UI 위에 있는지 체크하기 (0) | 2018.11.20 |