Become a videogame developer 라는 부제를 가지고 있는 사이트입니다.
http://www.unity3dstudent.com/
교육 단계 모두 동영상으로 구성되어 있어서 , 공부하는데 정말 수월하게 진행 될수 있었습니다.
아래 내용은 제가 공부 하는데, 정리한 내용들이니.. 위에 사이트 가셔서 직접 공부하시는 것이 더더욱 도움이 많이 될것입니다. ^^
기본적으로 해당 강좌는 모두 javascript 로 구현되어져 있습니다.
Adding Mass / Gravity with Rigidbodies
해당 객체에 아래와같이 함수를 추가해주시고, 중력을 줍시다.
기본적으로 이렇게 중력을 추가하는 것이 가장 기본이고, 이게 너무 신기 했습니다.
1. Basic Collision Detection
충돌 탐지 : 해당 객체에 아래와 같이 함수를 추가해 보시면.. 아래와 같이 디버깅 창에 로그가 나타납니다. 충돌이 되는 순간을 알수 있다라는 것 알게 되었지요
function OnCollisionEnter(theCollision : Collision){
if(theCollision.gameObject.name == "Floor"){
Debug.Log("Hit the floor");
}else if(theCollision.gameObject.name == "Wall"){
Debug.Log("Hit the wall");
}
}
2. Detecting Input
입력값 탐지 : Update 함수는 Play가 되는 동안을 알수 있는 함수 있다.
스페이스바를 눌렀을때.. 로그가 나오는 거죠
function Update () {
if(Input.GetButtonUp("Jump")){
Debug.Log("We Have Hit the Space Bar!");
}
}
3. Prefabs
Prefabs – How to make them, what they are for, and why!
Hierarchy에서 생성한 객체를 Prefabs 로 생성해서 추가합니다.
그리고 맘대로 쓸수가 있군요.. 한번 만든것을 응용해서 사용하자는 거군요.
4. Destroying Objects
오브젝트를 삭제하는 것을 알려 줍니다.
타겟을 지정하고, 지연시간을 추가할수도 있지요.
function Start () {
Destroy(gameObject.Find("Cube"),2);
}
5.Instantiate to Create Objects
빈 객체(GameObject)에다가.. javascript로 객체 생성을 하고, prefab에다가... 기존에 만들어 놓은 BounyBox(prefab)를 추가하면.. 생성이 되지요
6.SImple Timer
타이머를 추가해서.. 이것저것 로그 찍어봅시다.
//A simple countdown timer
var myTimer : float = 5.0;
function Update () {
if(myTimer > 0){
myTimer -= Time.deltaTime;
}
if(myTimer <= 0){
Debug.Log("GAME OVER");
}
}
7. Basic Translate Movement
해당 객체를 이동시키는 거군요.. 간단 하면서..
//Basic movement of an object with Translate
var speed : float = 5.0;
function Update () {
transform.Translate(Vector3(0,0,speed) * Time.deltaTime);
}
8. Basic Force Movement
힘...해당축으로 밀어주는 힘을 말하는 군요..냐하하하
//Basic force to move a rigidbody object
var power : float = 500.0;
function Start () {
rigidbody.AddForce(Vector3(0,0,power));
}
9.Adding Materials
배경 입히는 것이군요..
10. Audio Basics
스크립트를 통해 사운드를 넣어주게 됩니다.
//Play an instance using attached AudioSource component
var myClip : AudioClip;
function Start () {
audio.PlayOneShot(myClip);
}
Using PlayClipAtPoint:
//Spawn a new object with AudioSource and Clip set, at a point in the 3D world
var myClip : AudioClip;
function Start () {
AudioSource.PlayClipAtPoint(myClip, transform.position);
}
11. Basic Joints
기본 관절... 헐..이음새 등을 이용하게 되는 군요.. 오홋 정말 신기합니다.
이음새를 연결하여 헐렁 헐렁...
12.Input with Axes
방향키로 객체를 조정하는 방법을 배워봅니다.
응용범위가 점점 넓어지는 군요
function Update () {
var horiz : float = Input.GetAxis("Horizontal");
Debug.Log(horiz);
transform.Translate(Vector3(horiz,0,0));
}
13. Trigger Collision Detection
Trigger를 체크 했을때, 객체가 통과가 되네요..
또한 통과했을때의 확인할수 있습니다.
function OnTriggerEnter (myTrigger : Collider) {
if(myTrigger.gameObject.name == "box"){
Debug.Log("Box went through!");
}
}
14. GUI Text and Counters
GUIText 객체를 사용하는 방법에 대해서 알아봅니다.
오홋 카운트도 넣을수가 있네요.. 이런 말도 안되는;;
var Counter : int = 0;
function Update () {
Counter++;
guiText.text = "Counter is: "+Counter;
}
15. Adding Componets via Script
스크립트를 사용해서 다른 객체에게 기능을 추가하는 요소
function OnCollisionEnter (myCollision : Collision) {
if(myCollision.gameObject.name == "Platform"){
if(!myCollision.gameObject.rigidbody){
myCollision.gameObject.AddComponent(Rigidbody);
}
}
}
16. Switching Scenes
화면 전환입니다.(Build Setting 를 사용할수도 있지요..)
플레이 화면과 결과 화면을 연동에 응용하면 좋을것 같습니다.
var myLevel : String;
function OnCollisionEnter (myCollision : Collision) {
if(myCollision.gameObject.name == "Floor"){
Application.LoadLevel(myLevel);
}
}
17. Tweaking Components via script
스크립트를 이용하여, 불을 켜다...
function OnCollisionEnter (myCollision : Collision) {
if(myCollision.gameObject.name == "Floor"){
var myLight : Light = gameObject.Find("Light").GetComponent(Light);
myLight.enabled = true;
myLight.intensity = 5;
}
}
18.Local vs World Direction
alt 키를 누르면 되고.. Local 과 World Direction은 좀더 찾아서 공부를 해봐야 할 것 같습니다.
function Update () {
//transform.Translate(Vector3(0,0,1) * Time.deltaTime);
var fwd = transform.forward * 100;
rigidbody.AddForce(fwd);
}
19. Following with LookAt()
카메라 이동 컷입니다. 오호홋.. 바로 이거야. 멋쪄브렁
var myTransform : Transform;
function Update () {
transform.LookAt(myTransform);
}
20. IF Statement and Booleans
boolean의 상태값 에 따라 변경하는 방법
var myCheck : boolean = true;
function Update () {
if(myCheck){
guiText.text = "Its on!";
}else{
guiText.text = "Its Off!";
}
if(Input.GetButtonUp("Jump") && myCheck){
myCheck = false;
}else if(Input.GetButtonUp("Jump") && myCheck == false){
myCheck = true;
}
}
21. Finding Distance with Vector3
떨어지는 객체에 대한 거리를 측정하여, 다양한 액션을 취하도록 합니다.
var box : Transform;
function Update () {
var dist : float = Vector3.Distance(box.position, transform.position);
Debug.Log(dist);
if(dist <= 10){
light.enabled = true;
}else{
light.enabled = false;
}
}
22. Pausing Scripts with WaitForSeconds()
몇초동안 멈추는듯 한데유..
더욱 신기한것은 Instantiate 함수 입니다.
계속 인스턴스를 생성하네요 @.@
var box : GameObject;
var readynow : boolean = true;
function Update () {
if(readynow){
MakeBox();
}
}
function MakeBox(){
readynow=false;
Instantiate(box, transform.position, transform.rotation);
yield WaitForSeconds(2);
readynow=true;
}
23. Particle Systems
파티클을 적용 해봅시다. 터지는 효과등에 사용하면 그만이겠군요!
var stars : ParticleEmitter;
function OnCollisionEnter (col : Collision) {
Instantiate(stars, transform.position, transform.rotation);
Destroy(gameObject);
}
24. For Loops
루프를 돌려 보자구용
var myPrefab : Rigidbody;
var distanceMultiplier : float = 2;
function Start(){
var i : int = 0;
var pos : Vector3 = transform.position;
for(i=0; i<=3; i++){
Instantiate(myPrefab, Vector3(pos.x+i*distanceMultiplier, pos.y, pos.z), transform.rotation);
yield WaitForSeconds(0.5);
Debug.Log("made ball "+i);
}
}
25. GUI Texture & mouse Event
드디어.. 버튼 롤오버.. 와 클릭 이벤트를 알아냈군요..
게임내 버튼을 만들면 되겠군요..요걸 가지고
var normalTex : Texture2D;
var hoverTex : Texture2D;
function OnMouseEnter () {
guiTexture.texture = hoverTex;
}
function OnMouseExit(){
guiTexture.texture = normalTex;
}
function OnMouseDown(){
Debug.Log("clicked");
}
26. Using Mathf.Clamp to restrict values
이동의 제한을 두는 방법입니다.
Clamp 자체가 꺽쇠 라는 뜻이라는 군요..
function Update () {
var xMove : float = Input.GetAxis("Horizontal") * Time.deltaTime * 20;
transform.Translate(Vector3(xMove,0,0));
transform.position.x = Mathf.Clamp(transform.position.x, -10, 10);
}
27.Using Time.timeScale to Pause
timeScale 를 이용한 일시정지..(스페이드바 키를 이용)
var paused : boolean = false;
function Update () {
if(Input.GetButtonUp("Jump")){
if(!paused){
Time.timeScale = 0;
paused=true;
}else{
Time.timeScale = 1;
paused=false;
}
}
}
28. SendMessage() to Call External Functions
자.. 그러니까.. 외부 함수를 SendMessage를 통해서 전달할수가 있다는 말이야.
var downTexture : Texture2D;
function React () {
renderer.material.mainTexture = downTexture;
yield WaitForSeconds(1);
gameObject.AddComponent(Rigidbody);
}
function OnCollisionEnter(col : Collision) {
if(col.gameObject.name == "Switch"){
gameObject.Find("Block").SendMessage("React");
}
}
'개발지식창고 > Unity3D' 카테고리의 다른 글
Unity3D 개요 (0) | 2012.02.26 |
---|---|
Unity3DStudent 를 이용한 공부 2/2 (0) | 2012.02.26 |
MonoBehaviour 로 오버라이딩 되는 함수 정리 (0) | 2012.02.26 |
기본 용어 및 개념정리 (0) | 2012.02.26 |
Unity 3D란? (0) | 2012.02.26 |