본문 바로가기
VR XR Development/Unity

UNITY. CLASS #02_ 0416

by 딧피 2021. 6. 15.
728x90
반응형

Unity 기초수업 2일차. 

 

정리차원에서 전체 코드가 아닌 꼭 필요한 부분만 기입하였음. ( 아래내용만 그대로 쓰면 구현이 안된다. 핵심만 적은것 )

 

- script -

Transform

 

// Transform 타입의 객체의 주소값을 저장하는 참조변수

Public Transform transRef;

 

//현재 게임오브젝트가 렌더링 되기 바로전에 매번 호출되는 이벤트 메소드

void Update

 

//회전공식

//Transform.Rotate(방향축 벡터 (vector3) * 속도(float)*Time.deltaTime)

(*찐문과를 위한.. 벡터란?? 거리+방향/ 크기+방향 , 2차원 또는 3차원으로도 존재.)

- 언리얼 배울떄 회전공식이 매우 중요함을 배웠고, sw역량 테스트 준비할때도 이부분이 중요하다고 배웠다. 그리고 인공지능.. 머신러닝 배울때도 관련이 있는듯하니 제대로 알고가면 좋을것같아서 링크를 첨부하였다. (링크는 아래에! - )

 

https://youtu.be/ArgTeYVuJUo

//속도 변수 생성

public float speed;

 

- unity - 

 

Unity 안에서 Text 생성을 한다는것은 Text 클래스를 사용한다는것.

class in UnityEngine.UI 

 

이안의 text를 수정한다하면

Text.text 를 수정한다는것.

public string text

 

 

 

 

계산기 만들기

1. script 폴더에 CalcComponent 추가

2. empty object 로 CalcGameobject 추가

3. 코드파일 Calcomonent (script) 를 유니티 상에서 script 연결해주기

4. 코드 작성

5. OnCalButton 메소드의 인자에 int 를 추가해서

switch 문에 int 인자에 따른 + , - , / , % 에 대한 0,1,2,3 등의 값을 준뒤

유니티로 돌아가서 각 버튼 UI요소의 onclick 이벤트 속성에 해당 0 ,1, 2, 3 의 값을 설정해준다.

 

//버튼을 누를때 실행될 코드를 가진 커스텀 이벤트 메소드 정의

public void OnSumButtonClick(int type)

{

 

switch(type)

{

 case 0:

          result = val1+val2;

          break;

 case 1:

          result = val1-val2;

          break;

 case 2:

          result = val1/val2;

          break;

 case 3:

          result = val1%val2;

          break;

}

 

}

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

 

//item 갯수를 카운트 하려면?

int itemPickCount = 0; // 카운터의 총합을 구할 변수 선언

 

Debug.Log("유저의 현재 보유 아이템 갯수:"+ itemPickCount);

