'2014/01/13'에 해당되는 글 36건

  1. 2014.01.13 [펌]C# 델리게이트 및 이벤트 함수 (1)
  2. 2014.01.13 [펌][블로그] 글자 클릭시 해당 지점으로 이동하는 방법
  3. 2014.01.13 [런게임] 유니티 3D로 러너 게임 만들기 - 게임 이벤트들
  4. 2014.01.13 [런게임] 유니티 3D로 러너 게임 만들기 - 길의 종류
  5. 2014.01.13 [런게임] 유니티 3D로 러너 게임 만들기 - 점프와 점프 실패
  6. 2014.01.13 [런게임] 유니티 3D로 러너 게임 만들기 - 플랫폼(길) 생성하기

[펌]C# 델리게이트 및 이벤트 함수

|


1. 델리게이트(Delegate)


오늘은 델리게이트(Delegate)에 대해서 알아보려고 합니다. 델리게이트는 한마디로 말해서 대리자라고 말할 수 있습니다. 즉, 대신 일을 해주는 녀석이라고 할 수 있겠죠? 다른 말로 해서는 메소드 참조를 포함하고 있는 영역이라고 말할 수 있습니다. 아래는 델리게이트의 선언 형식입니다.

1
delegate 반환형 델리게이트명(매개변수..);

위의 선언 형식을 보아하니, 델리게이트가 메소드같이 생겼죠? 델리게이트는 위에서 말한 대로, 메소드의 참조를 포함합니다. '메소드를 참조한다니, 그럼 메소드를 매개변수로 넘길 수 있다는 말인가요?'라고 생각하시는 분들이 있을지 모르겠는데, 네 맞습니다. 델리게이트를 이용해서 메소드를 넘겨줄 수 있습니다. 델리게이트는 메소드를 참조 하는 것이고, 참조하는 메소드가 달라진다면 델리게이트 역시 달라집니다. (한가지 주의하실 것이 있다면, 매개변수의 데이터 형식과 반환형은 참조할 메소드의 매개변수의 데이터 형식과 반환형에 맞추어야만 합니다. 개수 역시도.)


무엇보다 이 델리게이트란 녀석이 어떤 일을 하는지는, 직접 해보는게 더 빠를지도 모릅니다. 아래는 델리게이트의 사용 예제입니다.

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication39
{
    delegate int PDelegate(int a, int b);
 
    class Program
    {
        static int Plus(int a, int b)
        {
            return a + b;
        }
 
        static void Main(string[] args)
        {
            PDelegate pd1 = Plus;
            PDelegate pd2 = delegate(int a, int b)
            {
                return a / b;
            };
 
            Console.WriteLine(pd1(5, 10));
            Console.WriteLine(pd2(10, 5));
        }
    }
}

결과:

15

2

계속하려면 아무 키나 누르십시오 . . .


코드를 보시면 9행에 PDelegate라는 델리게이트가 보이죠? 매개변수 부분에는 int형 매개변수 a, b를 명시해주었습니다. 13~16행에서는 Plus란 메소드가 정의되었습니다. 이제부터 자세히 보셔야 합니다. 20행을 먼저 봅시다. Plus 메소드 자체를 델리게이트에 집어넣고 있는것 같죠? Plus 메소드와 연결하여 대리자를 인스턴스화 합니다. 이제부터 델리게이트 pd1은 Plus 메소드를 참조하게 됩니다. 26행을 보시면 Plus 메소드를 쓰듯, a와 b를 더해서 값을 반환합니다. 21행을 보시면 아무 이름이 없는 메소드를 델리게이트에 집어넣습니다. 별도로 메소드를 만들지 않았죠? 이런 무명 메소드의 사용은 한번 사용하면 불필요해지는 메소드를 만들때도 사용되는 등, 매우 유용합니다. 27행도 26행과 마찬가지로 pd1처럼 사용할 수 있습니다.


2. 델리게이트 체인(Delegate chain)


