Program/Unity 2024. 1. 23. 18:15

코루틴 사용 기본 초기화

 

public void Start()
{
    StartCoroutine(CoroutineInit());
}

 

public IEnumerator CoroutineInit()
{

        //Firebase 기본.

        var task = FirebaseApp.CheckAndFixDependenciesAsync();

        yield return new WaitUntil(() => task.IsCompleted);

        if (task.IsFaulted || task.IsCanceled)
        {
            Debug.LogError("Error: " + task.Exception);
        }
        else
        {
            var app = FirebaseApp.DefaultInstance;

 

            if (app != null)
            {

                  //FireStore Database
                 dbRefFbStore = FirebaseFirestore.DefaultInstance;


                 //RealTime Database
                 //dbRefRealTime = FirebaseDatabase.GetInstance(url).RootReference;

                 //FireBase Auth
                 authFb = FirebaseAuth.DefaultInstance;

            }
            else
            {
                Debug.LogError("Firebase Init Fail");
            }
        }

}

posted by 헛소리
:
Program/Unity 2023. 8. 18. 11:40

UGUI 를 사용하다보면 Inspector에서 함수 연결시

OnValuChanged (변화하는값)  입력하는 값들이 있다.

 

여기에 기존 버튼에 함수 넣는거처럼 함수를 만들어서 넣게 되면.

 

해당 함수는 static parameter 를 받아 값을 0밖에 받아들이지 못한다.

 

이럴때  Dynamic  으로 등록을 시키면 되는데.

버튼을 등록시킬때 같은이름의 함수가 Dynamic 으로 등록되어있을것이다.  그걸 넣어주면 된다.

넣어주고 나면 값 입력시키는 곳이 사라지고.  변화한 값을 잘 받는다.

 

 

인스펙터 말고 코드에서 등록시키도  잘 동작한다.

 

using UnityEngine;
using TMPro;

public class TestSc : MonoBehaviour
{
    [SerializeField] private TMP_Dropdown dropdown;
    private void Start()
    {
        dropdown.onValueChanged.AddListener(ClickTest);
    }
    public void ClickTest(int changedValue)
    {
        Debug.Log("ClickTest = " + changedValue);
    }
}

 

 

 

가끔 물어보는 사람이 있어서..  적는

posted by 헛소리
:
Program/Unity 2023. 8. 2. 14:22

유니티에서 사용하는 Dictionary 는 Inspector 에서 보이지 않아서 데이터 확인해야 할때 불편하다.

 

그래서 이미 사용하고 있는 Dictionary 데이터들을 간단하게 인스펙터에 표시하기 위해서 만든 클래스

기본 클래스 구성은 위와 같고.

 

 

사용법은 인스펙터에서 보고싶은 클래스의 Dictionary 와 같은 타입을 만든다음. 

넣어주면 끝난다.

위의 클래스에는 임시의 데이터를 Dictionary에 넣어서 테스트했다.

UNITY_EDITOR로 묶은 이유는 인스펙터에서 보려고 만든거라.  에디터에서만 동작하면 되어서 묶어줬다.

 

 

인스펙터에서는 잘 표시 되어서 나온다

 

 

- 오랫만에 게시물을 올리면서  예전 게시물들을 찾아봤는데. 너무 옛날에 올린것들이라. 안 맞는게 많은거 같다...

posted by 헛소리
:
Program/Unity 2016. 2. 23. 15:02

오랫만에 업데이트하는 블로그 내용.



Momentum And Spring 


옵션을 주면.


양끝.


1~10번까지의 리스트가 있다면.


1번에서  리스트에 없는 0번위치까지 드래그가 되서 다시 1번으로 스프링되서 돌아오는 방식이다.(10번도 마찬가지 없는 11번으로 갔다가 다시 원래 10번으로 돌아옴)


Momentum 


옵션은.


그냥 정확히 끝에 1번이나 10번에서 멈춰서 양끝으로 더이상 드래그가 되질 않는 방식이다.




이 두개를 합쳐서 


Momentum And Spring 


옵션을 주고.


한쪽방향은 더이상 못움직이게.   한쪽방향은 스프링처럼 돌아오게 하려면.



