'포트폴리오' 카테고리의 다른 글
c++ binary Search Tree (0) | 2019.10.28 |
---|---|
c++ STL container 만들기 (0) | 2019.10.28 |
c++ String Class 만들기 (0) | 2019.10.28 |
Projectile 기능 (0) | 2019.10.07 |
에어템플릿(유니티) (0) | 2019.10.07 |
c++ binary Search Tree (0) | 2019.10.28 |
---|---|
c++ STL container 만들기 (0) | 2019.10.28 |
c++ String Class 만들기 (0) | 2019.10.28 |
Projectile 기능 (0) | 2019.10.07 |
에어템플릿(유니티) (0) | 2019.10.07 |
c++ binary Search Tree (0) | 2019.10.28 |
---|---|
c++ STL container 만들기 (0) | 2019.10.28 |
c++ String Class 만들기 (0) | 2019.10.28 |
게이트식스 리뷰영상 (0) | 2019.10.07 |
에어템플릿(유니티) (0) | 2019.10.07 |
c++ binary Search Tree (0) | 2019.10.28 |
---|---|
c++ STL container 만들기 (0) | 2019.10.28 |
c++ String Class 만들기 (0) | 2019.10.28 |
게이트식스 리뷰영상 (0) | 2019.10.07 |
Projectile 기능 (0) | 2019.10.07 |
AndroidJavaClass m_UnityPlayer;
AndroidJavaObject m_CurrentActivity;
AndroidJavaClass m_ContextCombat;
// 생성자
public PermissionManager()
{
// Unity Android의 부모역할을 하는 클래스
m_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
// 현재 실행되고 있는 Android Activity를 가져온다
m_CurrentActivity = m_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
// 권한여부를 가져올 수 있는 클래스
m_ContextCombat = new AndroidJavaClass("android.support.v4.content.ContextCompat");
}
/** GetAndroidPhoneNumber를 Android Code로 이해할 경우.
public class CurrentActivity extends UnityPlayerActivity
{
protected void GetPhoneNumber()
{
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
PhoneNumber = tm.getLine1Number();
}
}
*/
public string GetAndroidPhoneNumber()
{
string str = "";
if (m_CurrentActivity == null)
return "";
if (IsPermissionGranted(Permissions.READ_PHONE_STATE) == false)
return "";
// 액티비티에서 Android Navtive Method 인 "getSystemService"를 호출
AndroidJavaObject pServiceObj = m_CurrentActivity.Call<AndroidJavaObject>("getSystemService", "phone");
if (pServiceObj == null)
return "";
// 자바 클래스 가져옴
AndroidJavaClass clazz = new AndroidJavaClass("java.lang.Class");
if (clazz == null)
return "";
// 자바 클래스에 있는 TelephonyManager클래스 가져옴
AndroidJavaObject pDest = clazz.CallStatic<AndroidJavaObject>("forName", "android.telephony.TelephonyManager");
if (pDest == null)
return "";
//"getSystemService"로 가져온 SystemService Instance를 TelephonyManager로 캐스팅함
AndroidJavaObject pTelephonyService = pDest.Call<AndroidJavaObject>("cast", pServiceObj);
if (pTelephonyService == null)
return "";
//이로서 pTelephonyService은 TelephonyManager의 인스턴스로 사용가능
str = pTelephonyService.Call<string>("getLine1Number");
//Debug.Log("PhoneNumber1 : " + str);
if (string.IsNullOrEmpty(str) == true)
return "";
if (str.Length > 0 && str[0] == '+')
{
str = "0" + str.Substring(3);
}
//Debug.Log("PhoneNumber2 : " + str);
return str;
}
[UniteSeoul 2020] Tips & Tricks For Using Profiler (0) | 2020.12.02 |
---|---|
AssetBundle 관리 (0) | 2020.04.13 |
단발성 진동 알람 이벤트 처리 (0) | 2019.04.24 |
unity google play games plugin 연동 문제 (0) | 2018.08.17 |
베지어 곡선 (0) | 2017.01.17 |
필요 예) 게임을 Auto Mode로 설정 한 뒤 설정한 조건에 의해 Auto가 종료 될 경우 이것을 알려주기 위해 핸드폰을 단발적으로 진동 시킨다.
사용 - Handheld.Vibrate();
설명 - 디바이스를 1회 진동시킨다.
[UniteSeoul 2020] Tips & Tricks For Using Profiler (0) | 2020.12.02 |
---|---|
AssetBundle 관리 (0) | 2020.04.13 |
(Unity)안드로이드 전화번호 가지고오기 (0) | 2019.08.29 |
unity google play games plugin 연동 문제 (0) | 2018.08.17 |
베지어 곡선 (0) | 2017.01.17 |
-문제-
-원인-
-해결-
[UniteSeoul 2020] Tips & Tricks For Using Profiler (0) | 2020.12.02 |
---|---|
AssetBundle 관리 (0) | 2020.04.13 |
(Unity)안드로이드 전화번호 가지고오기 (0) | 2019.08.29 |
단발성 진동 알람 이벤트 처리 (0) | 2019.04.24 |
베지어 곡선 (0) | 2017.01.17 |
// 0.0 >= t <= 1.0 her be magic and dragons
public Vector3 GetPointAtTime(float t)
{
float u = 1f - t;
float tt = t * t;
float uu = u * u;
float uuu = uu * u;
float ttt = tt * t;
Vector3 p = uuu * this.points[0].position; //first term
p += 3 * uu * t * this.points[1].position; //second term
p += 3 * u * tt * this.points[2].position; //third term
p += ttt * this.points[3].position; //fourth term
return p;
}
[UniteSeoul 2020] Tips & Tricks For Using Profiler (0) | 2020.12.02 |
---|---|
AssetBundle 관리 (0) | 2020.04.13 |
(Unity)안드로이드 전화번호 가지고오기 (0) | 2019.08.29 |
단발성 진동 알람 이벤트 처리 (0) | 2019.04.24 |
unity google play games plugin 연동 문제 (0) | 2018.08.17 |
Semaphore and Monitor
Semaphore의 문제점 보완
- 함수명으로 Semaphore의 사용을 구분한다.
Mutex (Mutual exclusion)
- Mutual exclusion을 구현하기 위해 사용하는 Sleeping Lock
- 동일한 Mutex를 사용할 때 Mutex_lock()을 호출한 Process와 Mutex_unlock()을 호출한 Process가 일치해야 된다.
Semaphore의 구현
- 기본적으로 C 구조체 이다.
P함수 / V함수 구현
- Interrupt disable을 사용해야 안전성이 보장된다.
- 짧은 시간이기 때문에 Interrupt disable을 사용해도 문제가 없다.
- Cnt = Semaphore
- Cnt가 0이상일 경우 : 남아있는 열쇠(자원)의 개수
- Cnt가 0이하일 경우 : 절대값이 Queue에서 대기중인 Process의 개수
- 기본적으로 Single Processor용 Mechanism
Multi Processor Semaphore Mechanism
- Atomic OS 필요 : 글로벌 자원를 읽고, 쓰는 등 전체의 과정을 쪼갤 수 없는 기본 단위로 만듦
- Bus를 장악하여 한 Processor가 자원을 사용하고 있을 경우 다른 Processor의 Bus Transaction을 차단
TAS (Test And Set) Instruction
- 대표적인 Multi Processor Semaphore Mechanism
- 메모리의 Boolean 변수를 읽어서 확인 후 값을 1로 쓰는 작업을 Atomic하게 수행
- Busy waiting이란 단점이 있다.
*Busy Waiting(Spining) : 특정 조건의 만족 여보를 루프를 돌면서 반복하여 확인하는 기법
Monitor
- P나 V를 빼먹어서 생기는 오류를 최대한 줄이기 위해 사용
- Java에서 Synchronized Class가 예
Monitor API
- condition 변수 : 어떤 조건이 충족되기를 기다리고 있는 Process들의 Waiting Queue
- Monitor는 한번에 하나의 Process만 내부의 Method를 수행할 수 있도록 허용하기 때문에 Monitor 내부의 변수들을 따로 보호하지 않는다.
Hoare Style Monitor(Signal-and-Urgent-wait monitor)
- waitQueue에서 깨어난 Process가 바로 monitor내부로 진입하는 방식의 Monitor
*Signaler Queue : Signal을 보낸 Process가 Monitor밖에서 대기하기 위한 Queue
Brinch-Hansen Style Monitor
- Wait Queue에 Signal을 보낸 Process가 수행을 계속하는 방식의 Monitor
Monitor Implementation
Process Synchronization (0) | 2016.10.20 |
---|---|
CPU Scheduling (0) | 2016.10.15 |
MultiThreading (0) | 2016.10.13 |
Context Switching(2) (0) | 2016.10.11 |
Context Switching(1) (0) | 2016.10.11 |