2017-10-16 2 views
1

아래의 스크립트를 사용하여 고정 된 영역 내에서 게임 개체를 위/아래 및 왼쪽/오른쪽으로 드래그하는 방법을 사용하고 있습니다.이 방법은 편집기 및 모바일 스 와이프에서도 잘 작동하지만 느린 속도로 느려질 수는 없습니다. 속도 변수를 사용합니다. 내가 어떻게 이럴 수 있니? 나는 개체를 끌 수있는 속도를 제어 할 수 있기를 원합니다.GameObject 끌기

using UnityEngine; 
using System.Collections; 

public class drag : MonoBehaviour { 

public float maxXValue = 9f; 

Vector3 dist; 
float posX; 
float posY; 


void OnMouseDown(){ 
    dist = Camera.main.WorldToScreenPoint(transform.position); 
    posX = Input.mousePosition.x - dist.x; 
    posY = Input.mousePosition.y - dist.y; 
} 

void OnMouseDrag(){ 

    Vector3 curPos = new Vector3(Input.mousePosition.x - posX, Input.mousePosition.y - posY, dist.z); 
    Vector3 worldPos = Camera.main.ScreenToWorldPoint(curPos); 

    if (GameManager.instance.gameStart == false) { 
     worldPos.x = Mathf.Clamp (worldPos.x, -5f, 5f); 
     worldPos.y = Mathf.Clamp (worldPos.y, -13.2f, -13.2f); 
    } else { 
     worldPos.x = Mathf.Clamp (worldPos.x, -maxXValue, maxXValue); 
     worldPos.y = Mathf.Clamp (worldPos.y, -17.2f, -13.2f); 
    } 

    transform.position = worldPos; 
} 
} 

답변

1

속도 변수와 Lerp transform.position을 사용할 수 있습니다. 속도 변수를 변경하면 드래그 속도가 변경됩니다. 마찬가지로 :

using UnityEngine; 
using System.Collections; 

public class drag : MonoBehaviour { 
    public bool gameStart = false; 
    public float maxXValue = 9f; 
    public float speed = 1.0f; 
    Vector3 dist; 
    float posX; 
    float posY; 


    void OnMouseDown(){ 
     dist = Camera.main.WorldToScreenPoint(transform.position); 
     posX = Input.mousePosition.x - dist.x; 
     posY = Input.mousePosition.y - dist.y; 
    } 

    void OnMouseDrag(){ 

     Vector3 curPos = new Vector3(Input.mousePosition.x - posX, Input.mousePosition.y - posY, dist.z); 
     Vector3 worldPos = Camera.main.ScreenToWorldPoint(curPos); 

     if (gameStart == false) { 
      worldPos.x = Mathf.Clamp (worldPos.x, -5f, 5f); 
      worldPos.y = Mathf.Clamp (worldPos.y, -13.2f, -13.2f); 
     } else { 
      worldPos.x = Mathf.Clamp (worldPos.x, -maxXValue, maxXValue); 
      worldPos.y = Mathf.Clamp (worldPos.y, -17.2f, -13.2f); 
     } 

     //transform.position = worldPos; 
     transform.position = Vector3.Lerp(transform.position,worldPos,speed*Time.deltaTime); 
    } 
} 
+0

고마워요, 그게 내가 원하는대로 작동합니다. – Kaz

+0

어떻게하면 Y 축에서만 속도를 제어 할 수 있습니까? – Kaz

+0

축 별 임시 값을 가져 와서 Mathf.Lerp를 사용하여 필요한 속도에 따라 값을 변경할 수 있습니다. 그런 다음 새 Vector를 만들고 transform.position에 할당합니다. – ZayedUpal