씬 로드및 최종 점수처리를 간단히 해보고 길고 길었던 스터디를 마무리 합니다.

 

 




//카메라 -----------------------

using UnityEngine;
using System.Collections;

public class Cam : MonoBehaviour {

    public Transform Target;
    public Transform Camera;
    private Vector3 CamPos;
    public float CamX;
    public float CamY;
    public float CamSpeed;

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
        CamPos = new Vector3 (Target.position.x + CamX , CamY, Target.transform.position.z);
        Camera.transform.position = Vector3.Lerp (Camera.transform.position, CamPos, Time.smoothDeltaTime * CamSpeed);
    }
}

 

//캐릭터 -----------------------

using UnityEngine;
using System.Collections;

public class CharMove : MonoBehaviour {


    //public
    public GameObject Target;
    public float MovePower = 0.5f;
    public float MoveSpeed = 5.0f;
    public float RotationSpeed = 20.0f;
    public float ReturnPower = 0.5f;


    //private
    private float TargetPosition;
    private float TargetSetPosition;
    private Quaternion RotationQ;
    private bool OnForward;
    private bool OnLeft;
    private bool OnRight;
    private bool OnBack;
    private bool Moving;
    private bool StateForward;
    private bool StateLeft;
    private bool StateRight;
    private bool StateBack;


    //Collider Controller
    private string OnMoveVecter = "State";
    private string StayVecter = "State";

    //UI
    public GameObject ScoreLabel;
    private int num = 1;


    // Use this for initialization
    void Start () {
        ScoreLabel = GameObject.Find ("ScoreLabel");
    }
    
    // Update is called once per frame
    void Update () {

        //Debug.Log ("OnMoveVecter : "+OnMoveVecter);

        //forward move
        if(OnForward){
            Moving = true;
            Target.gameObject.transform.position += new Vector3(MovePower,0,0)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.x;

            //Rotation
            RotationQ = Quaternion.Euler(0,0,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation, RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition >= TargetSetPosition){
                OnForward = false;
                Moving = false;
            }
        }


        // Left move
        if(OnLeft){
            Moving = true;
            Target.gameObject.transform.position += new Vector3(0,0,MovePower)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.z;

            //Rotation
            RotationQ = Quaternion.Euler(0,-90.0f,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation, RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition >= TargetSetPosition){
                OnLeft = false;
                Moving = false;
            }

            Moving = false;
        }


        // Right move
        if(OnRight){
            Moving = true;
            Target.gameObject.transform.position -= new Vector3(0,0,MovePower)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.z;

            //Rotation
            RotationQ = Quaternion.Euler(0,90.0f,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation, RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition <= TargetSetPosition){
                OnRight = false;
                Moving = false;
            }
        }


        // Back move
        if(OnBack){
            Moving = true;
            Target.gameObject.transform.position -= new Vector3(MovePower,0,0)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.x;

            //Rotation
            RotationQ = Quaternion.Euler(0,180.0f,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation, RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition <= TargetSetPosition){
                OnBack = false;
                Moving = false;
            }
        }

    }


    //forward move btn
    public void CharForwardMove(){
        if (Moving == false & StateForward == false) {
            TargetSetPosition = Target.gameObject.transform.position.x + MovePower;
            OnForward = true;
            OnMoveVecter = "ForwardVecter";

            num = num + 1;
            ScoreLabel.GetComponent<UILabel>().text = num.ToString();
        }
    }

    // Left move btn
    public void CharLeftMove(){

        if(Moving == false & StateLeft == false){
            TargetSetPosition = Target.gameObject.transform.position.z + MovePower;
            OnLeft = true;
            OnMoveVecter = "LetfVecter";

        }
    
    }

    // Right move btn
    public void CharRightMove(){
        if (Moving == false & StateRight == false) {
            TargetSetPosition = Target.gameObject.transform.position.z - MovePower;
            OnRight = true;
            OnMoveVecter = "RightVecter";
        }
    }


