짧아서 간단히 실행할 것이라 생각했는데 몇시간동안 고생했다.


Drag 관련 코드는 이미 내장된 함수가 존재한다.


OnMouseDrag() 함수이다.


이 함수를 호출한 뒤, 드래그(Drag) 했을 때 원하는 코드를 적으면 된다.


일단, 움직이고자 하는 게임오브젝트들에 Drag.cs 파일을 갖다 붙인뒤 Drag.cs파일에 코드를 입력한다.


[Drag.cs]


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Drag : MonoBehaviour
{

float distance = 10;

void OnMouseDrag()
{
print("Drag!!");
Vector3 mousePosition = new Vector3(Input.mousePosition.x,
Input.mousePosition.y, distance);
Vector3 objPosition = Camera.main.ScreenToWorldPoint(mousePosition);
transform.position = objPosition;
}
}


불필요한 Start() 함수와 Update() 함수를 삭제하고 OnMouseDrag()함수만 작성했다.


그런데, 아무리 실행을 해봐도 함수가 실행되지 않는다.


그래서 혹시나해서 OnMouse로 시작하는 모든 함수를 작성해보았다.


OnMouseEnter

OnMouseExit

OnMouseUp

OnMouseDown

...

..

.


헉, 모든 마우스 관련 함수가 호출되지 않는다.


여러번의 시도 끝에 혹시나해서 이미지(Sprite)에 Collider를 추가해봤다..


된다. 자~~알 된다. 다만 화면 밖으로 끝없이 드래그(Drag)되지만 움직이는 것은 성공했다.


위와 같이 쓴 다음에 게임을 실행해보면 마우스 드래그로 오브젝트 객체가 이동하는 것을 볼 수 있다.



결론 : 콜라이더(Collider)를 써야 마우스 관련 함수를 사용할 수 있다.


 

Posted by sungho88
,




1. InvokeRepeating


Invokes the method methodName in time seconds, then repeatedly every repeatRate seconds.


Parameters:


    methodName: 

    time: 

    repeatRate:

void MonoBehaviour.InvokeRepeating(string methodName, float time, float repeatRate)


정의는 위와 같다. MonoBehaviour의 상속을 받으므로 바로 사용할 수 있다.



methodName : 호출할 함수명

time : 처음에 몇초동안 딜레이 둘지(0이면 바로 시작)

timeRate : 그 이후에 몇초마다 함수를 부를지 지정한다.


즉, 특정 시간마다 함수를 반복 실행하고자 할 때 이 InvokeRepeating를 사용한다. 아래와 같이 작성하면 된다.


void start(){

   InvokeRepeating("tutorial",2,1);

}


2초 후에 tutorial라는 이름의 함수를 1초마다 무한 반복.


2. Invoke


Invokes the method methodName in time seconds.


Parameters:


    methodName: 

    time:

void MonoBehaviour.Invoke(string methodName, float time)


정의는 위와 같다. MonoBehaviour의 상속을 받으므로 역시 바로 사용할 수 있다.   


methodName : 호출할 함수명

time : 함수 호출 시간(5.0f)라면, 5초 후


void start(){

   Invoke("tutorial",2);

}


2초 후에 tutorial라는 이름의 함수를 2초 후에 한 번 실행.



3. CancelInvoke


Cancels all Invoke calls on this MonoBehaviour.

void MonoBehaviour.CancelInvoke()


[중지]

CancelInvoke(); 

CancelInvoke("methodName"); 

 

InvokeRepeating 의 무한 반복을 중지시킨다. Invoke는 일회성이므로 무시.


매개변수에 아무것도 적지 않으면 모든 Invoke 들을 중지시킨다.


매개변수에 함수명을 적으면 그 특정 함수의 무한 반복만 중지된다.

Posted by sungho88
,

안드로이드에서는 AlertDialog창이 별도로 존재했지만, 


유니티에서는 기본적으로 패널(Panel)을 사용한다.


Create - UI - Panel로 패널을 하나 만든 뒤, Panel안에다가 배치할 UI 요소들을 집어넣는다.


만약, 안드로이드에 존재하는 뒤로가기 버튼을 눌렀을 때 바로 나가버리지 않고 한번 묻는 창을 띄우고 싶다면...


Text하나와 Button 두개를 만든 뒤, 잘 맞춰서 배치한다.


이렇게 하면 창을 만든 것이다. 해야할 것은


1. 시작했을 때 패널은 사라지게 만든다.


2. 뒤로가기 버튼을 눌렀을 때, 이 패널이 나오게 만든다.


나오게 안 나오게 하는것은 게임오브젝트를 활성화 & 비활성화하는 것과 같은 의미이다.


쉽게 말해서 켰다 껐다 할 수 있는것이다.


이것을 가능하게 해주는 게 바로 


SetActive(bool value) 함수이다. GameObject 안에 존재하는 이 함수를 이용해서


true = 켜졌다, 활성화되어 있다, 현재 보이는 상태이다.

false = 꺼졌다, 비활성화되어 있다, 현재 보이지 않는 상태이다.


ㅡㅡㅡㅡㅡㅡㅡㅡ



[시작하면,] 


Start() 함수에서 SetActive(false)로 패널을 비활성화시켜 눈에 보이지 않게 사라지게 하고,


[뒤로가기 버튼을 누를 때]


SetActive(true)로 패널을 활성화시켜서 화면에 띄운다.


이렇게 하면, 패널을 이용한 팝업창 띄우기 성공.

Posted by sungho88
,