[코딩문제]피보나치 수열
출처 : 내 머리, 내 손
'공부 > c++(c, STL)' 카테고리의 다른 글
Swap (베타적 OR - XOR 사용) (0) | 2016.06.24 |
---|---|
[코딩문제]계단 오르기 - 3 계단 (0) | 2016.06.23 |
[코딩문제]셀프 넘버(self-number) 풀이 (0) | 2016.06.18 |
[코딩문제]문자열 거꾸로 출력 (0) | 2016.06.16 |
C++11 람다 식 (0) | 2016.06.10 |
NGUI 한글 입력 문제 - ime 버그
'공부 > Unity' 카테고리의 다른 글
MipMap(밉맵) - 이론 (0) | 2016.06.29 |
---|---|
Resources.Load<TextAsset> 가 null 일 때 (0) | 2016.06.22 |
유니티에서의 싱글톤(Singleton) 적용 (2) (0) | 2016.06.17 |
유니티에서의 싱글톤(Singleton) 적용 (0) | 2016.06.17 |
Vector3.forward, transform.forward (World 방향, Local 방향) (0) | 2016.06.15 |
[코딩문제]셀프 넘버(self-number) 풀이
//합만 구하는게 목적일 경우 int배열이 아니라 bool배열로 false, true체크해서 for문의 int i값만 더하는게 더 가볍다.
코딩 출처 : 내 머리, 내 손
'공부 > c++(c, STL)' 카테고리의 다른 글
[코딩문제]계단 오르기 - 3 계단 (0) | 2016.06.23 |
---|---|
[코딩문제]피보나치 수열 (0) | 2016.06.20 |
[코딩문제]문자열 거꾸로 출력 (0) | 2016.06.16 |
C++11 람다 식 (0) | 2016.06.10 |
Vector의 역순 검색, 역 반복자(reverse_iterator) (0) | 2016.02.07 |
유니티에서의 싱글톤(Singleton) 적용 (2)
바로 전 글에서 유니티에서 싱글톤 할 때
class 동적 생성을 하면 좀 문제가 있고
오브젝트를 만들어서 FindObjectOfType 로
찾아 쓰는게 좋다고 했는데
계속 진행을 해보다 보니
이것 역시 뭔가 아니었다.
정확히 뭐가 아니었냐하면
Scene이동을 할때마다 이 객체가 Destroy 된다.
FindObjectOfType 을 사용한 싱글톤의 사용범위가
그 해당 Scene에서만 한정 되어 버린다.
DontDestroyOnLoad 으로 남기면 되지 않겠냐? 라고
생각 할 수도 있지만
오브젝트의 성격에 따라 한계가 있다.
정말 계속 가지고 있을 오브젝트나
맵만 Scene체인지 하고
Player 같은 경우에는 괜찮지만
그 오브젝트를 다른 script에서
public 참조할경우에는 테스트 하는 경우에 문제가 있다.
Release용과 Test용 오브젝트를 별도로 생각 해야 한다.
그래서 다시 생각을 하게 된 것이다.
정보들을 순수 class 동적 할당된 싱글톤을 사용하고
매 Scene에 필요한 정보들을 가져와 Awake나 Start될때
파싱을 하는 것이다.
지난 글에서 class new를 사용하면 Warning이 뜬다고 했는데
본인이 잘못 생각하고 짠 부분이 있어서 그렇다.
public class SingletonClass<T> : MonoBehaviour where T : class, new()
가 아니라
public class SingletonClass<T> where T : class, new()
가 되어야 한다.
오브젝트로 사용될 class가 아닌데 monoBehaviour를 상속 받으니
워닝(Warning)이 뜨는 것이다.
위와 같이 하자.
그리고 Object용 싱글톤도 쓰일곳이 분명히 있다.
순수 Class처럼 사용할지
Object에 싱글톤을 걸지는
용도에 따라 잘 파악해서 사용하자.
오브젝트용 싱글톤 코드는 이전 글을 참조하자.
'공부 > Unity' 카테고리의 다른 글
Resources.Load<TextAsset> 가 null 일 때 (0) | 2016.06.22 |
---|---|
NGUI 한글 입력 문제 - ime 버그 (0) | 2016.06.19 |
유니티에서의 싱글톤(Singleton) 적용 (0) | 2016.06.17 |
Vector3.forward, transform.forward (World 방향, Local 방향) (0) | 2016.06.15 |
유니티 포커싱 없이 백그라운드(Background) 동작 시키기 (1) | 2016.06.14 |
유니티에서의 싱글톤(Singleton) 적용
싱글톤이란 디자인 패턴 중 하나로
실직적으로 class가 오직 한번만 생성되며
어디서 호출하든 같은 instance를 가져오게하여
데이터를 공유하거나 관리할 수 있는 방법론이다.
이는 c++ 부터 Direct 3D로 게임을 만들 때에도 사용되어왔으며
각종 manager 처리를 할 때 유용하다.
보통 static으로 처리를 하거나
null이 아닐때에는 new 하지 않고
있는 값을 return하는데
유니티에서는 좀 다른 방법을 써야 하기에
이렇게 글을 남긴다.
아래는 C++에서 하던 데로
유니티에서 작성한 싱글톤 class 이다.
유니티는 C# 스크립트를 사용했으므로 C#의 문법이 되겠다.
아래의 class를 상속하게 되면 그 class는 싱글톤이 되어 버린다.
(T는 템플릿, where 뒤에 있는 항목은 해당 템플릿이 가지는 속성이라고 생각하면 된다.)
public class Singleton<T> : MonoBehaviour where T : class, new()
{
protected static T instance;
public static T GetSingleton()
{
if (instance == null)
{
instance = new T();
if (instance == null)
{
//에러 메세지
Debug.LogError(" ** Class Create Fail -> " + typeof(T));
}
}
return instance;
}
}
하지만 위와 같이 해버리면 아래와 같은 Warning이 발생 한다.
/*
*
You are trying to create a MonoBehaviour using the 'new' keyword.
This is not allowed.
MonoBehaviours can only be added using AddComponent().
Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
Singleton`1:.ctor()
UtilManager:.ctor()
System.Activator:CreateInstance()
Singleton`1:GetSingleton() (at Assets/Manager/Singleton.cs:32)
Login:Start() (at Assets/Manager/Login.cs:8)
*
*/
'공부 > Unity' 카테고리의 다른 글
NGUI 한글 입력 문제 - ime 버그 (0) | 2016.06.19 |
---|---|
유니티에서의 싱글톤(Singleton) 적용 (2) (0) | 2016.06.17 |
Vector3.forward, transform.forward (World 방향, Local 방향) (0) | 2016.06.15 |
유니티 포커싱 없이 백그라운드(Background) 동작 시키기 (1) | 2016.06.14 |
쓰레드(Thread) 사용 시 OnDestroy() 이후 까지 주의하자 (0) | 2016.06.14 |
[코딩문제]문자열 거꾸로 출력
#include <iostream>
using namespace std;
void CopyStr(char* dst, int descSize, const char* src)
{
const char* tempSrc = src; //주소 복사
while (*tempSrc != '\0') //널문자가 나올 때까지 루프
{
tempSrc++; //주소 위치 증가
}
int size = tempSrc - src; //루프된 주소와 원본 주소 위치를 빼주면 사이즈가 나옴
//dst 메모리 초기화
char* tempDst = dst; //주소 복사
for (int i = 0; i < descSize; i++) //배열 사이즈 만큼 루프
{
*tempDst++ = '\0'; //널문자로 초기화하며서 주소 증가
}
for (int i = 0; i < size; i++, dst++) //위에서 구한 원본 사이즈 만큼 루프, 복사할 주소인 dst도 증가
{
*dst = *(--tempSrc); //tempSrc는 처음에 '\0'이 들어 있으므로 먼저 빼주면서 진행. 내부 값을 복사
}
}
int main()
{
char src[] = "hello world"; //원본문자
char dst[512]; //복사할 공간
CopyStr(dst, sizeof(dst), src); // 복사 함수
//출력
cout << dst << endl;
getchar();
}
입력 : hello world
출력 : dlrow olleh
출처 : 내 머리, 내 손
'공부 > c++(c, STL)' 카테고리의 다른 글
[코딩문제]피보나치 수열 (0) | 2016.06.20 |
---|---|
[코딩문제]셀프 넘버(self-number) 풀이 (0) | 2016.06.18 |
C++11 람다 식 (0) | 2016.06.10 |
Vector의 역순 검색, 역 반복자(reverse_iterator) (0) | 2016.02.07 |
공통함수 헤더 처리 시 유의 사항 - 추가(1) (0) | 2015.09.25 |
C#에서의 상수 사용 - c++의 #define 같은 활용 방안
C#에도 #define은 존재 한다.
하지만 c++ 에서의 용도와는 다르다.
그중 하나가 상수처럼 사용하고자 할때
c++ 에서는
#define PI 3.141592f
와 같이
3.141592f를 계속 사용하지 않기 위해서
define을 사용할 수 있었는데
이게 C#에서는 안된다.
C#의 정의는 역시 MSDN을 찾아보는게 최고이므로
url을 남기겠다.
https://msdn.microsoft.com/ko-kr/library/bb397677.aspx
static class Constants { public const double Pi = 3.141592f; }
C#에서는 static으로 별도의 클래스를 만들고
const로 변경 할 수 없는 값을 지정해
사용하는 것을 권장함을 알아두자.
'공부 > C#' 카테고리의 다른 글
연산자 오버로딩(==, !=) (0) | 2017.05.12 |
---|---|
C# 배열 비우기 - Array.Clear, Array.Copy, Array.Resize 이용 (0) | 2016.06.13 |
C# 람다 식 (0) | 2016.06.08 |
C# Windows Forms - 오목 (0) | 2016.05.31 |
소켓 통신, 웹 통신(간략 설명, 메모) (0) | 2016.05.28 |
Vector3.forward, transform.forward (World 방향, Local 방향)
유니티에는 각각의 GameObject들에 대해
방향을 나타내는 백터가 내장되어있다.
스크립트에서 확인을 해보면
Vector3.up
Vector3.down
Vector3.forward
Vector3.back
Vector3.left
Vector3.right
와 같은 값이 존재하는데
이들은 World 의 방향성을 나타낸다.
즉 하나의 오브젝트의 Rotate를 변경하여도
위의 변수들의 방향은 바뀌지 않는다는 것이다.
그렇다면 각각의 오브텍트가 가지는 방향은
어떻게 찾을까?(Local 방향)
그것은 각각의 GameObject들의
transform에 내장되어있다.
transform.up
transform.forward
transform.right
이렇게만 있는데
그럼 나머지 down과 back과 left는 어떻게 해야 하는냐?
각각 위의 값을 -(음수, 마이나스)해주면 된다.
'공부 > Unity' 카테고리의 다른 글
유니티에서의 싱글톤(Singleton) 적용 (2) (0) | 2016.06.17 |
---|---|
유니티에서의 싱글톤(Singleton) 적용 (0) | 2016.06.17 |
유니티 포커싱 없이 백그라운드(Background) 동작 시키기 (1) | 2016.06.14 |
쓰레드(Thread) 사용 시 OnDestroy() 이후 까지 주의하자 (0) | 2016.06.14 |
[잡담]유니티로 서버 달지 말자!!! (0) | 2016.06.11 |
유니티 포커싱 없이 백그라운드(Background) 동작 시키기
유니티로 게임을 빌드 시키고 테스트를 할때
다른 프로그램을 실행하거나
마우스로 바탕화면을 클릭하거나 하여
포커싱이 유니티 밖으로 나가게 되면
게임이 동작이 멈춰보이고
다시 유니티를 클릭하면
여러 동작들이 한꺼번에 되는 경우가 있다.
그 이유가 유니티는 기본값으로
포커싱이 안되어 있으면 화면이 갱신되지 않기 때문이다.
포커싱이 안되어 있어도
동작을 시키기 위해서는
아래와 같은 코드를 스크립트에 적용 시키면 된다.
public void Awake()
{
Application.runInBackground = true;
}
'공부 > Unity' 카테고리의 다른 글
유니티에서의 싱글톤(Singleton) 적용 (0) | 2016.06.17 |
---|---|
Vector3.forward, transform.forward (World 방향, Local 방향) (0) | 2016.06.15 |
쓰레드(Thread) 사용 시 OnDestroy() 이후 까지 주의하자 (0) | 2016.06.14 |
[잡담]유니티로 서버 달지 말자!!! (0) | 2016.06.11 |
Unity Scene Change(씬 바꾸기) (0) | 2016.06.04 |
쓰레드(Thread) 사용 시 OnDestroy() 이후 까지 주의하자
유니티 자체는 싱글 쓰레드로 되어있다.
하지만 스크립트에서
thread를 동적 할당 하여 사용할 수 있다.
여기서 문제가 발생 할 수 있는 것이다.
유니티의 play를 종료해도
해당 Thread가 계속 동작을 하고 있다는 것이다.
네트워크 게임을 만들다가
유의 했던 사항들 몇가지 적어보겠다.
1. OnDestroy() 이벤트 함수에 종료 처리 할 수 있는 것들은 해두자.
2. Thread 종료는 Abort() 로 하지 말자. 메인 Thread에서 놓아줄 뿐이지 동작 하고 있다.
3. Thread 내에서 While(true) 는 가급적 사용하지 말고 bool 변수를 두어 break 외에도 빠져 나갈 수 있게 하자.
4. 좀 위험 하다 생각하면 try, catch 를 하고 catch 부분에 Debug를 남기자. (뭐라도 남겨라)
5-1. TCP 소켓 통신 에서는 Client 접속이 끊어지면 Read Failure가 계속 발생 함에 유의 하자.
5-2. 연속 발생 횟수를 체크해서 Thread 의 loop를 끝내고 나가도록 하자.
5-3. Thread 나가기 전에 close() 할 수 있는건 하자.
'공부 > Unity' 카테고리의 다른 글
Vector3.forward, transform.forward (World 방향, Local 방향) (0) | 2016.06.15 |
---|---|
유니티 포커싱 없이 백그라운드(Background) 동작 시키기 (1) | 2016.06.14 |
[잡담]유니티로 서버 달지 말자!!! (0) | 2016.06.11 |
Unity Scene Change(씬 바꾸기) (0) | 2016.06.04 |
AudioSource 다중 사용 (0) | 2016.06.03 |