    //forward move btn
    public void CharBackMove(){
        if (Moving == false & StateBack == false) {
            TargetSetPosition = Target.gameObject.transform.position.x - MovePower;
            OnBack = true;
            OnMoveVecter = "BackVecter";

            num = num - 1;
            ScoreLabel.GetComponent<UILabel>().text = num.ToString();
        }
    }



    //Trigger ON
    void OnTriggerEnter(Collider col){
        StayVecter = OnMoveVecter;
    }

    //collider
    void OnTriggerStay(Collider col){
        
        //Debug.Log ("TriggerStay : " + "Trigger Stay!!");
        if(StayVecter == "ForwardVecter"){
            StateForward = true;
        }else if(StayVecter == "LetfVecter"){
            StateLeft = true;
        }else if(StayVecter == "RightVecter"){
            StateRight = true;
        }else if(StayVecter == "BackVecter"){
            StateBack = true;
        }
    }

    void OnTriggerExit(Collider col){
        StateForward = false;
        StateLeft = false;
        StateRight = false;
        StateBack = false;
        OnMoveVecter = "State";
        StayVecter = "State";
    }



    /* collider Test
    void OnCollisionEnter(Collision col){
        Debug.Log ("OnCollisionEnter");
    }

    void OnCollisionExit(Collision col){
        Debug.Log ("OnCollisionExit");
    }

    void OnCollisionStay(Collision col){
        Debug.Log ("OnCollisionStay");
    }

    void OnTriggerEnter(Collider col){
        Debug.Log ("OnTriggerEnter");
    }

    void OnTriggerExit(Collider col){
        Debug.Log ("OnTriggerExit");
    }

    void OnTriggerStay(Collider col){
        Debug.Log ("OnTriggerStay");
    }
    */


}

 

 

//게임오버 UI -----------------------

using UnityEngine;
using System.Collections;

public class GameOverColl : MonoBehaviour {

    public GameObject GameOverLabal;

    // Use this for initialization
    void Start () {
        GameOverLabal = GameObject.Find ("GameOver_UI");
    }
    
    // Update is called once per frame
    void Update () {
    
    }

    void OnTriggerEnter(Collider col){
        if(col.gameObject.tag == "Player"){
            GameOverLabal.GetComponent<UIPanel> ().alpha = 1;
        }
    }
}

 

 

Posted by 프리랜서 디자이너

7강

- 점수 

- 장애물

- 게임오버

 

 

Posted by 프리랜서 디자이너

Unity c# for designer - 6강 (미니게임 만들며 Script 배우기)

 

학습내용

 
  • 과제풀이

  • 방향 버튼에 맞게 캐릭터 회전하기

  • 이동 완료시 까지 다른 버튼 작동안되게 처리하기

  • 충돌 처리





6-1강

6- 1강  코드  공유 드립니다.

아래 코드는 정답이 아니니 심플하게 바꾸셔도 좋습니다.~^^

 

 

using UnityEngine;
using System.Collections;

public class studyCharMove : MonoBehaviour {


    //public
    public GameObject Target;
    public float MovePower = 0.0f;
    public float MoveSpeed = 0.0f;
    public float RotationSpeed = 0.0f;

    //private
    private float TargetPosition;
    private float TargetSetPosition;
    private Quaternion RotationQ;
    private bool OnForward;
    private bool OnLeft;
    private bool OnRight;
    private bool Moving;




    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

        //forward move
        if(OnForward){
            Moving = true;
            Target.gameObject.transform.position += new Vector3(MovePower,0,0)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.x;

            //Rotation
            RotationQ = Quaternion.Euler(0,0,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation, RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition >= TargetSetPosition){
                OnForward = false;
                Moving = false;
            }

        }


