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 헛소리
: