Information/Unity3D 2015. 11. 17. 16:30

#4. 심플 게임 - 블럭에 부딪히자

*컨셉 : 캐릭터가 점프를 해서 반대편의 붉은 블럭에 부딪히기

마우스 왼쪽 버튼을 누르고 있으면 수치가 증가하며 값이 높을 수로 멀리 뛸 수 있다. 



*스크립트 : 로드 씬 

gameScene 라는 이름을 가진 씬을 불러온다. 

Application.LoadLevel("gameScene");


*스크립트 : 난수 생성

min, max 사이에서 임의의 값을 생성한다. 

Random.Range(GOAL_MIN, GOAL_MAX);


*스크립트 : 충돌 판정

다른 게임 오브젝트와 충돌하는 동안 계속 호출된다. 

    void OnCollisionStay(Collision other)

    {

        //this.is_collided = true;

    }

Information/Unity3D 2015. 11. 16. 18:08

#3. 기초 스크립트 - 리지드바디 다루기

*리지드바디는 오브젝트에 물리적인 효과를 부여하는 것

*중력, 소재, 질량 등을 적용하여 오브젝트의 물리현상을 구현함


*오브젝트의 Hierchy에서 Component-Physics-Rigdbody 추가

*오브젝트의 Hierchy에서 Component-Physics-Sphere Collider 추가

콜라이더는 다른 물체와 부딪혔는지 판정할 때 이용되는 영역


* Freeze Position, Freeze Rotation 을 이용하면 x,y,z 축을 제한할 수 있다.  


*소재설정

Assets-Create-Physic Material 소재 생성

오브젝트의 콜라이더의 메테리얼을 생성한것으로 변경

인스펙터에서 값을 변경

ex) Bounciness 값을 1로 설정하면 가장 잘튐

    Bounce Combine 을 최대값으로 설정(탄성량 최대)



*스크립트 : 힘과 중력제어


지정한 방향으로 지정한 양의 힘을 가함

this.transform.rigidbody.addForce(Vector3.forward*300*Time.deltaTime)


중력 제로

Physics.gravity = Vector3.zero 

중력방향을 위로

Physics.gravity = Vector3.up

중력방향을 아래로

Physics.gravity = Vector3.down 



Information/Unity3D 2015. 11. 16. 17:32

#2. 기초 스크립트 - 오브젝트 다루기

*스크립트 : 위치, 회전, 크기

씬 기준

Vector3형 값 대입


위치 

this.tranform.position = new Vector3(0.f, 0.f, 0.1f)


회전

this.tranform.rotation = Quaternion.Euler(new Vector3(0.f, 0.f, 0.1f))


크기

this.tranform.localScale = new Vector3(0.f, 0.f, 0.1f)


this는 스크립트를 사용하고 있는 오브젝트를 의미


*스크립트 : 상대적 위치 이동

캐릭터 기준

Vector3형 인수로 전달

this.tranform.Translate(new Vector3(0.f, 0.f, 3.f * Time.deltaTime))


미리준비된 Vector3의 값


 Vector3.forward

 앞

 Vector3(0.0f, 0.0f, 1.0f)

 Vector3.back

 뒤

 Vector3(0.0f, 0.0f, -1.0f)

 Vector3.left

 왼쪽

 Vector3(-1.0f, 0.0f, 0.0f)

 Vector3.right

 오른쪽

 Vector3(1.0f, 0.0f, 0.0f)

 Vector3.up

 위쪽

 Vector3(0.0f, 1.0f, 0.0f)

 Vector3.down

 아래쪽

 Vector3(0.0f,-1.0f, 0.0f)

 Vector3.zero

 모두 0

 Vector3(0.0f, 0.0f, 0.0f)


// 같은 의미

this.tranform.Translate(Vector3(0.0f, 0.0f, 3.0f *Time.deltaTime))

this.tranform.Translate(Vector3.forward * 3.0f * Time.deltaTime))


** Time.deltaTime 을 사용하는 이유
사용하는 기기의 성능에 따라 게임의 갱신 빈도는 달라진다. 
이동이나 회전 같은 경우는 기기의 성능에 영향을 받기 때문에 
Time.deltaTime 을 사용하게 되면 기기의 갱신시간을 알 수 있기 때문에 
어느 기기에서든 동일한 게임의 실행이 가능하다. 

*스크립트 : 부모-자식 관계
등록
GameObject go = GameObject.Find("Cube") as GameObject
go.transform.parent = this.transform
해제
go.transform.parent = null

GameObject 의 Find() 메서드를 이용해 찾고 싶은 오브젝트 탐색
as GameObject 는 찾는 오브젝트의 종류를 C#에 알려줌


*스크립트 : 다른 스크립트의 메서드 불러오기


GameObject go = GameObject.Find("Cube") as GameObject
go.GetComponent<ScriptName>().ScirptMethod();

public인 멤버변수와 메서드를 이런방식으로 참조 가능



Information/Unity3D 2015. 11. 16. 17:02

#1. 유니티 기초 및 기본 스크립트

*클릭 앤 드래그 방식


*유니티 좌표계 : 왼손좌표계

게임 화면의 왼쪽 하단이 (0,0,0)

X축 좌우

Y축 상하

Z축 거리 -일수록 화면에서 멀다. 


*스크립트 기반으로  C#과 JavaScript를 사용한다. 

나는 C# 사용. C++이랑 개념이 비슷하지만 사용법이 살짝 다름. 

모르는 부분이 생길때 따로 공부할 것.


*스크립트 : void Start(){}

스크립트가 동작하기 시작할 때 한번만 호출


*스크립트 : void Update(){}

씬이 동작하는 동안 반복해서 호출


*스크립트 : Debug.Log("Hello Unity")

디버그 로그


*스크립트 : Input.GetKey(KeyCode.입력키) 

키보드 입력

Input.GetKey() : 키가 계속 눌린 상태

Input.GetKeyDown() : 키가 눌린 순간

Input.GetKeyUp() : 키에서 손이 떨어진 순간

Input.anyKeyDown() : 임의의 키가 눌린 순간


*스크립트 : Input.GetMouseButton(숫자)

마우스 입력

0 : 왼쪽버튼

1 : 오른쪽버튼

2 : 휠버튼

Input.GetMouseButton : 마우스 버튼이 계속 눌린 상태

Input.GetMouseButtonDown : 마우스 버튼이 눌린 순간

Input.GetMouseButtonUp : 마우스 버튼에서 손이 떨어진 순간


*스크립트 : Input.mousePosition

마우스 포인터의 위치