        // Left move
        if(OnLeft){
            Moving = true;
            Target.gameObject.transform.position += new Vector3(0,0,MovePower)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.z;

            //Rotation
            RotationQ = Quaternion.Euler(0,-90.0f,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation,RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition >= TargetSetPosition){
                OnLeft = false;
                Moving = false;
            }
        }

        // Right move
        if(OnRight){
            Moving = true;
            Target.gameObject.transform.position -= new Vector3(0,0,MovePower)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.z;

            //Rotation
            RotationQ = Quaternion.Euler(0,90.0f,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation, RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition <= TargetSetPosition){
                OnRight = false;
                Moving = false;
            }
        }

    }


    //forward move btn
    public void CharForwardMove(){
        if(!Moving){
            TargetSetPosition = Target.gameObject.transform.position.x + MovePower;
            OnForward = true;
        }
    }

    // Left move btn
    public void CharLeftMove(){
        if(!Moving){
            TargetSetPosition = Target.gameObject.transform.position.z + MovePower;
            OnLeft = true;
        }
    }

    // Right move btn
    public void CharRightMove(){
        if (!Moving) {
            TargetSetPosition = Target.gameObject.transform.position.z - MovePower;
            OnRight = true;
        }
    }

} 




6-2강
using UnityEngine;
using System.Collections;

public class CharMove : MonoBehaviour {


    //public
    public GameObject Target;
    public float MovePower = 0.5f;
    public float MoveSpeed = 5.0f;
    public float RotationSpeed = 20.0f;
    public float ReturnPower = 0.5f;


    //private
    private float TargetPosition;
    private float TargetSetPosition;
    private Quaternion RotationQ;
    private bool OnForward;
    private bool OnLeft;
    private bool OnRight;
    private bool Moving;
    private bool StateForward;
    private bool StateLeft;
    private bool StateRight;


    //Collider Controller
    private string OnMoveVecter = "State";
    private string StayVecter = "State";




    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {

        Debug.Log ("OnMoveVecter : "+OnMoveVecter);

        //forward move
        if(OnForward){
            Moving = true;
            Target.gameObject.transform.position += new Vector3(MovePower,0,0)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.x;

            //Rotation
            RotationQ = Quaternion.Euler(0,0,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation, RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition >= TargetSetPosition){
                OnForward = false;
                Moving = false;
            }

        }


        // Left move
        if(OnLeft){
            Moving = true;
            Target.gameObject.transform.position += new Vector3(0,0,MovePower)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.z;

            //Rotation
            RotationQ = Quaternion.Euler(0,-90.0f,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation, RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition >= TargetSetPosition){
                OnLeft = false;
                Moving = false;
            }

            Moving = false;
        }

        // Right move
        if(OnRight){
            Moving = true;
            Target.gameObject.transform.position -= new Vector3(0,0,MovePower)*(Time.deltaTime * MoveSpeed);
            TargetPosition = Target.gameObject.transform.position.z;

            //Rotation
            RotationQ = Quaternion.Euler(0,90.0f,0);
            Target.transform.rotation = Quaternion.Slerp(Target.transform.rotation, RotationQ , RotationSpeed * Time.deltaTime);

            if(TargetPosition <= TargetSetPosition){
                OnRight = false;
                Moving = false;
            }
        }

    }


    //forward move btn
    public void CharForwardMove(){
        if (Moving == false & StateForward == false) {
            TargetSetPosition = Target.gameObject.transform.position.x + MovePower;
            OnForward = true;
            OnMoveVecter = "ForwardVecter";
        }
    }

    // Left move btn
    public void CharLeftMove(){

        if(Moving == false & StateLeft == false){
            TargetSetPosition = Target.gameObject.transform.position.z + MovePower;
            OnLeft = true;
            OnMoveVecter = "LetfVecter";

        }
    
    }

    // Right move btn
    public void CharRightMove(){
        if (Moving == false & StateRight == false) {
            TargetSetPosition = Target.gameObject.transform.position.z - MovePower;
            OnRight = true;
            OnMoveVecter = "RightVecter";
        }
    }





