2011. 6. 30. 18:02ㆍ게임 개발/OpenGL
Unity3D Korea 에 있는 강좌를 보면서 공부를 하는 중입니다.
저작권 문제가 있지는 않을것 같지만.. 혹여나.. 문제가 된다면.. 말씀해주세용
해당글 : http://www.unity3dkorea.com/bbs/board.php?bo_table=m04_2&wr_id=13&page=7
http://www.willgoldstone.com/downloads/unity
해당 폴더에 강좌에 필요한 소스 파일이 있답니다. ^^
1. Sound & Object Collection 1탄
Sound를 적용하는 방법을 하는데
Audio > Audio Source 를 적용한다.
Loop 도 적용하구..
Volcano 쪽도 적용하는데, 적용하려는 원본 파일이...
3D 사운드..볼륨이 제한이 되어 있더군요..
Unity가 업그레이드 되면서.. 적용방법이 변경이 된것 같습니다.
2. Sound & Object Collection 2탄
우선 보석 먹기를 할것 같습니다.
하단에 글씨를 넣구요... GUI TEXT
그다음 아래와 같은 스크립트를 추가 해 줍시다.
var prefix = "Gems: ";
var suffix = "/3";
guiText.text = prefix + GemCollect.Count + suffix;
}
Gem 를 만들었답니다..(Cinema 4D에서 제작해서.. 이동)
3. Sound & Object Collection 3탄
그다음에는 Material 를 추가하지요... 색상도 넣고..
shader 는 FX > Glass > Stained BumpDistorted Specular 로 설정..
그리고 Tag 도 지정해 줍시다.
(Shader 부분은 공부 해야 할 양이 상당합니다. 우선 현재 기본으로 제공하는 Shader에 대해 충실하는 방향으로 진행 함)
4. Sound & Object Collection 4탄
자.. 이번에는 Particle System 를 추가 합니다.
Gem 에 다가 추가하고... Gem 이 돌아가게 스크립트도 추가 하고.. 음... 이게 과연 올바른 걸까?
Update 문에다 계속 보석이 빙글빙글 돌아가게 하는데..
var speed : float = 50.0;
function Update () {
var spinAmount = Time.deltaTime * speed;
transform.Rotate(0, spinAmount, 0);
}
자.. 이번에는 Particle System 에 대한 속성 부분을 간략히 보면,
Min Size : 폴리곤 최저 크기
Max Size : 폴리곤 최고 크기
(최저~최고로 랜덤으로 나온다.)
Min Energy : 내품었을때부터 사라지는데 걸리는 시간 (최저)
Max Energy : 내품었을때부터 사라지는데 걸리는 시간 (최고)
Min Emission : 초당 내뿜는 폴리곤 수 (최저)
Max Emission : 초당 내뿜는 폴리곤 수 (최고)
5. Sound & Object Collection 4탄
Gem를 Collection 하는 방법에 대해서 ... 간단히 tag 걸어 놓고 그 태그가 충돌하면, 삭제 시키면서 카운트 올리고, 소리 켜주고...
static var Count : int = 0;
var CollectSound : AudioClip;
function OnControllerColliderHit(hit:ControllerColliderHit){
if(hit.gameObject.tag == "gem"){
Destroy(hit.gameObject);
Count++;
audio.PlayOneShot(CollectSound);
}
}
걷는 스크립트 ... 여기서 FixedUpdate 가 나오는데, 이건 해당 프레임마다 Update 가 되는 것이라고 보면 되는데,
자세한 내용은 다음에 설명 하겠다.
Update - 매 프레임마다 한번씩 호출되는 함수. 프레임단위로 호출되기 때문에 이전 프레임과의
시간차가 일정하지 않으므로 TIme.deltaTime을 사용하여 이전 프레임과의 시간차를 확인하여 사용해야한다.
FixedUpdate - 매 프레임별로 호출되지만 시간차가 부정확한 Update와는 달리
일정한 시간 간격차를 두고 한번씩 호출되는 함수. Framerate가 낮으면 한 프레임에 여러번 불려질 수 있으며
Framerate가 높으면 한 프레임에 호출이 없을수도 있다.
이러한 Framerate와 독립적인 타이머에 의한 호출때문에 Time.deltaTime이 많이 필요한 모든 물리적 연산과 업데이트는 FixedUpdate()가 호출이 완료된 다음 이루어진다.
(Framerate와 독립적이기 때문에 FixedUpdate()메소드 안에선 Time.deltaTime을 사용할 필요가 없다.)
LateUpdate - Update와 마찬가지로 매 프레임마다 한번씩 호출되는 함수이지만, Update가 호출이 완료된 이후에 호출되는 특징을 갖고있다.
주로 Update()에서 캐릭터를 움직인다음, LateUpdate()에서 카메라를 이동시킨다거나 하는 용도로 사용한다.
(LateUpdate()에서 카메라를 이동시키는 이유는 Update()에서 캐릭터가 이동했다고 확실하게 신뢰할수 있기 때문.)
var speed = 6.0;
var jumpSpeed = 8.0;
var gravity = 20.0;
private var moveDirection = Vector3.zero;
private var grounded : boolean = false;
function FixedUpdate() {
if (grounded) {
// We are grounded, so recalculate movedirection directly from axes
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton ("Jump")) {
moveDirection.y = jumpSpeed * 10;
}
}
// Apply gravity
moveDirection.y -= gravity * Time.deltaTime;
// Move the controller
var controller : CharacterController = GetComponent(CharacterController);
var flags = controller.Move(moveDirection * Time.deltaTime);
grounded = (flags & CollisionFlags.CollidedBelow) != 0;
}
@script RequireComponent(CharacterController)
마우스를 통해 보는 스크립트
using UnityEngine;
using System.Collections;
/// MouseLook rotates the transform based on the mouse delta.
/// Minimum and Maximum values can be used to constrain the possible rotation
/// To make an FPS style character:
/// - Create a capsule.
/// - Add a rigid body to the capsule
/// - Add the MouseLook script to the capsule.
/// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
/// - Add FPSWalker script to the capsule
/// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
/// - Add a MouseLook script to the camera.
/// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationX = 0F;
float rotationY = 0F;
Quaternion originalRotation;
void Update ()
{
if (axes == RotationAxes.MouseXAndY)
{
// Read the mouse input axis
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationX = ClampAngle (rotationX, minimumX, maximumX);
rotationY = ClampAngle (rotationY, minimumY, maximumY);
Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
transform.localRotation = originalRotation * xQuaternion * yQuaternion;
}
else if (axes == RotationAxes.MouseX)
{
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationX = ClampAngle (rotationX, minimumX, maximumX);
Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
transform.localRotation = originalRotation * xQuaternion;
}
else
{
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = ClampAngle (rotationY, minimumY, maximumY);
Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
transform.localRotation = originalRotation * yQuaternion;
}
}
void Start ()
{
// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
originalRotation = transform.localRotation;
}
public static float ClampAngle (float angle, float min, float max)
{
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp (angle, min, max);
}
}
음.. 조금씩 감이 잡혀 오는 듯한 느낌이요.. ^^
'게임 개발 > OpenGL' 카테고리의 다른 글
Unity3D에서의 Collections 콜렉션 자료형 (0) | 2013.07.04 |
---|---|
Unity3D,X-Code... 이젠.. 포팅이당. (0) | 2012.03.28 |
MonoBehaviour 오버라이딩 가능 함수 레퍼런스 총 정리..랄까?? (25) | 2011.08.23 |
Unity3D iOS Porting Tips (0) | 2011.08.23 |
UnityKorea 강좌 중에 몇가지 정리 (1) | 2011.07.01 |
Unity GUI 공부하기 (0) | 2011.06.30 |
Newbie guide to Unity Javascript (초보자를 위한 자바스크립트 가이드) (0) | 2011.06.29 |
Cinema4D Animation & Interaction (0) | 2011.06.28 |
Unity3DStudent 를 이용한 공부 2 (0) | 2011.06.27 |
Unity3DStudent 를 이용한 공부 (0) | 2011.06.27 |