170 likes | 369 Views
Basic Tutorials of Unity3D and 3D Objects. VIM Hanul Lim. Script 예제 재 활용. 지난 시간에 활용한 Mouse Script 재활용 Project 생성 후 , 지형 , Camera, Sphere 생성 Project>Assets>Scripts 폴더 생성 Scripts 폴더 로 Camera.cs , Sphere.cs 복사 Main Camera 에 그대로 드래그 앤 드롭 Sphere.cs 에도 동일하게 적용
E N D
Basic Tutorials of Unity3D and 3D Objects VIM Hanul Lim
Script 예제 재활용 • 지난 시간에 활용한 Mouse Script 재활용 • Project 생성 후, 지형, Camera, Sphere 생성 • Project>Assets>Scripts 폴더 생성 • Scripts 폴더로Camera.cs, Sphere.cs복사 • Main Camera에 그대로 드래그 앤 드롭 • Sphere.cs에도 동일하게 적용 • 좌표 수정(Camera와 Sphere의 좌표를 통일) • 프로젝트가 바뀌더라도 같은 기능하는 스크립트는 재활용이 가능함
Sphere Script 수정 - 1 • Sphere.cs • Public GameObject Camera; 선언 후 링크 • W 키입력 시 축에 대한 속도 변화를 수정 • rigidbody.velocity += Camera.transform.forward * 0.2f • W키를 누르면 카메라가 바라보는 정면으로 속도를 더함 • S 키 입력의 경우 – 0.2f를 곱해주면 됨 • A 키와 S키는 Camera.transform.right를 활용하여 부호를 반대로 하고 동일하게 적용 • FPS움직임과 동일하게 움직일 수 있음
Sphere Script 수정 - 2 • 거리를 이용한 점프 측정 • private float distToGround; • 바닥과 거리를 측정하기 위한 변수 선언 • 충돌 검출로는 정확도가 떨어짐 • void Start() 함수 내 다음을 입력하여 거리 측정 • distToGround = collider.bounds.extens.y; • boolIsGround(){ //바닥에 닿았는지 측정하는 함수 return Physics.Raycast(transform.position, -Vector3.up, distToGround + 0.1f); }
Sphere Script 수정 - 3 • 점프를 입력 받기 위한 함수를 다음과 같이 수정 • if (Input.GetKey(KeyCode.Space)) { if (IsGrounded()) rigidbody.velocity += new Vector3(0, 5, 0); } • 보다 간단하면서 정확하게 측정함 • 지형을 벗어나게 되면 점프를 못 함
Sphere Script 수정 - 4 • 속도의 제약을 가하기 위한 함수 생성 • 일정 이상 빨라지지 않도록 벡터의 크기를 측정함 • float sizeofVec(Vector3 vec){ float tempPow = 0; tempPow = Mathf.Pow(vec.x, 2) + Mathf.Pow(vec.y, 2) + Mathf.Pow(vec.z, 2); return Mathf.Sqrt(tempPow); } • 수학 식 함수는 Mathf.를 입력하면 자동완성 사용 가능 • 전후좌우 이동 입력을 받기 전에 if 문의 조건을 다음과 같이 하여 속도의 제약을 부여 • sizeofVec(rigidbody.velocity) <= 10
이동 및 시점 변환 함수 분석 • 1인칭 시점의 게임을 할 때처럼 시점은 마우스로 움직임 • 전진은 마우스가 바라보는 방향대로 함 • 자동으로 방향을 계산하여 우측과 정면을 검출하여 활용하므로 매우 간편함 • Drag를 줄 경우 하강 가속도도 감소하므로 스크립트를 활용하는 것이 보다 자연스러움
충돌검출 - 1 • 오브젝트의 스크립트 클래스 내 다음 인터페이스를 활용하여 충돌을 검출 • void OnCollisionEnter(Collision col) • 충돌이 발생할 시에 어떤 태그를 가진 물체와 충돌했는지 확인하고 지정된 태그를 가진 물체이면 해당 동작 수행 • 태그 지정 • Sphere 오브젝트 선택
충돌검출 - 2 • Add Tag에서 Element 0 에 Player 입력 • Cube 오브젝트 생성 후 스크립트 추가 • Cube.cs스크립트에 다음 코드 입력 • void OnCollisionEnter(Collision col) { if (col.gameObject.tag == "Player") Destroy(gameObject); }
충돌 실험 결과 분석 • 충돌이 발생할 경우 오브젝트가 파괴됨 • 충돌이 발생할 경우 어떠한 효과를 주거나 아이템을 먹은 것과 같은 점수 획득을 할 수도 있음 • 적이나 총알과 충돌한 경우 주인공을 파괴시키고 게임 오버 화면을 불러올 수도 있음
10분간 휴식한 후 진행하도록 하겠습니다. Break Time
Prefab이란? • 여러 번 활용하는 오브젝트를 간편하게 불러오도록 하기 위해 미리 만들어둔 집합 • 예컨대 총알, 적, 반복되는 지형 등에 활용됨 • Project>Assets>Prefabs폴더를 생성 • Project 창에서 Create>Prefab을 선택하면 빈 Prefab 생성 가능
Prefab 만들기 • 빈 Prefab에반복해서 쓸 Object를 끌어오거나 Inspector창에서 하나씩 Component를 추가하여 생성 가능 • 빈 Prefab에 Cube를 드래그 앤 드롭하고Cube를 삭제함 • Spawn을 빈 오브젝트를 통해 불러와 무한 생성 할 수 있음
과제 • 프로젝트 수행 중간 결과 가지고 오기 • 질문 리스트 작성해서 가지고 오기
다음 시간에 다룰 것들은… • 프로젝트 중간 점검 및 질의응답
일정, 내용등등 Q&A