'2014/01'에 해당되는 글 185건

  1. 2014.01.05 [펌][C# 강좌] 직접 만들어보는 메모리 풀 클래스
  2. 2014.01.04 유니티 개발시 필요한 라이프 사이클
  3. 2014.01.04 Unity 3.x Game Development Essentials 한국어판 C#과 자바스크립트로 하는 유니티 3.x 게임 개발
  4. 2014.01.04 C# 동영상 강의 모은 곳 사이트 주소
  5. 2014.01.04 유니티 유/무료 강좌
  6. 2014.01.04 NGUI: Events
  7. 2014.01.02 영어와 숫자만 가능하게 처리하기
  8. 2014.01.02 TextInputTest 예제 소스
  9. 2014.01.01 pc 마인드 맵 프로그램
  10. 2014.01.01 네이버 나눔고딕코딩 다운

[펌][C# 강좌] 직접 만들어보는 메모리 풀 클래스

|




MemoryPool.unitypackage


MemoryPool.cs

많은 량의 객체들을 실시간으로 생성하고, 삭제하는 코드로 인해서 메모리가 빠르게 고갈되고,

쌓인 가비지로 인해 버벅거리는 현상이 발생한다면 메모리 풀 시스템을 활용하는게 좋습니다.

에셋스토어에도 그런 시스템을 판매하는걸로 알고 있지만, 직접 만들어 보았습니다.

많이 써보시고, 조금씩 수정하면서 사용하셔도 됩니다.





using UnityEngine;

using System.Collections;

 

//-----------------------------------------------------------------------------------------

// 메모리 클래스

// 용도 : 특정 게임오브젝트를 실시간으로 생성과 삭제하지 않고,

//      : 미리 생성해 게임오브젝트를 재활용하는 클래스입니다.

//-----------------------------------------------------------------------------------------

//MonoBehaviour 상속 안받음. IEnumerable 상속시 foreach 사용 가능

//System.IDisposable 관리되지 않는 메모리(리소스) 해제

public class MemoryPool : IEnumerable, System.IDisposable {

    //-------------------------------------------------------------------------------------

    // 아이템 클래스

    //-------------------------------------------------------------------------------------

    class Item

    {

        public bool active; //사용중인지 여부

        public GameObject gameObject;

    }

    Item[] table;

 

    //------------------------------------------------------------------------------------

    // 열거자 기본 재정의

    //------------------------------------------------------------------------------------

    public IEnumerator GetEnumerator()

    {

        if (table == null)

            yield break;

 

        int count = table.Length;

 

        for (int i = 0; i < count; i++)

        {

            Item item = table[i];

            if (item.active)

                yield return item.gameObject;

        }

    }

    //-------------------------------------------------------------------------------------

    // 메모리 생성

    // original : 미리 생성해 원본소스

    // count : 최고 갯수

    //-------------------------------------------------------------------------------------

    public void Create(Object original, int count)

    {

        Dispose();

        table = new Item[count];

 

        for (int i = 0; i < count; i++)

        {

            Item item = new Item();

            item.active = false;

            item.gameObject = GameObject.Instantiate(original) as GameObject;

            item.gameObject.SetActive(false);

            table[i] = item;

        }

    }

    //-------------------------------------------------------------------------------------

    // 아이템 요청 - 쉬고 있는 객체를 반납한다.

    //-------------------------------------------------------------------------------------

    public GameObject NewItem()

    {

        if (table == null)

            return null;

        int count = table.Length;

        for (int i = 0; i < count; i++)

        {

            Item item = table[i];

            if (item.active == false)

            {

                item.active = true;

                item.gameObject.SetActive(true);

                return item.gameObject;

            }

        }

 

        return null;

    }

    //--------------------------------------------------------------------------------------

    // 아이템 사용종료 - 사용하던 객체를 쉬게한다.

    // gameOBject : NewItem으로 얻었던 객체

    //--------------------------------------------------------------------------------------

    public void RemoveItem(GameObject gameObject)

    {

        if (table == null || gameObject == null)

            return;

        int count = table.Length;

       

        for (int i = 0; i < count; i++)

        {

            Item item = table[i];

            if (item.gameObject == gameObject)

            {

                item.active = false;

                item.gameObject.SetActive(false);

                break;

            }

        }

    }

    //--------------------------------------------------------------------------------------

    // 모든 아이템 사용종료 - 모든 객체를 쉬게한다.

    //--------------------------------------------------------------------------------------

    public void ClearItem()

    {

        if (table == null)

            return;

        int count = table.Length;

 

        for (int i = 0; i < count; i++)

        {

            Item item = table[i];

            if (item != null && item.active)

            {

                item.active = false;

                item.gameObject.SetActive(false);

            }

        }

    }

    //--------------------------------------------------------------------------------------

    // 메모리 삭제

    //--------------------------------------------------------------------------------------

    public void Dispose()

    {

        if (table == null)

            return;

        int count = table.Length;

 

        for (int i = 0; i < count; i++)

        {

            Item item = table[i];

            GameObject.Destroy(item.gameObject);

        }

        table = null;

    }

 

}

 

 



using UnityEngine;

using System.Collections;

 

public class CsCube : MonoBehaviour {

 

    public float speed = 2.0f;

    public GameObject missilePrefab;

 

    //missile time

    float fireRate = 0.2f;

    float startTime;

    float shootTimeLeft;

 

    MemoryPool pool = new MemoryPool();

    GameObject[] missile;

 

    // Use this for initialization

                  void Start () {

        startTime = Time.time;

 

        int poolCount = 10;

        pool.Create(missilePrefab, poolCount);//메모리 사용

        missile = new GameObject[poolCount];

        for (int i = 0; i < missile.Length; i++)

        {

            missile[i] = null;

        }

                  }

    void OnApplicationQuit()

    {

        pool.Dispose();//메모리 삭제

    }

 

                  // Update is called once per frame

                  void Update () {

 

        float amtMove = speed * Time.deltaTime;

        float key = Input.GetAxis("Horizontal");

        transform.Translate(Vector3.right * key * amtMove);

 

 

        shootTimeLeft = Time.time - startTime;

        //발사

        if (Input.GetMouseButtonDown(0))

        {

            if (shootTimeLeft > fireRate)

            {

                for (int i = 0; i < missile.Length; i++)

                {

                    if (missile[i] == null)

                    {

                        missile[i] = pool.NewItem();

                        missile[i].transform.position = transform.position;

                        break;

                    }

                }

 

                startTime = Time.time;

                shootTimeLeft = 0.0f;

            }

        }

 

        //미사일삭제

        for (int i = 0; i < missile.Length; i++)

        {

            if (missile[i])

            {

                if (missile[i].transform.position.z > 20)

                {

                    pool.RemoveItem(missile[i]);

                   // missile[i].GetComponent<CsMissile>().init();

                    missile[i] = null;

                }

            }

        }

 

 

                  }

 

 

 

}

 

Trackback 0 And Comment 0

유니티 개발시 필요한 라이프 사이클

|



Trackback 0 And Comment 0

Unity 3.x Game Development Essentials 한국어판 C#과 자바스크립트로 하는 유니티 3.x 게임 개발

|


 

유니티 테크놀로지 사의 교육 전문가가 알려주는 유니티 게임 프로그래밍 입문서! 
C#과 자바스크립트를 익힐 수 있는 유니티 게임 개발 스크립팅!!

[CD 1 (유니티코리아 제공 유니티 3.5 무료 버전과 프로모션 영상 수록)]

< 요약 >

다년간의 유니티 강의를 거쳐, 현재 유니티 테크놀로지에서 교육 관련 부분을 담당하고 있는 윌 골드스톤의 경험과 지식이 담긴 초보자를 위한 유니티 입문서다. 세계 최초의 유니티 책으로 유명한 『Unity Game Development Essentials』의 개정판으로 3D의 기본 개념, 인터페이스와 스크립팅 입문, 유니티 핵심 기능과 스크립팅 활용을 통한 실제 게임 메카닉 구현, 최적화와 게임 빌드를 통한 배포까지의 내용을 실제 개발 예제를 통해 자세히 설명한다.

< 소개 >

게임 엔진은 우리가 익히 알고, 즐기는 게임들의 이면에서 그 게임을 돌아가게 만드는 도구다. 유니티는 가장 널리 사용되고, 사랑 받는 게임 개발 엔진이다. 게임뿐 아니라 웹, 데스크톱, 모바일, 콘솔에서의 인터랙티브한 경험을 만들기 위해 취미 개발자에서부터 대형 스튜디오에 이르기까지, 다양한 사람들이 유니티를 사용한다. 유니티가 제공하는 직관적이고 사용하기 쉬운 기능과 이 책을 통해, 이전과는 비교할 수 없을 정도로 손쉽게 게임 개발을 시작할 수 있다. 

실질적인 접근을 취하는 이 책은 유니티를 이용한 개발에 들어가기 전에, 먼저 3D 게임 개발의 주요 개념을 소개한다. 그 다음 간단한 게임 디자인의 프로토타입을 거쳐, 본격적으로 더 큰 규모의 게임 개발로 들어간다. 이 과정에서 3D 월드 제작, 스크립팅, 게임 메카닉 구현과 같이 게임 개발의 필수 요소를 다룬다.

[부록 CD 수록] 유니티코리아 제공
■ 윈도우용 유니티 3.5.1 무료 버전
■ 유니티 프로모션 영상

[출판사 제공]

 

현존 개발서중 최고라고 손꼽히는 개발서

Trackback 0 And Comment 0

C# 동영상 강의 모은 곳 사이트 주소

|

http://www.sqler.com/408555

Trackback 0 And Comment 0

유니티 유/무료 강좌

|

http://www.unity3dstudy.com/


무료강좌에도 괜찮은 내용이 꾀 있는 것 같고 여유가 된다면 유료 강좌도 들을만 할 것 같다.


Trackback 0 And Comment 0

NGUI: Events

|

NGUI: Events

 

You can add the following functions to your scripts placed on widgets or in-game objects with a collider, provided they are drawn with a camera that has the UICamera script attached:

  • void OnHover (bool isOver) – Sent out when the mouse hovers over the collider or moves away from it.Not sent on touch-based devices.
  • void OnPress (bool isDown) – Sent when a mouse button (or touch event) gets pressed over the collider (with ‘true’) and when it gets released (with ‘false’, sent to the same collider even if it’s released elsewhere).
  • void OnClick() — Sent to a mouse button or touch event gets released on the same collider as OnPress. UICamera.currentTouchID tells you which button was clicked.
  • void OnDoubleClick () — Sent when the click happens twice within a fourth of a second. UICamera.currentTouchID tells you which button was clicked.
  • void OnSelect (bool selected) – Same as OnClick, but once a collider is selected it will not receive any further OnSelect events until you select some other collider.
  • void OnDrag (Vector2 delta) – Sent when the mouse or touch is moving in between of OnPress(true) and OnPress(false).
  • void OnDrop (GameObject drag) – Sent out to the collider under the mouse or touch when OnPress(false) is called over a different collider than triggered the OnPress(true) event. The passed parameter is the game object of the collider that received the OnPress(true) event.
  • void OnInput (string text) – Sent to the same collider that received OnSelect(true) message after typing something. You likely won’t need this, but it’s used by UIInput
  • void OnTooltip (bool show) – Sent after the mouse hovers over a collider without moving for longer thantooltipDelay, and when the tooltip should be hidden. Not sent on touch-based devices.
  • void OnScroll (float delta) is sent out when the mouse scroll wheel is moved.
  • void OnKey (KeyCode key) is sent when keyboard or controller input is used.

Inside your event functions you can always figure out who sent the event (UICamera.currentCamera), RaycastHit that resulted in this event (UICamera.lastHit), as well as the on-screen position of the touch or mouse (UICamera.lastTouchPosition). You can also determine the ID of the touch event (UICamera.currentTouchID), which is ‘-1′ for the left mouse button, ‘-2′ for right, and ‘-3′ for middle.

For example, the following script will print “Hello World!” when the collider it’s attached to gets clicked on.


'잡다한것들전부 > ' 카테고리의 다른 글

유니티 개발시 필요한 라이프 사이클  (0) 2014.01.04
유니티 유/무료 강좌  (0) 2014.01.04
NGUI: Events  (0) 2014.01.04
pc 마인드 맵 프로그램  (0) 2014.01.01
네이버 나눔고딕코딩 다운  (0) 2014.01.01
유니티 모바일 에서의 처리  (0) 2014.01.01
Trackback 0 And Comment 0

영어와 숫자만 가능하게 처리하기

|

//id 형식 체크

bool id_check(const char * text) {

const char c = *text;


if((c < '0' || c > '9') && (c < 'a' || c > 'z') && (c < 'A' || c > 'Z')) {

CCMessageBox("id는 영어와 숫자만 가능합니다","아이디체크");

return (false);             

}

return true;

}

'잡다한것들전부 > ' 카테고리의 다른 글

cocos2d-x 로딩 관련  (0) 2014.01.06
cocos2d-x 샘플 소스 소개  (0) 2014.01.06
영어와 숫자만 가능하게 처리하기  (0) 2014.01.02
TextInputTest 예제 소스  (0) 2014.01.02
string::find와 string::npos 관계  (0) 2013.12.24
sd 카드 접근  (0) 2013.12.23
Trackback 0 And Comment 0

TextInputTest 예제 소스

|

cocos2d-x 샘플소스


모든 클래스는 TestScene 상속받음

runThisTest() 함수 실행



runThisTest 에서는 replaceScene 실행함

예)
void TextInputTestScene::runThisTest()
{
    CCLayer* pLayer = nextTextInputTest();
    addChild(pLayer);

    CCDirector::sharedDirector()->replaceScene(this);
}

씬전환은 init 함수에서 바로 하면 에러가 난다. ->씬이 만들어지기전에 전환을 해버려서 에러
반드시 업데이트는 한번 돌리고 나서 해야된다.







TextFieldTTFDefaultTest 클래스에 딜리게이트 추가


class TextFieldTTFDefaultTest : public KeyboardNotificationLayer, public CCTextFieldDelegate

{


// CCTextFieldDelegate

    virtual bool onTextFieldAttachWithIME(CCTextFieldTTF * sender);

    virtual bool onTextFieldDetachWithIME(CCTextFieldTTF * sender);

    virtual bool onTextFieldInsertText(CCTextFieldTTF * sender, const char * text, int nLen);

    virtual bool onTextFieldDeleteBackward(CCTextFieldTTF * sender, const char * delText, int nLen);

    virtual bool onDraw(CCTextFieldTTF * sender);


}



void TextFieldTTFDefaultTest::onEnter()

{

//CCTextFieldTTF 생성

CCTextFieldTTF * pTextField = CCTextFieldTTF::textFieldWithPlaceHolder("<click here for input>",

FONT_NAME,

FONT_SIZE);

addChild(pTextField);


//딜리게이트 추가

pTextField->setDelegate(this);



}


TextInputTest.zip


정리한것 TextInputLayer


TextInputLayer.zip


TextInputDevide.zip



'잡다한것들전부 > ' 카테고리의 다른 글

cocos2d-x 샘플 소스 소개  (0) 2014.01.06
영어와 숫자만 가능하게 처리하기  (0) 2014.01.02
TextInputTest 예제 소스  (0) 2014.01.02
string::find와 string::npos 관계  (0) 2013.12.24
sd 카드 접근  (0) 2013.12.23
c 와 c++ 관련 자료  (0) 2013.12.19
Trackback 0 And Comment 0

pc 마인드 맵 프로그램

|

마인드 맵 프로그램

실제로 마인드 맵을 할지 안할지는 잘 모르겠지만

무료로 서비스되는 소프트웨어가 있어서 소개합니다.


http://www.xmindkorea.net/



마인드맵

문서의 서식이나 규정에 상관없이 머리속에 생각나는 그대로 생각하고 정리하는 프로그램




X마인드 실행 후
원하시는 양식을 선택 하셔서 결정, Insert키와 Delete키로 자신이 원하는 곳에 새로운 컴포넌트 생성이 가능하며

각 사각형 박스에서... 
F2 : 자신이 원하시는 내용을 정리 해 넣을수 있습니다.
      또는 해당 박스에서 그냥 글씨를 입력하셔도 바로 수정이 가능 합니다.

F4 : 메모창을 띠워 해당 컴포넌트 창에 메모를 삽입 가능합니다.





























































'잡다한것들전부 > ' 카테고리의 다른 글

유니티 유/무료 강좌  (0) 2014.01.04
NGUI: Events  (0) 2014.01.04
pc 마인드 맵 프로그램  (0) 2014.01.01
네이버 나눔고딕코딩 다운  (0) 2014.01.01
유니티 모바일 에서의 처리  (0) 2014.01.01
SendMessage 유니티 메시지 전달  (0) 2014.01.01
Trackback 0 And Comment 0

네이버 나눔고딕코딩 다운

|

http://dev.naver.com/projects/nanumfont/

'잡다한것들전부 > ' 카테고리의 다른 글

NGUI: Events  (0) 2014.01.04
pc 마인드 맵 프로그램  (0) 2014.01.01
네이버 나눔고딕코딩 다운  (0) 2014.01.01
유니티 모바일 에서의 처리  (0) 2014.01.01
SendMessage 유니티 메시지 전달  (0) 2014.01.01
특정 vector3 값 만 바꿀때  (0) 2014.01.01
Trackback 0 And Comment 0
prev | 1 | ··· | 15 | 16 | 17 | 18 | 19 | next