달력

62024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

Invoke, InvokeRepeating 



지연 호출, 일정 간격 호출 기능을 가지고 있는 Invoke, InvokeRepeating에 대해 알아보도록 하겠습니다.




  • Invoke

Invoke (string methodName, float time


invoke의 인자 값으로 methodName과 time이 들어 갑니다.


말그대로 첫번째에는 실행할 메소드의 이름을 넣어주고 두번째에는 몇초 후 메소드를 실행시킬것인지 시간을 적어 주시면 됩니다.


아래의 그림으로 예로 들면 "SpawnObject메소드를 2초후에 실행 시켜라" 라는 의미가 됩니다.


사용 예)

public class InvokeScript : MonoBehaviour {
    public GameObject target;
    
    void Start() {
        Invoke ("SpawnObject", 2);
    }
    
    void SpawnObject() {
        Instantiate(target, new Vector3(0, 2, 0), Quaternion.identity);
    }
}




  • InvokeRepeating

InvokeRepeating (string methodName, float time, float repeatRate


invokeRepeating의 인자 값으로 methodName과 time이 들어가며 Invoke와 다르게 repeatRate라는 인자값이 하나더 추가 되었습니다.


time 까지는 Invoke와 동일하며 3번째 인자값은 몇초마다 한번씩 실행을 시킬 시간을 적어주시면 됩니다.


아래의 그림으로 예로 들면 "SpawnObject메소드를 2초후에 1초마다 실행 시켜라" 라는 의미가 됩니다.


사용 예)

public class InvokeRepeating : MonoBehaviour {
    public GameObject target;

    void Start() {
        InvokeRepeating("SpawnObject", 2, 1);
    }
    
    void SpawnObject() {
        float x = Random.Range(-2.0f, 2.0f);
        float z = Random.Range(-2.0f, 2.0f);
        Instantiate(target, new Vector3(x, 2, z), Quaternion.identity);
    }
}



해당 Invoke 함수의 타임 인자값을 랜덤으로 돌릴 수 없습니다.

랜덤 값을 돌리긴 위해서는 코루틴(Coroutine) 라는 것을 이용해야 합니다.


코루틴 사용법 ↓↓↓↓↓


http://iflife1124.tistory.com/18


Posted by JakeGD
|

서식문자 종류

 서식문자

출력 대상(자료형) 

출력 형태 

%d

char, short, int

부호 있는 10진수 정수 

%ld

long 

부호 있는 10진수 정수 

%lld

long long 

부호 있는 10진수 정수 

%u

unsigned int 

부호 없는 10진수 정수 

%o

unsigned int 

부호 없는 8진수 정수 

%x, %X

unsigned int 

부호 없는 16진수 정수 

%f

float, double

10진수 방식의 부동소수점 실수 

%Lf

long double

10진수 방식의 부동소수점 실수 

%e, %E

float, double

e 또는 E 방식의 부동소수점 실수 

%g, %G

float, double

값에 따라 %f와 %e 사이에서 선택 

%c

char, short, int

값에 대응하는 문자 

%s

char * 

문자열 

%p

void *  

포인터의 주소 값 



  • 정수의 서식문자들 : %d, %u, %o, %x
위의 표를 보면 %o와 %x는 각각 8진수 16진수의 정수만 출력이 가능하다 그러므로 음의 정수를 출력하기 원하면 꼭 %d를 사용하면 된다.



  • 실수의 서식문자들 : %f, %e, %g
실수를 출력하고 싶다면 %f를 사용하면되며 %e같은 경우는 e표기법 이라고 하여 만약 0.1234 라는 숫자를 출력한다면 1.234000e-001 라는 숫자로 출력이 되는데 이는 지수형태의 출력을 표현한 것이다.

%g 는 %f가 허용한 자리수까지는 %f 출력처럼 그대로 나오지만 자리수 초과시 %e의 표기법으로 출력이 됩니다.

Posted by JakeGD
|

escape sequence(이스케이프 시퀀스) 종류



  • escape sequence(이스케이프 시퀀스) 란?
    • printf() 함수이용시 문자열에 \n 같은 문자가 삽입된 것을 볼 수 있다 이러한 특수문자의 공식 명칭이 이스케이프 시퀀스 이다.


  • 종류
이스케이프 시퀀스표현
\a벨(경고)
\b백스페이스
\f폼 피드
\n줄 바꿈
\r캐리지 리턴
\t가로 탭
\v세로 탭
\'작은따옴표
\"큰따옴표
\\백슬래시
\?리터럴 물음표