UIScrollView - 클래스에서.


public bool m_BottomStop = false;
public bool m_TopStop = false;

변수 선언.

public void Drag () 의 

Vector3 constraint = mPanel.CalculateConstrainOffset(bounds.min, bounds.max);

if (constraint.magnitude > 1f)
{
    MoveAbsolute(offset * 0.5f);
mMomentum *= 0.5f;

}

이부분에.


if (constraint.magnitude > 1f)
{
MoveAbsolute(offset * 0.5f);
mMomentum *= 0.5f;

       //StopOption.
       if (m_BottomStop == true)
       {
             if (offset.y > 0)
               RestrictWithinBounds(true, canMoveHorizontally, canMoveVertically);
        }
        if (m_TopStop == true)
        {
              if (offset.y < 0)
                 RestrictWithinBounds(true, canMoveHorizontally, canMoveVertically);
         }
}

이렇게 적어주고

m_BottomStop 과 m_TopStop   에 True 값을 넣어줘서. 값을 셋팅해서 사용하면된다.


왼쪽 오른쪽도 만들고싶다면.

offset.x 를 활용하면 된다.
                        









posted by 헛소리
:
Daily 2015. 6. 3. 12:11

13개의 구슬이 존재하고 그 중 1개의 구슬 무게는 다르다(무거운지 가벼운지 모른다)


이 때 양팔저울 3번을 사용해서 다른 무게의 구슬을 구하라.


------------------------------------------------------


예전에 떠돌던 12개의 구슬에서 한번 더 업그레이드 한거 같다.


이론만 안다면 쉬운문제다.


-------------------------------------------------------


모든 구슬에 숫자를 새긴다. 1~13까지


이하 숫자는 구슬이라고 보면 됨.


첫번째 양팔저울 사용


1 2 3 4      |     5 6 7 8       의 구슬을 잰다.  



첫번째 양팔저울에서 기울었을 경우


1~8번까지의 구슬에 무게가 다른 구슬이 존재한다.


두번째 양팔저울 사용. 


1 7 8     |     5 6 2   의 구슬을 잰다.


이렇게 쟀을경우

(2-1) 기울은 쪽이 바뀌었으면. 양팔저울 재는 곳을 이동한 7 8 2 구슬중에 하나가 무게가 다른공이고

(2-2) 기울은 쪽이 바뀌지 않았으면 그대로 있는 구슬인 1 5 6 구슬중의 하나가 무게가 다른공이다.

(2-3) 기울기가 수평을 유지하게 되면. 재지 않은 3 4 구슬중의 하나가 무게가 다른공이다.



(2-1) 일 경우 

세번째 양팔저울 사용

7    |    8      을 잰다.

기울기가 수평을 유지하게 되면. 2가 무게가 다른구슬

기울기가 바뀌면. 8 이 무게가 다른구슬

기울기가 그대로이면 7이 무게가 다른구슬


(2-2)일 경우.

세번째 양팔저울 사용

5    |    6       을 잰다.

기울기가 수평을 유지하게 되면. 1이 무게가 다른구슬

기울기가 바뀌면. 5 가 무게가 다른구슬

기울기가 그대로이면 6이 무게가 다른구슬


(2-3)일 경우

세번째 양팔저울 사용

3    |    (4를 제외한 무게가 다르지않다고 판명난 구슬 한개)      를 잰다.


기울기가 수평이면 4가 무게가 다른구슬

기울기가 그대로이면 3이 무게가 다른구슬.







첫번째 양팔저울에서 기울지 않았을경우.



9 ~ 13 의 다섯개 구슬안에 무게가 다른구슬이 존재한다.


두번째 양팔저울 사용

9 10 11    |     (12,13을 제외한 다른 구슬 3개) 


이렇게 재면.


(2-1)양팔저울의 기울기가 수평이 아닐때.


무게가 다른 구슬 하나가  9 10 11 중에 하나 있다면. 


무게가 가벼운지 무거운지 알수가 있다.


9 10 11 이 내려가면 .   

무게가 다른 하나의 구슬은 무거운 구슬

9 10 11 이 올라가면

무게가 다른 하나의 구슬은 가벼운 구슬이다.