    //Trigger ON
    void OnTriggerEnter(Collider col){
        StayVecter = OnMoveVecter;
    }

    //collider
    void OnTriggerStay(Collider col){
        
        Debug.Log ("TriggerStay : " + "Trigger Stay!!");
        if(StayVecter == "ForwardVecter"){
            StateForward = true;
        }else if(StayVecter == "LetfVecter"){
            StateLeft = true;
        }else if(StayVecter == "RightVecter"){
            StateRight = true;
        }
    }

    void OnTriggerExit(Collider col){
        StateForward = false;
        StateLeft = false;
        StateRight = false;
        OnMoveVecter = "State";
        StayVecter = "State";
    }


} 




Posted by 프리랜서 디자이너

Unity c# for designer - 5강 보충 수업


scripting API

https://docs.unity3d.com/ScriptReference/index.html


Gameobject

Find()

transform.position

transform.Rotate

transform.localScale

ngui Button




using UnityEngine;

using System.Collections;


public class findobj : MonoBehaviour {


public GameObject obj001;

public Transform obj002;

public GameObject obj003;

public float RotateSpeed = 1;


// Use this for initialization

void Start () {

obj001 = GameObject.Find("001");

obj002 = GameObject.Find ("002").transform;

obj003 = GameObject.Find("003");


Move001 ();

}

// Update is called once per frame

void Update () {

TranslateObj ();

RotateObj ();

}


public void Move001(){

obj001.transform.position = new Vector3 (0,0,0);

}


public void TranslateObj(){

obj002.transform.Translate (Vector3.forward * Time.deltaTime);

}


public void RotateObj(){

obj003.transform.Rotate (Vector3.right * Time.deltaTime * RotateSpeed);

}


public void ScaleObj(){

obj003.transform.localScale += new Vector3 (2,2,2);

}

}












Posted by 프리랜서 디자이너

Unity c# for designer - 5강 (미니게임 만들며 Script 배우기)



NGUI를 이용한 캐릭터 이동

원활한 수업을 위해 예제 리소스들을 미리 배치해 두었습니다.(무료어셋)


오늘은 캐릭터를 정해진 값 만큼 부드럽게 이동하는 코드와 캐릭터를 부드럽게

따라가는 스크립트를 작성하겠습니다.



캐릭터 이동 스크립트



using UnityEngine;

using System.Collections;


public class CharMove : MonoBehaviour {


public GameObject Target;

private bool OnForward = false;

private float TargetPosition;

private float TargetSetPosition;


public float MovePower = 50.0f;




// Use this for initialization

void Start () {


}

// Update is called once per frame

void Update () {

if(OnForward){

Target.gameObject.transform.position += new Vector3(MovePower,0,0)*Time.deltaTime;

TargetPosition = Target.gameObject.transform.position.x;


if(TargetPosition >= TargetSetPosition){

OnForward = false;

}


}

}



public void CharForwardMove(){

Debug.Log ("Forward!");

TargetSetPosition = Target.gameObject.transform.position.x + MovePower;

OnForward = true;

}


public void CharRightMove(){

Debug.Log ("Right!");

}


public void CharLeftMove(){

Debug.Log ("Left!");

}



}





부드럽게 따라가는 카메라 이동 스크립트



using UnityEngine;

using System.Collections;


public class Cam : MonoBehaviour {


public Transform Target;

public Transform Camera;

private Vector3 CamPos;

public float CamX;

public float CamY;

public float CamSpeed;


// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

CamPos = new Vector3 (Target.position.x + CamX , CamY, Target.transform.position.z);

Camera.transform.position = Vector3.Lerp (Camera.transform.position, CamPos, Time.smoothDeltaTime * CamSpeed);

}

}






플레이 영상




과제