Posted by JakeGD
|

알고리즘 이란?


    • 알고리즘
      • 사전적인 의미는 어떠한 문제를 해결하기 위한 여러 동작들의 모임.
      • 유한성을 가지며, 언젠가는 끝나야 하는 속성.
      • "문제를 해결하는 방법!"

    • 알고리즘 조건
      • 입력 : 외부에서 제공되는 자료가 0개 이상 존재
      • 출력 : 적어도 2개 이상의 서로 다른 결과 도출 (즉, 모든 입력에 하나의 출력이 나오면 X)
      • 명확성 : 수행 과정은 명확하고 모호하지 않은 명령어로 구성
      • 유한성(종결성) : 유한 번의 명령어를 수행 후(유한 시간 내)에 종료
      • 효율성 : 모든 과정은 명확하게 실행 가능(검증 가능)한 것

길찾기의 대표적인 알고리즘인  A*(에이스타), Dijkstra(다익스트라) 또한 캐릭터의 이동, 회전, 점프 등
주어진 문제에 대한 해결을 할 수 있는것이 알고리즘이다.


Posted by JakeGD
|
  • 자료구조(Data structure) 란?
    • 사전적인 의미는 자료(Data)의 집합이며, 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것입니다.


  • 자료구조(Data structure)의 종류?
    • 자료구조는 크게 선형, 비선형 자료구조로 나뉘어져 있으며 선형 자료구조의 경우 데이터가 일렬로나열 되어 있는 것을 뜻하며 비선형 자료구조는 특정한 형태를 띄고 있습니다.

      • 선형구조
        • 배열 (Array)
        • 연결 리스트 (Linked List)
        • 스택 (Stack)
        • 큐 (Queue)

      • 비선형 구조
        • 트리 (Tree)
        • 그래프 (gragh)


Posted by JakeGD
|

Clamp(클램프) 사용법



  • Clamp(클램프) 란?
    • 최소 / 최대값 을 설정하여 float 값이 범위 이외의 값을 넘지 않도록 합니다.    

사용예시) rotation 범위 설정하기

float y = Input.GetAxis("ExtraHorizontal"); float x = Input.GetAxis("ExtraVertical"); y = y * speedRotate * Time.deltaTime; x = -x * speedRotate * Time.deltaTime; angle.x = Mathf.Clamp(angle.x + x, -80.0f, 0.0f); angle.y += y; transform.rotation = Quaternion.Euler(angle + transform.parent.eulerAngles);

사용예시) 로그 출력

 Debug.Log(Mathf.Clamp(10, 1, 3));



사용예시) position 범위 설정하기

transform.position = new Vector3(Mathf.Clamp(Time.time, 1.0F, 3.0F), 0, 0);


Posted by JakeGD
|

prefab(프리팹) 만들기



  • prefab(프리팹)의 용도
    • 프리팹은 같은 몬스터개체를 여러개 만들어 둬어야 하는경우.
    • FPS의 경우는 총알 사용시 프리팹을 이용해 복제하여 생성할 경우
    • 폭탄 같은걸로 벽돌 파괴시 벽돌이 따로따로 흩날리는 효과를 주기위한 경우
    • 즉, 무수히 같은 물체,개체를 인스턴스화 시킬 수 있게 하는것이 prefab(프리팹) 입니다.



  • prefab(프리팹)의 만들기

sphere을 이용하여 만들어보겠습니다.

Hierarchy화면에서 마우스 오른쪽 클릭 -> 3D Object -> Sphere 클릭

Project화면에서 Prefabs 폴더를 하나 만들어 주고 해당 Sphere를 그대로 드래그해 폴더에 옮겨 줍니다.


그럼 Hierarchy 화면에 있던 Sphere이 파란색 글자로 변경이 되면서 등록이 됩니다.


이게 prefab(프리팹) 만들기의 끝입니다.!


만들었으니 이제 사용해



  • prefab(프리팹)의 초 간단한 사용법

사용하기 위한 스크립트 Instantiate Test 이름으로 하나 만들어 주세요(다른 이름도 괜찮습니다.)


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class InstantiateTest : MonoBehaviour {



    public GameObject bulletObj = null; // 담겨질 오브젝트 생성


void Start () {

}


void Update () {


        if(Input.GetKeyDown(KeyCode.Space)) // 스페이스바 클릭 조건

        {

    Instantiate(bulletObj, transform.position, transform.rotation);

            // Instantiate 메소드를 통한 초간단 인스턴스 생성!

        }


    }

}