델리게이트 체인이라고 하니, 무언가가 체인처럼 이어져 있을거라고 생각이 들지 않나요? 네, 맞습니다. 델리게이트 하나를 가지고 여러개의 메소드를 한번에 호출할 수 있습니다. 한번 볼까요?

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
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication39
{
    delegate void PDelegate(int a, int b);
 
    class Program
    {
        static void Plus(int a, int b)
        {
            Console.WriteLine("{0} + {1} = {2}", a, b, a + b);
        }
 
        static void Minus(int a, int b)
        {
            Console.WriteLine("{0} - {1} = {2}", a, b, a - b);
        }
 
        static void Division(int a, int b)
        {
            Console.WriteLine("{0} / {1} = {2}", a, b, a / b);
        }
 
        static void Multiplication(int a, int b)
        {
            Console.WriteLine("{0} * {1} = {2}", a, b, a * b);
        }
 
        static void Main(string[] args)
        {
            PDelegate pd = (PDelegate)Delegate.Combine(new PDelegate(Plus),
                new PDelegate(Minus), new PDelegate(Division), new PDelegate(Multiplication));
 
            pd(20, 10);
        }
    }
}

결과:

20 + 10 = 30

20 - 10 = 10

20 / 10 = 2

20 * 10 = 200

계속하려면 아무 키나 누르십시오 . . .


코드를 보시면 13~31행에 사칙연산(더하기, 빼기, 나누기, 곱셈) 메소드가 정의된 것을 보실 수 있습니다. 이제, 델리게이트를 이용하여 이 모두를 묶어주어 한꺼번에 호출할 수 있습니다. 35~36행을 보세요. Delegate.Combine 메소드가 쓰였습니다. 이 메소드는 두개 이상의 대리자의 호출 목록을 연결해주는 역할을 합니다. Plus와 Minus, Division, Multiplication 메소드는 이제 델리게이트 pd만 호출하여도 간편하게 모두를 호출할 수 있습니다.


3. 이벤트(Event)


이벤트는 실제론 '잔치', '행사'와 같은 의미로 쓰이나 프로그래밍 세계에 와서는 의미가 '특정 사건이 벌어지면 알리는 메시지'라고 할 수 있습니다. 이벤트를 예로 들자면, 사용자가 컨트롤(버튼, 이미지, 레이블, 텍스트박스 등..)을 클릭하거나 창을 닫거나 열때 사용자에게 개체를 알리는 것을 이벤트 발생이라고 합니다. C#에서는 우리가 방금 배운 델리게이트를 사용하여 이벤트를 처리할 수 있습니다. 이벤트의 기본적인 선언 형식은 다음과 같습니다.

1
한정자 event 델리게이트 이름;

위와 같이 event 키워드를 사용하여 이벤트를 선언할 수 있습니다. 한번 직접 보도록 해볼까요?

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
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication42
{
    public delegate void MyEventHandler(string message);
 
    class Publisher
    {
        public event MyEventHandler Active;
 
        public void DoActive(int number)
        {
            if (number % 10 == 0)
                Active("Active!" + number);
            else
                Console.WriteLine(number);
        }
    }
 
    class Subscriber
    {
        static public void MyHandler(string message)
        {
            Console.WriteLine(message);
        }
 
        static void Main(string[] args)
        {
            Publisher publisher = new Publisher();
            publisher.Active += new MyEventHandler(MyHandler);
 
            for (int i = 1; i < 50; i++)
                publisher.DoActive(i);
        }
    }
}

결과:

1

..

Active!10

..

Active!40

..

49

계속하려면 아무 키나 누르십시오 . . .


자 이제, 코드를 볼까요? 9행을 보시면 MyEventHandler라는 델리게이트가 선언되었습니다. 11행을 보시면 Publisher라는 클래스가 선언되었고, 이 클래스 내에는 event 한정자로 수식한 델리게이트의 인스턴스를 선언합니다. 그리고 DoActive라는 메소드도 정의되었습니다. number라는 매개변수를 가지고, number를 10으로 나눴을때 나머지가 0이면, 이벤트가 발생하게끔 했습니다. 그게 아니라면 그냥 숫자만을 출력하도록 했습니다. 이제 Subscriber 클래스로 내려와서 바로 보이는게 이벤트 핸들러 부분인데, 위에서 선언한 델리게이트와 일치합니다. 그리고 더 아래로 내려가면 클래스의 인스턴스를 만들고 Active 이벤트에 MyHandler 메소드를 이벤트 핸들러로 등록하라는 말과 같습니다. 이제 아래서 특정 조건을 만족하면 이벤트가 발생하며 Active가 출력됩니다. 이벤트가 조금 생소하죠?