외쪽이동, 오른쪽 이동코드를 작성해 오세요.~ (캐릭터 회전은 다음시간에 알려드립니다.)

Posted by 프리랜서 디자이너

Unity c# for designer 4강 / 클래스

C#이 보이는 그림책을 참고로 작성했습니다.

강의용 자료로 만들었기 때문에 구체적인 설명은 없습니다.



  • 객체지향?

  • 객체?

  • 클래스?

  • 인스턴스?

  • 메소드?

  • 필드?



A


using UnityEngine;

using System.Collections;


public class method_01{


   void Start () {


   }

   public int Add(int a){

      return a;

   }

   public string Add(string z, string w) {

      return z + w;

   }


}






B


using UnityEngine;

using System.Collections;


public class method_02 : MonoBehaviour {


   // Use this for initialization

   void Start () {


method_01 myclass = new method_01 ();


       myclass.Add(10);

Debug.Log (myclass.Add(10));


myclass.Add("methodA", "methodB");

Debug.Log (myclass.Add("methodA", "methodB"));

   }


}








과제

복습~

Posted by 프리랜서 디자이너

Unity c# for designer 3강 / 제어문

C#이 보이는 그림책을 참고로 작성했습니다.

강의용 자료로 만들었기 때문에 구체적인 설명은 없습니다.



오늘은 다양한 조건문을 배우고 유니티 API를 이용해

오브젝트를 간단히 움직여 보겠습니다.

NGUI도 간단히 사용해 보겠습니다.




유니티 스크립트를 시작하는데 꼭 필요한 자료 입니다.

즐찾 하세요.~ ^^


Unity 스크립트 자습서

http://unity3d.com/kr/learn/tutorials/topics/scripting




Unity Script API

https://docs.unity3d.com/ScriptReference/30_search.html?q=Translate




1. if 문을 이용한 오브젝트 이동과 UI Label

using UnityEngine;

using System.Collections;


public class if001 : MonoBehaviour {


public bool go;

public UILabel uiText;

public float speed;


void Start () {

}

void Update () {

if (go == true) {

this.gameObject.transform.Translate (Vector3.right * Time.deltaTime * speed);

uiText.GetComponent<UILabel>().text = "right!";

} else {

this.gameObject.transform.Translate (Vector3.left * Time.deltaTime * speed);

uiText.GetComponent<UILabel>().text = "left!";

}

}

}





2. for문을 이용한 연산과 UI Label



using UnityEngine;

using System.Collections;


public class for001 : MonoBehaviour {


public UILabel uiText;

public int count;


void Start () {

for(int i = 0; i <= count; i++){

Debug.Log ("i = "+i);

Debug.Log ("count = "+count);


if(i == 10){

uiText.GetComponent<UILabel> ().text = "finish!!";

}

}

}

void Update () {

}

}






3. foreach문을 이용한 UI Label 문자 바꾸기



using UnityEngine;

using System.Collections;


public class foreach001 : MonoBehaviour {


public UILabel[] TT = new UILabel[3];

public string text = "Oh!!";



// Use this for initialization

void Start () {


TT [0] = GameObject.Find ("Label_1").GetComponent<UILabel>();

TT [1] = GameObject.Find ("Label_2").GetComponent<UILabel>();

TT [2] = GameObject.Find ("Label_3").GetComponent<UILabel>();


foreach( UILabel result in TT){

result.text = text;

}

}

// Update is called once per frame

void Update () {

}

}






4. while문을 이용한 UI Label 문자 바꾸기



using UnityEngine;

using System.Collections;


public class while001 : MonoBehaviour {


public int count;

public int whileCount;

public UILabel uiText;


void Start () {


while(whileCount < count){

Debug.Log (whileCount);

whileCount++;

}


uiText.GetComponent<UILabel> ().text = whileCount.ToString ();

}

void Update () {

}

}





5. switch문으로 오브젝트 제어하기


using UnityEngine;

using System.Collections;