Debug.Log("유저가 아이템을 획득함);

itemPickCount +=1 ; // 반대 계산 하려면 itemPickCount -=1;

 

Debug.Log("유저의 현재 보유 아이템 갯수:"+ itemPickCount);

Debug.Log("유저가 아이템을 획득함);

itemPickCount++ ; // itemPickCount = itemPickCount+1;

 

Debug.Log("유저의 현재 보유 아이템 갯수:"+ itemPickCount);

Debug.Log("나쁜 유저가 저를 pvp하고 아이템을 하나 뻇어갔어요.");

itemPickCount--;

 

Debug.Log("유저의 현재 보유아이템 갯수: "+itemPickCount);

 

 

 

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

[ 캐릭터 움직임 만들기 ]

1. movement 이름 으로 scirpt 파일생성

2. 코드작성

3. unity 상의 scirpt 속성 trans요소 에 플레이어 연결

4. speed 설정 (1이상)

 

public float speed;

 

void Start()

{

 

void Update()

{
// 좌우 방향키 값 전달받기 ( 좌 : -1  , 우 : 1  )

float h = Input.GetAxisRaw("Horizontal");

float v = Input.GetAxisRaw("Vertical");

}

 

//Debug.Log("좌우 이동값 : "+h+", 상하 이동값 : "+v);

 

//방향 벡터 생성

//오른쪽 -> 1, 0, 0

//왼쪽 -> -1, 0, 0

//위쪽 -> 0, 1, 0

 

//방향 객체 생성(구조체)

Vector3.direction;

direction.x = h;

direction.y = v;

direction.z = 0;

 

//이동공식

//Transform.Translate(방향*속도*Time.deltaTime)

//trans.Translate(direction * speed * Time.deltaTime);

 

 

[ 캐릭터가 아이템과 충돌했을때 이벤트 생성 ]

 

//Collision 매개변수 : 현재 충돌된 게임오브젝트의 Collision 컴포넌트 참조

private void OnCollisionEnter2D(Collision2D collision)

{

 

Debug.Log("캐릭터가 무언가랑 충돌함")

 

//Destory(게임오브젝트 참조) - 게임오브젝트 파괴, 아이템 파괴

Destory(collsiion.gameObject);

}

 

 

// Time.deltaTime 이란?

두 유저의 이동속도가 같아지도록하는것. 

Time.deltaTime - 전프레임이 완료 되기까지의 시간.

 

 

FPS - frames per second  : 1 초당 프레임수

1FPS : 1초에 1개를 찍어냄

1000FPS : 1초에 1000개를 찍어냄

 

10FPS - 한프레임당 1/10초, 한프레임당 1m 이면 1초당 0.1m  

20FPS - 한프레임당 1/20초, 한프레임당 1m 이면 1초당 0.05m  

 

[매끄러운 정도]

10FPS < 20FPS

두개의 속도는 = 같음.

 

// 유니티의 생명주기

Reset : 오브젝트 생숭후 객체의 속성 초기화

Awake : Start 함수전에 호출 됨. 비활성화 상태에서도 호출가능. 

              Start 함수는 활성화 상태일때만 호출. 초기화 순서를 정함.(Corountine 사용불가)

OnEnable : 인스펙터뷰에서 체크, 오브젝트를 활성화 할때마다 호출

Start : Update 함수가 호출되기전에 한번만 호출. 활성화 상태일때 호출

|

FixedUpdate : 물리엔진 사용시 사용. 일정시간 간격으로 규칙적으로 호출, 힘발생. Default 0.02초.

OnTriggerXXXX

OnCollisionXXX

|

Update : 프레임마다 호출되는 함수. 게임의 핵심 로직에 사용. 스크립트가 활성화 되있는 상태에서 사용됨. 주기x

LateUpdate : 모든 업데이트 함수가 호출 된 후 호출. 카메라 이동로직에 많이 사용.

|

OnDisable : 게임 오브젝트 or 스크립트가 비 활성화 되었을떄 호출 (Corountine 사용불가)

OnDestroy : 오브젝트 마지막 프레임이 업데이트 된 후 실행. (Object.Destory 또는 Scene 종료 시)

OnApplicationQuit : 응용 프로그램 종료 전에 모든 오브젝트에서 호출됨. 에디터의 경우 플레이모드 중지시.

 

-----

 

mini project

[아이템과 캐릭터 충돌] 

 

Player(캐릭터)

- 기본생성해서 화면 끌어다 넣으면 Inspector 창에 Transform 과 Sprite Renderer 가 생성되있다.

- Movement 스크립트 :  캐릭터 이동에 대한 것을 스크립트 파일로 생성해서 Unity 상에서 Addcomponent 로 Movement.cs 를 추가해준다. 이때 Movement 스크립트 옵션란에서 trans 대상란에 player 캐릭터를 연결해주어야 캐릭터 이동이 가능하다.

- ItemPickup 스크립트그리고 ItemPickup 스크립트 파일을 생성해서 아이템과 마주쳤을때의 상황에 대한 스크립트 문을 작성해준다.

- Rigidbody2D - 물리엔진(중력,힘) 영향 / Rigidbody는 3d 로 프로젝트 생성시 사용. 콜라이더가 없으면 충돌 여부 판단이 불가능.

- CircleCollider2D - 충돌영역 설정(서클형태) , Rigidbody 와는 항상 세트. 

 

item(충돌할 아이템)

-CircleCollider2D 

 

 

itemPickup.cs 에는 기존 스크립트 기본생성되는 구문 밑에 아래를 추가하면 된다.

private void OnCollisionEnter2D(Collision2D collision)

{

   Destroy(collision.gameObject); 을 

}

 

Canvas(UI요소에서의 캔버스)

- EventSystem - 캔버스 생성시 같이 생성됨.

- render Camera 로 Main Camera 설정.

- 점수판 : text를 추가해서 count 로 이름을 바꿔준후 박스 크기/ 글자 스타일 설정

 

--

 

 

728x90
반응형

'VR XR Development > Unity' 카테고리의 다른 글

BIFAN X Unity Short Film Challenge 2021  (0) 2021.08.23
UNITY. CLASS #01 _ 0415  (0) 2021.06.13

댓글