유니티 고급 과정 -4-

18
유유유 유유 유유 유유 (RigidBody) - ConstantForce 유유유 - Torque 유유유 ( 유유 , 유유 유유유 유유유 유유유 ?) - AddForce, AddTorque 유유유 유유유 유유유유 유 유유 Kiyoung Moon( 유유유 )

Upload: kiyoung-moon

Post on 26-Jul-2015

371 views

Category:

Education


0 download

TRANSCRIPT

Page 1: 유니티 고급 과정 -4-

유니티고급과정강체 (RigidBody)- ConstantForce 사용법- Torque 사용법 (양수 , 음수어떠한의미를갖는가 ?)- AddForce, AddTorque

조인트사용법

오브젝트풀

정리

Kiyoung Moon(문기영 )

Page 2: 유니티 고급 과정 -4-

강체예제 > testRigidBody

가장간단한박스를만들고RigidBody 컴포넌트를이용해서

강체를구현한다 .

깊이감을위해그림자처리를한다 .

Page 3: 유니티 고급 과정 -4-

강체 강체를움직이기위해힘 , 토크를 설정해주어야한다 .

유니티에서는 Constant_Force 컴포넌트를제공하고있는데

이것을이용하면간단하게힘 , 토크를줄수있다 .

이때토크의방향을설정하는것이 중요한데왼손 , 오른손법칙을이용해서그방향을알수있다 .

Page 4: 유니티 고급 과정 -4-

강체

스크립트를이용해강체를움직여보자 .

씬 testRigidBody_ForceTorqueByScript 를보면 force_torque.cs 를 컴포넌트로사용하고있고내부구조는다음과같다 .

using UnityEngine;using System.Collections;

public class force_torque : MonoBehaviour { // Update is called once per frame void Update () { gameObject.rigidbody.AddForce( new Vector3( -1.08f, 0, 0 ) ); gameObject.rigidbody.AddTorque( new Vector3( 0, 0, 0.56f ) ); }}

스크립트를이용해강체를움직여보자 .

Page 5: 유니티 고급 과정 -4-

여러강체를한묶음으로만들어보자 .

여러강체를합쳐서하나로표현가능하다 . 유니티는 Fixed Joint를

제공하는데이것을이용해서여러 강체를하나로표현할수있다 .

testRigidBody_Fun 를보면강사가 간단하게데모를만들어보았다 .

‘ ’ 괴혼이라는게임의동작원리를살펴 볼수있다 .

주의 : 실제로 Fixed Joint 는 Fix하지 않기때문에 Configure Joint 를사용한

다 .

Page 6: 유니티 고급 과정 -4-

조인트 (Joint) 유니티는여러조인트타입을제공하고있다 .

Fixed JointSpring JointHinge JointConfigurable

Page 7: 유니티 고급 과정 -4-

Fixed Joint 강체를설정했지만물리에의해서움직이지않게하려면 Fixed Joint 를

사용한다 . 연결할몸통 (Body) 를설정하면해당부모객체의로컬좌표계에 기반해서위치값을설정한다 .

연결할몸통을설정하지않으면월드에서움직이지않는다 .

Page 8: 유니티 고급 과정 -4-

Spring Joint 스프링조인트는강체들을스프링으로연결할때사용한다 .

다음예제 testJoint 를 참고하도록하자 .

빨간색화살표가가리키는 강체는부모객체이고

FixedJoint 로설정했다 . 그렇기때문에월드에서움직이지않는다 .

노란색화살표가가리키는 강체는자식객체이고

Spring Joint 로설정했다 .

Anchor 를기준으로 360 도방향으로모두움직 일수있으며 Min, Max Distance 를설정해서

최소혹은최대로늘어질수있는길이를설정할수있다 . Spring 은스프링의강도인데이값이작으면작을수록더많이늘어질수있다 .

Page 9: 유니티 고급 과정 -4-

Spring Joint 를어디에사용할수있나 ?

예 > RopePong

강사가 C# 으로만들었던미니게임예제는스프링을이용해서구현했다 . 스프링조인트를이용해서천시뮬레이션도구현이가능하다 .

Page 10: 유니티 고급 과정 -4-

Spring Joint 로 Rope만들기Unity 로구현해본 Rope

예제 >testJoint_Rope

Page 11: 유니티 고급 과정 -4-

Hinge JointHinge Joint 는정해진축을

기준으로만회전할수있는조인트다 .

오른쪽그림을보면알수있듯이축이 정해져있고그축을기준으로회전한다 .

Page 12: 유니티 고급 과정 -4-

Hinge Joint

Page 13: 유니티 고급 과정 -4-

Configurable Joint

Page 14: 유니티 고급 과정 -4-

오브젝트풀 (Object Pool)- 이전강의에서설명한메모리풀의장점 ?- 오브젝트풀도같은개념 . 유니티에서는필수 !- 게임코디 (gamecodi.com) ‘ ’ 의닉네임 태풍의그라운드님의오브젝트풀을

간단히살펴보도록하자 .

Page 15: 유니티 고급 과정 -4-

전체소스using System.Collections; using System.Collections.Generic; public class CGameObjectPool<T> where T : class{ // Instance count to create. short count; public delegate T Func(); Func create_fn; // Instances. Stack<T> objects;

public CGameObjectPool(short count, Func fn) { this.count = count; this.create_fn = fn; this.objects = new Stack<T>(this.count); allocate(); }

void allocate() { for (int i=0; i<this.count; ++i) { this.objects.Push(this.create_fn()); } }

public T pop() { if (this.objects.Count <= 0) { allocate(); } return this.objects.Pop(); }

public void push(T obj) { this.objects.Push(obj); }}

Page 16: 유니티 고급 과정 -4-

델리게이트를왜사용했나 ?

설계의기본 “분리 (Separation)”

클라이언트코드와오브젝트풀을분리하기위함 .

Page 17: 유니티 고급 과정 -4-

개선할점은 ?

Page 18: 유니티 고급 과정 -4-

정리