public class swirch001 : MonoBehaviour {


public Move moveState;


public GameObject obj;

public float speed;

public UILabel uiText;


public enum Move {

go, stop

}


// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {


switch(moveState){

case Move.go:

obj.transform.Translate (Vector3.right * Time.deltaTime * speed);

uiText.GetComponent<UILabel>().text = "GO!";

break;

case Move.stop:

Debug.Log ("STOP!");


break;

}


}

}









과제

이번 과제는 복습입니다.

복습 복습 복습~



Posted by 프리랜서 디자이너

Unity c# for designer 2강 / 연산자

C#이 보이는 그림책을 참고로 작성했습니다.

강의용 자료로 만들었기 때문에 구체적인 설명은 없습니다.


1. 산술 연산자


연산자

기능

사용법

+

덧셈

a = b + c

-

뺄셈

a = b - c

*

곱셈

a = b * c

/

나눗셈

a = b  / c

%

나머지

a = b % c

=

대입

a = b

++

증가

변수의 값을 증가 시킴

--

감소

변수의 값을 감소 시킴



using UnityEngine;

using System.Collections;


public class calculation : MonoBehaviour {


public float b = 10f;

public float c = 20f;


// Use this for initialization

void Start () {

float d = b + c;

float e = b - c;

float f = b * c;

float g = b % c;

float h = b;

float i = ++b;

float j = --c;


Debug.Log (d);

Debug.Log (e);

Debug.Log (f);

Debug.Log (g);

Debug.Log (h);

Debug.Log (i);

Debug.Log (j);


}

// Update is called once per frame

void Update () {

}

}








2. 비교 연산자


연산자

사용법

의미

==

a == b

a와 b는 같다

<

a < b

a는 b보다 작다

>

a > b

a는 b보다 크다

<=

a <= b

a는 b보다 작거나 같다

>=

a >= b

a는 b보다 크거나 같다

!=

a != b

a와 b는 같지 않다.





3. 논리형




using UnityEngine;

using System.Collections;


public class tnb : MonoBehaviour {



public int a = 10;

public int b = 20;

public bool c;

public bool d;

public bool e;


// Use this for initialization

void Start () {

c = a < b;

d = a > b;

e = a == b;

Debug.Log (c);

Debug.Log (d);

Debug.Log (e);

}

// Update is called once per frame

void Update () {

}

}



조건 연산자


using UnityEngine;

using System.Collections;


public class tnb2 : MonoBehaviour {


public string right;

public string wrong;

private bool value;

private string answer;



// Use this for initialization

void Start () {

value = true;

answer = value ? right : wrong;

Debug.Log (answer);


value = false;

answer = value ? right : wrong;

Debug.Log (answer);

}

// Update is called once per frame

void Update () {

}

}









4. 논리 연산자


연산자

사용법

의미

&, &&

(a >= 10) && (a <50)

a는 10 이상이고 50 미만이면 참

|, ||

(a == 1) || (a == 100)

a는 1 또는 100이면 참

!

!(a == 100)

a는 100과 같다면 거짓




using UnityEngine;

using System.Collections;


public class tnb3 : MonoBehaviour {


public int a = 3;

public int b = 4;

bool x;

bool y;


// Use this for initialization

void Start () {

x = (a < 0);

y = (b > 0);


Debug.Log ((a == 3) & (b == 3));

Debug.Log (x | y);

Debug.Log (!(a == b));


}

// Update is called once per frame

void Update () {

}

}








5. 연산 우선 순위

간단한 문자 출력을 해보며 간단히 구조를 살펴봅니다.



6. 형 변환


using UnityEngine;

using System.Collections;


public class tnb4 : MonoBehaviour {


// Use this for initialization

void Start () {


Debug.Log ("3 / 2 = " + 3 / 2);

Debug.Log ("3 / 2 = " + 3 / 2);


Debug.Log ("3 / 2 = " + (float) 3/2);

Debug.Log ("3 / 2 = " + 3 / (float)2);


Debug.Log ("1.2 + 1.3 = " + (int)1.2f * (int)1.3f);

}

// Update is called once per frame

void Update () {

}

}