위와 같이 작성 후

생성 위치가 될  Create Empty 하나 생성하고 해당 오브젝트에다가 스크립트를 적용 합니다.
그리고 오브젝트를 클릭해 보면 아래의 그림과 같이 Bullet Obj 라는 공간이 있는데 해당공간에 만들어둔 prefab을 드래그 합니다.
그럼 아래 화면과 같이 됩니다.



그리고 유니티 실행 후 스페이스바를 열심히 누르시면 열심히 누르신 만큼 Sphere가 생성이 됩니다!!

적용화면





Posted by JakeGD
|

거울반사(Mirror reflection) 효과 적용


카메라를 이용한 거울 반사 효과를 설명하도록 하겠습니다.


유니티 Hierarchy에서 카메라하나를 생성합니다.



거울 반사를 적용시킬 스크립트 하나 생성후 아래와 같은 코드를 작성합니다.


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class RoomMirror : MonoBehaviour {


    private Camera CameraMirro;


    void Awake()

    {

        // 카메라컨포넌트를 조작하기위해 GetComponent를 이용하여 불러옵니다.

        CameraMirro = GetComponent<Camera>();

    }

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

}


    public void OnPreCull()

    {

        CameraMirro.ResetProjectionMatrix();

        CameraMirro.projectionMatrix = CameraMirro.projectionMatrix * Matrix4x4.Scale(new Vector3(-1, 1, 1));

    }


    public void OnPreRender()

    {

        GL.invertCulling = true;

    }


    public void OnPostRender()

    {

        GL.invertCulling = false;

    }

}


그다음 유니티에서 해당 스크립트를 적용해주면 끝!


미적용


적용완료


Posted by JakeGD
|

게임오브젝트(GameObject)와 컴포넌트(Component) 관계 및 사용법




  • 관계
    • GameObject는 컨테이너 이며 사람, 차량 또는 물건등을 구성하는 다양한 조각들을 저장할수 있는 빈 상자이며 객체를 구성하는 다양한 조각들은 Components(컴포넌트)라고 합니다.
    • 사용할 오브젝트 종류에 따라 다양한 조각을 조합한 컴포넌트를 GameObject에 추가합니다.
    • 즉 GameObject는 커다란 큰 냄비이며 Components(컴포넌트)는 요리법을 구성하는 각종 재료라고 생각하면 됩니다.


  • 게임오브젝트(GameObject)
    • 다양한 컴포넌트들이 모인 것을 GameObject라고 함
    • GameObject에는 기본적으로 Transform 컴포넌트가 존재하며 GameObject가 어느 위치에 존재하는지 얼만큼 회전을 하고 있는지, 크기의 사이즈는 얼만큼인지 결정이 됩니다.
    •  GameObject 생성방법 
메뉴 항목 -> GameObject->Create Empty

생성 화면
빈 게임 오브젝트에서도 트랜스폼 컴포넌트를 가지고 있습니다




  • 컴포넌트(Component)
    • 모든 GameObject란 집합체의 기능적인 조각들
    • 컴포넌트(Component) 추가 방법
컴포넌트는 Inspector 항목에서 Add Component를 클릭 원하는 컴포넌트 찾아 클릭하거나 검색 칸에서 검색하여 추가.

 컴포넌트 브라우저 


Posted by JakeGD
|

Awake() 정의와 DontDestroyOnLoad() 사용법


Awake() 정의

  • Awake는 게임이 시작되기 전에, 모든 변수와 게임의 상태를 초기화하기 위해서 호출되며 스크립트 인스턴스가 종료될 때까지 한번만 호출됩니다. 

  • Awake는 모든 오브젝트가 초기화되고 호출되기 때문에, GameObject.FindWithTag를 이용해서 해당 게임 오브젝트를 요청하거나, 다른 오브젝트와 안전하게 연동해서 사용할 수 있습니다.


DontDestroyOnLoad() 사용법

  • 새로운 Scene이 로드될때 자동으로 파괴되지 않는 target 오브젝트를 만듭니다.
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { void Awake() { DontDestroyOnLoad(transform.gameObject); } }

이런식으로 지정된 이전 오브젝트가 그대로 살아서 다음 씬으로 넘어갑니다.

대신 지워지지않아 직접 지워줘야 합니다.


그런 경우 간단히 조건 제시후 Destroy 메소드를 이용해 삭제 합니다.


예) M키를 누를시 조건

 if (Input.GetKeyDown(KeyCode.M))

        {

            Destroy(gameObject);

        }



Posted by JakeGD
|