1. 개요

비행슈팅 조작법을 터치에서 마우스로 변경한 코드입니다.

 

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)	// 강체가 없거나 터치가 없으면 리턴
        	return;
        
        moveDir = Vector2.zero; // 방향 초기화
        
        if(Input.GetMouseButtonDown(0))
        {
        	inputPosition = GetInputPosition(Input.mousePosition);
            
            if (Vector3.Distance(transform.position, inputPosition) > .2f)
            {
            	isFar = true; // 비행기와 터치 사이의 거리가 먼 상태
            }
        }
        
        if(Input.GetMouseButtonUp(0))
        {
        	isFar = false;
        }
        
        if(Input.GetMouseButton(0))
        {
        	inputPosition = GetInputPosition(Input.mousePosition);
            
            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));
    }
}

 

[Unity/C#] 2D 비행 슈팅 조작 스크립트 작성 (터치 입력)

 

[Unity/C#] 2D 비행 슈팅 조작 스크립트 작성 (터치 입력)

1. 개요 모바일 비행 슈팅 게임 Sky Force 시리즈 게임에서 비행기를 조작할 때 터치한 위치로 비행기가 따라 다닙니다. 비행기에서 먼 곳을 터치하면 터치한 위치로 이동하기 위해 비행기가 움직이고, 비행기가..

www.dasony.net

 

반응형