8. 과제

코드로 옮겨 보세요.


과제

using UnityEngine;

using System.Collections;


public class homework02 : MonoBehaviour {




열거형 calc_A ,calc_B 를 선언합니다.


public 정수형 value_A,value_B 를 선언합니다.

public 문자열 talkA,talkB를 선언합니다.


논리형(bool)talkValue,answer_01,answer_02,answer_04,answer_05을 선언합니다.

문자열 answer_03을 선언합니다.


정수형 a,b,c,d를 선언합니다.





void Start () {


스타트 함수에서 아와 같이 연산식을 각각대입합니다.

value_A * value_B = a

value_B % value_A = b

++value_B = c

value_B = d


각각에 변수에 아래의 식을 코드로 옮기세요.

answer_01 = a는b보다 작거나 같다.

answer_02 = a와b는 같지않다.

answer_03 = talkA와 talkB의 조건연산식 (힌트 talkValue? XXX : XXX )

answer_04 = a는b보다 크다 || c와d는 같다

answer_05 = (calcuEnum==CalcuEnum.calc_A) && (a는b보다 크다);

talkValue = talkValue는 참 입니다.


answer_01,answer_02,answer_03,answer_04,answer_05의 디버그 로그를 찍으세요.


}



void Update () {

}


}








잠깐!!!

실행전 인스펙터에 value_A는 10을 value_B는 20을 대입합니다.

인스펙터에 talkA는 Oh!를 talkB는 Ah!대입합니다.

그리고는 열거형 calc_A를 선택합니다.

실행~!



결과





Posted by 프리랜서 디자이너

Unity c# for designer 1강 / 기본적인 프로그램

C#이 보이는 그림책을 참고로 작성했습니다.

강의용 자료로 만들었기 때문에 구체적인 설명은 없습니다.


 

1. Hello world

간단한 문자 출력을 해보며 간단히 구조를 살펴봅니다.



 

1) helloWorld c# 스크립트를 하나 생성합니다.



 

2) 더블 클릭 해서 모노 창이 띄웁니다.



 

3) 이제 첫 스크립트를 작성할 준비가 끝났습니다.

이제 아래와 같이 작성해보세요.


 

void Update () {


Debug.Log ("Hellor World");

}




 

4) 작성한 후 스크립트를 끌어다 카메라에 넣고 플레이 해보세요.

콘솔 창에 Hello World 가 계속해서 출력되는 것을 확인 할 수 있습니다.


 

첫 스크립트 작성을 축하 합니다.!

짝짝짝~ ㅎㅎ





 

2. 프로그램의 기본 구조

유니티 C#의 기본 구조는 아래와 같습니다.

각각의 세부 설명은 이후 차차 설명하겠습니다.


 





 

3. 유니티 C# 기본 함수

출처 : http://dlgnlfus.tistory.com/64


 

void Awake(){

}


-스크립트가 실행될 때 한 번만 호출되는 함수이다.

-주로 게임의 상태 값 또는 변수의 초기화에 사용한다.

-start 함수가 호출되기 전에 먼저 호출된다.

-스크립트가 비 활성화돼 있어도 실행된다.

/*코루틴 사용 불가*/

void Start () {

}


-Update 함수가 호출되기 전에 한번만 호출된다.

-스크립트가 활성화돼 있어야 실행된다.

-다른 스크립트의 모든 Awake가 모두 실행된 이후에 실행된다.

void Update () {

}


-프레임마다 호출되는 함수로 주로 게임의 핵심 로직을 작성한다.

-스크립트가 활성화돼 있어야 실행된다.

-코루틴 사용 불가

void LateUpdate (){

}