(2-2)양팔저울의 기울기가 수평인경우.

12 와 13중의 하나가 무게가 다르다.



(2-1)일 경우 

세번째 양팔저울 사용


9   |   10 을 잰다.


2-1에서 이미 무게가 다른 구슬은 무거운지 가벼운지. 알수 있었기 때문에.

무게가 가벼운 구슬일 경우엔 올라가 있는 쪽이 13개중 다른구슬일테고.

무게가 무거운 구슬일 경우엔 내려가 있는 쪽이 13개중 다른구슬이다.


9 와 10이 수평을 유지한다면 

11 이 다른 구슬이다.



(2-2)일경우 

세번재 양팔저울 사용.

12  |   (13을 제외한 다른구슬 1개)  


기울어 졌으면   12번 구슬이 무게가 다른구슬.

기울지 않았으면 13번 구슬이 무게가 다른 구슬이다.






posted by 헛소리
:
Program/Unity 2015. 2. 17. 11:36

파일을 저장할때.

내가 만든 클래스를 가볍게 리스트로 만들어

파일을 저장하는 방법.

 

C# 기준.

 

1. 파일 저장.

//내 저장할 리스트.

List<MyData> m_MyData= new List<MyData> ();

 

 

 

BinaryFormatter _binary_formatter = new BinaryFormatter();

 

//각 플랫폼별 폴더 지정하는건 http://blog.naver.com/nameisljk/110157303742  <-- 요 블로그에 잘 설명이 되있음

//폴더와 파일이름 을 넣음 .

 

FileStream _filestream = File.Create(Application.persistentDataPath + "/TestSave.dat");

 

//내가 저장할 리스트를 넣음.

 

_binary_formatter .Serialize(filestream, m_MyData);

 

filestream .Close();

 

 

 

 

2. 파일 불러오기

 

//내가 파일을 만든 파일 혹은 불러올 파일이 있는지 없는지를 체크함.

bool _fhile_check = File.Exists(pathForDocumentsFile(Application.persistentDataPath + "/TestSave.dat"));

 

 

BinaryFormatter _binary_formatter = new BinaryFormatter();

 

//파일을 불러옴.  FileMode - Open 설정.

FileStream _filestream = File.Open( (pplication.persistentDataPath + "/TestSave.dat") FileMode.Open);

 

//불러온 파일을 변환.

//내가 저장할 리스트 변수에 형변환해서 넣어줌.

m_MyData= (List<MyData>)_binary_formatter .Deserialize(_lestream );


filestream .Close();

 

 


3.

여기에서 Serialize 를 사용하기 위해선  try ~ catch 문으로 감싸줘야 함.
Serialize 에 자신이 만든 클래스를 넣기 위해선 자신이 만든 클래스 위에 [System.Serializable] 를 선언해줘야 함.

 

ex)

[System.Serializable]
public class MyData
{

private int m_Index = 0;

}

 

 

 

4.

using UnityEngine;
using System.Collections;

//List
using System.Collections.Generic;

//try catch Exctption

using System;  

//Filestream
using System.IO; 

//BinaryFormatter 등등
using System.Runtime.Serialization; 

using System.Runtime.Serialization.Formatters.Binary;

 


 


 

 

 

 

 

 

 

 

posted by 헛소리
:
Program/Unity 2015. 1. 30. 16:33

작업을 하다보니..

 

새로 등록한 이미지들의 Import Setting 바꿔주는 부분이 귀찮아서...

기존 작업방식은 추가한것들 한꺼번에 클릭후 Inspector 에서 동일하게 바꿔주는 방법이였는데..

 

정말 귀찮아서..만든 클래스.

 

사용법은

 

Assets 폴더 안에 Editor 폴더를 만들고 혹은 거기에 넣고

 

텍스쳐들이 들어있는 폴더나 바꾸고자 하는텍스쳐에 마우스 오른버튼을 클릭하면.

 

생성되어있는 MySpriteSet  이라는 메뉴를 클릭하면 사용자가 기본설정해논 텍스쳐 옵션대로 모든 텍스쳐가 셋팅된다.

 