궁금하신 부분은 언제나 물어보시고, 보충해야 할 부분이 있다면 추가 설명을 달도록 하겠습니다.



출처 : http://blog.eairship.kr/151



Trackback 0 And Comment 1
  1. Favicon of https://imagej.tistory.com BlogIcon MAKUBEX 2017.02.07 11:01 신고 address edit & del reply

    정리가 너무 잘 되어 있네요

    Unity와 C# 을 시작한지 얼마 되지 않아 클레스간 의존성을 낮추기 위하여 델리게이트를 공부하고 있습니다.

    C++과는 먼가 다른게 복잡하면서도 그러네요 ㅋ

    너무 정리가 잘되어 있어서 글을 남깁니다.

[펌][블로그] 글자 클릭시 해당 지점으로 이동하는 방법

|
출처 : http://dsk114.com.ne.kr/html/link03.html

◈ 같은 문서 안에서 특정 위치로 링크하기 ◈

이것 역시 <a> 태그에서 name속성을 지정하여 사용합니다. 같은 문서의 내용중 특정한 위치로 연결시킬때 이 방법을 사용하는데. 한페이지에 많은 양의 정보를 나타내고자 할때 아주 유용합니다. 이러한 문서내의 링크는 링크를 삽입할 때와 비슷하지만 href속성에 # 기호와 특정위치이름을 삽입하면 됩니다. 사용방법은 다음과 같습니다. 이방법도 이동 되어질 특정 문서의 맨 아래에 <br>태그를 여러번 넣어 공간을 많이 주어야 아래부분의 위치를 특정위치로 클릭했을 때 문서의 위치가 제대로 나타납니다. 맨 아래에만 삽입하면 됩니다.

<a href="#특정위치지정">개요</a>

<a name="이동될 위치이름">개요(특정위치제목)</a>



◈ 특정위치 지정 문서링크 사용예 ◈


<html>
<head>
<title>html 문서의 연결</title>
</head>
<body>
<center>
<a href="#BMP파일을 아이콘으로">BMP파일을 아이콘으로</a><br>

<a href="#아이콘 옮기기">아이콘 옮기기</a><br>

<a href="#조각모음을 빠르게">조각모음을 빠르게</a><br>

<a href="#디스크 검사 하기">디스크 검사 하기</a><br>

</body>
</html>



◈ 이동될 위치이름 사용예 ◈


<html>
<head>
<title>동일 폴더 안에 다른 문서의 특정위치에 링크하기</title>
</head>
<body>
<center>
<a name="BMP파일을 아이콘으로">BMP파일을 아이콘으로</a><br>

<a name="아이콘 옮기기">아이콘 옮기기</a><br>

<a name="조각모음을 빠르게">조각모음을 빠르게</a><br>

<a name="디스크 검사 하기">디스크 검사 하기</a> <br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br> 

</body>
</html>



<br>태그를 많이 사용한 이유는 맨아래 공백이 넉넉히 있어야 
링크를 클릭 했을때 특정위치가 제대로 나타나기 때문입니다.


◈ 실행결과 ◈


Trackback 0 And Comment 0

[런게임] 유니티 3D로 러너 게임 만들기 - 게임 이벤트들

|

게임 관련 이벤트들

현재 게임은 플레이 버튼을 누르면 즉시 실행되며, 플레이어가 길 아래로 추락해도 게임이 끝나지도 않습니다. 우리가 원하는 것은 게임 타이틀 화면으로 시작하고 점프 버튼 중 하나를 누르면 새로운 게임을 시작 한다는 말과 함께 플레이어가 죽으면 게임이 끝나는 것입니다

위와 같은 방법을 구현하기 위해서는 세가지 이벤트들을 구현해야 됩니다. 첫번째는 게임 실행시 Start 메서드에서 구현합니다. 나머지 두가지는 게임 시작과 게임오버인데 이것은 사용자 정의 방식을 필요로합니다. 우리는 이것들을 관리하기 위해서 간단한 이벤트 매니저를 생성할것입니다.

Managers 폴더를 만듭니다.그리고 GameEventManager라는 C# 스크립트를 생성합니다. 우리는 GameEventManager 를 스테틱 클래스로 만들것이고 이안에 GameEvent 딜리게이트를 집어넣을것입니다. manager 클래스는 MonoBehaviour 를 상속받지 않으며 오브젝트에도 붙지 않습니다.

 C# 딜리게이트와 이벤트란?
Game event manager.
public static class GameEventManager {

	public delegate void GameEvent();
}
우리는 새로운 gameEvent 타입을 사용합니다. manager 에 두가지 타입을 더합시다. GameStart 와 GameEnd. 이제 다른 스크립트에서 이벤트를 구독하여 이벤트를 호출 할수있습니다.
public static class GameEventManager {

	public delegate void GameEvent();

	public static event GameEvent GameStart, GameOver;
}
마지막으로, 우리는 이벤트를 변환 할 수있는 방법을 추가해야합니다. 우리는 두 가지 메서드를 추가합니다. 이벤트를 호출하는 경우 구독을 하지 않으면 null이됩니다. 그럴 경우 오류가 나므로 주의하시기 바랍니다.
public static class GameEventManager {

	public delegate void GameEvent();

	public static event GameEvent GameStart, GameOver;

	public static void TriggerGameStart(){
		if(GameStart != null){
			GameStart();
		}
	}

	public static void TriggerGameOver(){
		if(GameOver != null){
			GameOver();
		}
	}
}


Trackback 0 And Comment 0

[런게임] 유니티 3D로 러너 게임 만들기 - 길의 종류

|

길의 종류

게임을 좀더 재미있게 하기 위해서 두가지 길을 더 추가 하겠습니다. 한가지 길은 Runner이 길 위에 있을시 속도가 느려지는 것이고 나머지 하나는 속도가 빨라지는 것 입니다. 우리는 두가지 physic materials을 만들고 두가지 색상을 만듭니다 그리고 길에 랜덤하게 이것을 사용합니다. 

Platform Regular PMat 2번 복사합니다. 이름을 Platform Slowdown PMat, 그리고 Platform Speedup PMat이라고 설정합니다. 또한 비슷한 방식으로 Platform Regular Mat를 두번 복제하고 이름을 지읍시다. friction값을 0.15 그리고 0으로 설정하고, 색상은  (255, 255, 0) 그리고 (60, 130, 255)으로 설정합니다.

slowdown physic material speedup physic material 
slowdown material speedup material 
hierarchy
Slowdown and speedup platforms.
우리는 이제  PlatformManager 를 수정할것입니다. 우리는 두가지 배열을 더해서 랜덤하게 위에서 설정한 깂들을 사용할 것입니다.
	public Material[] materials;
	public PhysicMaterial[] physicMaterials;

	private void Recycle () {
		Vector3 scale = new Vector3(
			Random.Range(minSize.x, maxSize.x),
			Random.Range(minSize.y, maxSize.y),
			Random.Range(minSize.z, maxSize.z));

		Vector3 position = nextPosition;
		position.x += scale.x * 0.5f;
		position.y += scale.y * 0.5f;

		Transform o = objectQueue.Dequeue();
		o.localScale = scale;
		o.localPosition = position;
		int materialIndex = Random.Range(0, materials.Length);
		o.renderer.material = materials[materialIndex];
		o.collider.material = physicMaterials[materialIndex];
		objectQueue.Enqueue(o);

		nextPosition += new Vector3(
			Random.Range(minGap.x, maxGap.x) + scale.x,
			Random.Range(minGap.y, maxGap.y),
			Random.Range(minGap.z, maxGap.z));

		if(nextPosition.y < minY){
			nextPosition.y = minY + maxGap.y;
		}
		else if(nextPosition.y > maxY){
			nextPosition.y = maxY - maxGap.y;
		}
	}
}
위에서 설정한 값을들 Platform Manager 에 할당합시다. 우리는 어떤한 길 유형을 더하려고 할 경우, 단순히 여러 번 이렇게 드래그해서 더하면 됩니다. 아래와 같이 설정하면 일반 속성같은 경우 50퍼 센트 확률로 발생되고 나머지 속성같은경우 25퍼선테 확률로 발생됩니다.
settingsgame
Platform variety.


Trackback 0 And Comment 0

[런게임] 유니티 3D로 러너 게임 만들기 - 점프와 점프 실패

|

점프와 점프 실패

우리는 길을 가지고 있다, 우리는 이 게임을 좀더 업그레이드 할수있다. 우리는 유니티의 물리 엔진을 사용하여 점프를 구현할 것이다. 점프와 떨어지는 것을 구현할려면 콜라이더가 필요하다.  Rigidbody 컴포넌트를 Runner 에 추가하자(Component / Physics / Rigidbody). 우리는 특정방향으로 회전하거나 이동하는것을 원하지 않으므로, constrain 값을 freezing Z position 과모든 rotation axes에 체크하자.

길위를 움직일때 어떠한 physic material 이 일어납니다.  physic material 을 생성하고 모든 필드를 0으로 설정하고 combine options은 둘다 max로 설정합니다.

Runner PMat를 Runner folder 폴더에 넣고, Runner의 박스 콜라이더에 집어넣는다.

Runner 의 위치를 (0, 2, 0)로 설정하고 길 위로 떨어트린다. 그리고 플레이 버튼을 눌러서 어떤일이 일어나는지 봐라!

runner materialgame
Runner with physics.

Runner는 오른쪽으로 이동하다 보면 구멍에 떨어지게 됩니다. 길을 빠르게 지나가도 다시 떨어지게 되있습니다. 하지만 길의 옆면에 충돌이 발생할 경우 이상한 일이 일어납니다. 

Update

함수에서 위치를 변경하기 때문입니다. 우리는 물리엔진을 그대로 두고 forces를 적용해야 됩니다.

Update 에서  Translate 을 부르는걸 제거합니다((Runner 스크립트). 대신에 우리는 유니티 collision  이벤트 메서드를 부릅니다(OnCollisionEnter ,OnCollisionExit ) – 길위에 부딪히거나 떨어질때 호출됩니다. 길위에 터치되면 우리는 가속도가 적용되어 속도가 빨라집니다.

acceleration를 5로 설정합시다.

using UnityEngine;

public class Runner : MonoBehaviour {

	public static float distanceTraveled;

	public float acceleration;

	private bool touchingPlatform;

	void Update () {
		distanceTraveled = transform.localPosition.x;
	}

	void FixedUpdate () {
		if(touchingPlatform){
			rigidbody.AddForce(acceleration, 0f, 0f, ForceMode.Acceleration);
		}
	}

	void OnCollisionEnter () {
		touchingPlatform = true;
	}

	void OnCollisionExit () {
		touchingPlatform = false;
	}
}

이 작업을 하기 전에 한가지 더 할 일이 있습니다. Runner PMat을 복사하고, Platform Regular PMat이라고 지정해서  Platform 폴더에 집어넣습니다. friction 값은 0.05로 설정하고 physic material을 Platform prefab에 드래그합니다.

우리의 길은 약간의 마찰력을  제공하지만 Runner은 움직일수 있는 충분한 가속도가 있습니다.

acceleration platformphysic material
Acceleration and regular platform.
Runner의 점프를 만들어 봅시다.  우리는 플레이어에 input을 붙여야 됩니다. Unity는 기본적으로 점프 액션이 세팅 되어있습니다. Edit / Project Settings / Input 에서 찾을수 있으며, 스페이스바를 누르면 작동 됩니다. 우리는 이것을 사용할 것이며, Alt Positive Button 필드에 x를 집어넣습니다.
Jump input configuration.
Runner

 에 점프 관련 변수를 더합니다. 우리는 수평과 수직을 조작할수 있도록 float대신 Vector3 클래스를 사용할 예정입니다. 필드의 값을 (1, 7, 0)로 설정합니다.

  Update 함수에 아래 내용을 추가하면 Runner이 점프버튼을 누를시 점프하게 될 것입니다.

	public Vector3 jumpVelocity;

	void Update () {
		if(touchingPlatform && Input.GetButtonDown("Jump")){
			rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange);
		}
		distanceTraveled = transform.localPosition.x;
	}
settings game
Runner jumping.
우리는 점프를 할수있습니다! 하지만, 만약 길의 양 옆에 위치하게 되면(길과 계속 터치하고 있으면) 여러번 점프가 가능합니다. 이것을 막으려면 아래 코드를 추가합니다.
	void Update () {
		if(touchingPlatform && Input.GetButtonDown("Jump")){
			rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange);
			touchingPlatform = false;

} distanceTraveled = transform.localPosition.x; }


Trackback 0 And Comment 0

[런게임] 유니티 3D로 러너 게임 만들기 - 플랫폼(길) 생성하기

|

길 생성하기

길을 생성하는 방법은 스카이라인을 생성하는 방법에서 약간만 다르다. 길은 길과 길 사이의 거리와 높이가 랜덤하게 배치된다. 또한 우리는 스카이라인이 보이게 길의 위치나 고도를 제한할 필욛 있다. 만약 길이 화면 밖에 있으면 우리는 그것을 다시 사용 해야 된다.

Platform이라는 폴더를 생성한다PlatformManager라는 C# script를 생성한다 . 그리고 SkylineManager 코드를 복사한다. 그리고 아래처럼 몇개의 코드만 고친다.

using UnityEngine;
using System.Collections.Generic;

public class PlatformManager : MonoBehaviour {

	public Transform prefab;
	public int numberOfObjects;
	public float recycleOffset;
	public Vector3 startPosition;
	public Vector3 minSize, maxSize, minGap, maxGap;
	public float minY, maxY;

	private Vector3 nextPosition;
	private Queue<Transform> objectQueue;

	void Start () {
		objectQueue = new Queue<Transform>(numberOfObjects);
		for(int i = 0; i < numberOfObjects; i++){
			objectQueue.Enqueue((Transform)Instantiate(prefab));
		}
		nextPosition = startPosition;
		for(int i = 0; i < numberOfObjects; i++){
			Recycle();
		}
	}

	void Update () {
		if(objectQueue.Peek().localPosition.x + recycleOffset < Runner.distanceTraveled){
			Recycle();
		}
	}

	private void Recycle () {
		Vector3 scale = new Vector3(
			Random.Range(minSize.x, maxSize.x),
			Random.Range(minSize.y, maxSize.y),
			Random.Range(minSize.z, maxSize.z));

		Vector3 position = nextPosition;
		position.x += scale.x * 0.5f;
		position.y += scale.y * 0.5f;

		Transform o = objectQueue.Dequeue();
		o.localScale = scale;
		o.localPosition = position;
		objectQueue.Enqueue(o);

		nextPosition += new Vector3(
			Random.Range(minGap.x, maxGap.x) + scale.x,
			Random.Range(minGap.y, maxGap.y),
			Random.Range(minGap.z, maxGap.z));

		if(nextPosition.y < minY){
			nextPosition.y = minY + maxGap.y;
		}
		else if(nextPosition.y > maxY){
			nextPosition.y = maxY - maxGap.y;
		}
	}
}
이제 platforms 프리팹을 만들고, material 도 만들어보자.  skyline materials을 복사해서 칼라값만 (255, 60, 255)로 변경할수있다. Platform Regular Mat으로 변경하자. 새로운 cube를 만들고, materials을 붙이고 프리팹으로 만든다. 이름은 Platform으로 지정한다. 프리팹과 메트리얼은 Platform 폴더에 집어넣는다.
Platform prefab.
Platform Manager 이라는 빈 게임오브젝트를 만들고 Managers의 자식으로 놓아둔다.  Platform Manager 컴포넌트에 스크립트를 붙인다. 프리팹에 Platform prefab을 연결하고 Number Of Objects은 6으로 설정한다.  Recycle Offset 은 20으로 설정하고, Start Position 은 (0, 0, 0), Min Size 은 (5, 1, 1), Max Size 는 (10, 1, 1)으로 설정한다. 그리고 새로운 필드인 Min GapMax Gap,Min Y, 그리고 Max Y  는 각 각 (2, -1.5, 0), (4, 1.5, 0), -5, 그리고 10 으로 설정한다. 다시 말하지만 원한다면 니가 원하는 숫자로 설정할수있다.
platform manager managers
Platform manager.


Trackback 0 And Comment 0
prev | 1 | 2 | 3 | 4 | next