-모든 Update 함수가 호출되고 나서 한 번 씩 호출된다.

-순차적으로 실행해야 하는 로직에 사용한다.

-카메라 이동 로직에 주로 사용하는 함수다.

-스크립트가 활성화돼 있어야 실행된다.

void FixedUpdate (){

}


-주로 물리 엔진을 사용하는 경우에 일정 시간 간격으로 힘을 가할 때 사용하는 함수다.

-스크립트가 활성화돼 있어야 실행된다.

void OnEnable (){

}


-게임 오브젝트 또는 스크립트가 활성화됐을 때 호출된다.

-이벤트 연결 시 사용한다.

-코루틴 사용 불가

void OnDisable (){

}


-게임오브젝트 또는 스크립트가 비활성화됐을 때 호출된다.

-이벤트 연결을 종료할 때 사용한다.

-코루틴 사용 불가

void OnGUI (){


}


-레거시 GUI 관련 함수를 사용할 때 사용한다.






 

3. 변수

이번엔 여러가지 변수를 선언해 보겠습니다.

따라해보세요.~


 

using UnityEngine;

using System.Collections;


public class unityVariable : MonoBehaviour {


public int a = 1;

public float b = 1.5f;

private decimal c = 1.96666666666666666666666666m;

public string d = "디자이너를 위한 C# 기초";

public string e = "Good";

public string f = "Designer";

private string g = "good designer";

private string h = "GOOD DESIGNER";


System.Text.StringBuilder sb = new System.Text.StringBuilder();



// Use this for initialization

void Start () {

Debug.Log (a);

Debug.Log (b);

Debug.Log (c.ToString());

Debug.Log (d);

Debug.Log (e+f);

Debug.Log (g.ToUpper());

Debug.Log (h.ToLower());

Debug.Log (g[0]);


//StringBuilder

sb.Append("one ");

sb.Append("two ");

sb.Append("three");

Debug.Log (sb.ToString());


}

// Update is called once per frame

void Update () {

}

}






 

아래와 같은 결과가 나오면 성공~




 

4. 배열

간단히 배열을 만들어 보겠습니다.

따라해 보세요.


 

using UnityEngine;

using System.Collections;


public class unityArray : MonoBehaviour {


public int[] aArray = new int[5];

private int[] bArray = new int[] { 6, 7, 8, 9, 10 };



// Use this for initialization

void Start () {


aArray [0] = 1;

aArray [1] = 2;

aArray [2] = 3;

aArray [3] = 4;

aArray [4] = 5;

Debug.Log (aArray[0]);

Debug.Log (aArray[1]);

Debug.Log (aArray[2]);

Debug.Log (aArray[3]);

Debug.Log (aArray[4]);


Debug.Log (bArray[0]);

Debug.Log (bArray[1]);

Debug.Log (bArray[2]);

Debug.Log (bArray[3]);

Debug.Log (bArray[4]);

}

// Update is called once per frame

void Update () {

}

}





 

결과는 아래와 같습니다.


 

다 차원 배열은 책을 참고하세요.!!




 

5. 열거형

이번에도 역시 열거형 작성을 따라해 보세요.



 

using UnityEngine;

using System.Collections;


public class unityEnum : MonoBehaviour {


public Animal animal;


public enum Animal {

mouse, cat, bird

};



// Use this for initialization

void Start () {


}

// Update is called once per frame

void Update () {


Debug.Log (animal);


}

}





 

인스펙터에 항목을 변경하면 변경된 값이 찍히면 성공!!





 

6. unity script reference


 

유니티에서 제공하는 유니티 스크립트 자료 입니다.

스크립트를 짜다 보면 참고할 때가 옵니다.~

http://docs.unity3d.com/kr/current/Manual/CreatingAndUsingScripts.html


 




 

7. 과제

복습하고 결과 화면을 스샷을 찍어 글을 올려 주세요.


 

Posted by 프리랜서 디자이너