스크립트 속 기본이 되는 텍스쳐 옵션은 사용자에 맞춰 변경하면 됨.

 

 

 

SetTexture.cs

 

posted by 헛소리
:
Program/Unity 2015. 1. 29. 17:15

클라에서 사용할 DB를 만들기 위해

XML과 Json 형식을 테스트 해보았습니다.

용량

원본 Excel 파일 - 약 1.3메가

XML 파일로 변환 - 약 8메가

Json 파일로 변환 - 약 3.7메가

 

읽어와서 자료형으로 저장하는데까지 걸리는 시간. (비율만 보시면됩니다.)

Unity 자체 지원 Xml로 파싱 - 10초

SimpleJson 으로 Json 파싱 - 10.5초 ~ 11초

LitJson으로 Json 파싱 - 20초

 

코드에서 사용하기 편리한순서.

LitJson > SimpleJson == Xml

LitJson 은 불러올때 형식을 맞춰서 클래스로 바로 저장가능하기때문에 편합니다.

 

결론..

클라와 서버간의 통신시 Json으로 주고받을땐 LitJson 으로 편하게. DB 내용이 많아지면 많아질수록. 너무 느림. 간단한 통신시에는 편함.

어플 용량에 신경써줘야 할경우 SimpleJson 으로

어플 용량에 신경쓸필요없이 속도만 낼경우 XML

 

posted by 헛소리
:
Program/Android 2010. 9. 7. 17:49
LayoutInflater  ?  << --- 오늘 처음 이걸 봤는데 ( 1~2시간전에 봤다.)

... 인터넷에서 설명들을 찾아보니 엄청 복잡하네 -ㅅ-;

뭐 쓰는 법은 다른 분들 블로그에 많을테니.. 일단 그냥 설명만 적어야겠다..


일단  import android.view.LayoutInflater;  해주고....

음.. 대충 내가 이해하기론 그렇다.

SetContentView 한 레이아웃위에 ..

다른레이아웃. <-- 팝업창같은 느낌? 

을 띄울때 사용한다고나 할까?

자식레이아웃으로 들어간다고나할까하는 느낌이다...

더 설명이 필요한가 -ㅅ-;; ㅋㅋㅋ

'Program > Android' 카테고리의 다른 글

아 이게 이 에러 였구나.......  (0) 2010.08.23
posted by 헛소리
:
Program/Android 2010. 8. 23. 16:13
[2010-08-23 11:18:22 - XXXXXXX] Failed to upload XXXXXXX.apk on device 'XXXXXXXXXX'
[2010-08-23 11:18:22 - XXXXXXX] java.io.IOException: Unable to upload file: timeout
[2010-08-23 11:18:22 - XXXXXXX] Launch canceled!

본인은 갤럭시 S 를 개발용 폰으로 쓰고 있다. 어느 날 부터.

저런 메세지가 뜨기 시작하더니 갤럭시 S 에 디버깅이 안되기 시작..

올리는데 시간이 초과했다나 머라나..

저번에 갤럭시 S 펌업을 하면서 무슨 문제가 생긴 모양인데...

좀 작은 예제용 프로젝트들은 잘 갤럭시에서 디버깅이 되지만 정작.. 내가 디버깅해야할

내 프로젝트는... 디버깅이 안되는 상황... 흙..

이제서야 그 해결책을 겨우 찾았다...

이렇게 간단할 줄이야...

이클립스 설정만 바꾸면 해결 되어지는 문제였다..... 이런 된장...

방법은

Window -> Preferences -> Android -> DDMS

로 가면

오른쪽 중간쯤에 위치한

ADB connection time out (ms) : 

라는게 존재한다..

별다른 내용이 없다면. 4000 <- 으로 초기 설정되어 있을것이다..

이 수치를 마구마구 늘려주면 된다...

난 100000 (100초)까지 올렸다.

어우 이렇게 간단한걸... 왜 안되나 고민을 하며..

apk 파일을 만들고 adb install 로 계속 셋팅해주면서... 디버깅을 하고 있었다니..

나도 참 노가다다 인생이다 노가다 인생...후...

'Program > Android' 카테고리의 다른 글

LayoutInflater  (0) 2010.09.07
posted by 헛소리
: