Unity

Unity(2) 기초2

사회적가치누리 2024. 11. 16. 16:00

3D에서 진행했습니다.

 

* 키보드 혹은 마우스로 이동시키기

키입력에 대해서 알아봅시다.

 

void Update() 에

Input을 사용합니다.

 

Input.GetKey -> 키보드 버튼 입력을 받으면 true

 

예시) 

Input.anyKeyDown -> 아무키나 눌렀을때
Input.GetKeyDown -> 어떤 키를 눌렀을때 
Input.GetKeyUp -> 키보드 버튼 입력을 땟을때

KeyCode.Return -> 엔터키
KeyCode.LeftArrow -> 왼쪽 방향키
KeyCode.RightArrow -> 오른쪽 방향키
그외 키 다있음 q,w,e,r 등등..

 

GetMouse -> 마우스 버튼 입력을 받으면 true

GetMouseButton -> 누르고 있을때 (예시 : 록맨 기모으기)
GetMouseButtonUp -> 마우스를 눌렀다 땟을때
GetMouseButtonDown -> 마우스를 눌렀을때

이 함수들은 매게변수를 숫자로 받는다.

 

GetButton("Jump") -> 여기서 "Jump"는 유니티에서 자동으로 스페이스바로 설정되있음 Edit -> Project Settings -> Input Manager에 가보면 확인 가능

 

 

 

Input Manager 에서내가 원하는 키를 설정해서 입력받을 수 있습니다.

예를 들어 점프를 SPACE바가 아닌 Enter,Ctrl 로 설정이 가능하다는 소리입니다.

 

GetAxis -> 수평,수직 버튼 입력받으면 float 예시) 0.000012 0.000030 ... 1  마리오 추진력을 얻는 걸 생각하시면 됩니다.

GetAxisRaw -> 위와 다르게 무조건 1 혹은 -1만 반환해줌

 

* 오브젝트 이동

 

void Start()에 입력

 

어떤 물체를 만들때 무조건 X,Y,Z,축(위치) 는 필수적으로 따라갑니다.

 

Transform -> 오브젝트 형태에 대한 기본 컴포넌트
벡터(Vector) : 방향과 그에 대한 크기 값
Vector3 -> x,y,z 3D게임 3차원
Vector2 -> x,y 2D게임 2차원

 

스칼라 : 순수한값 예시) int number = 4;

 

Vector3 vec = new Vector3(0, 0, 0); -> 초기화 선언
transform.Translate(vec);

Vector3 vec = new Vector3(0, 0.1f, 0); -> y축을 0.1씩 계속 증가 (로켓마냥 쭉 올라감)

Input.GetAxis("Horizontal"),Input.GetAxis("Vertical"), 0); -> 방향키 대로 움직임
transform.Translate(vec); 

 

* 목표 지점으로 이동시키기

 

MoveTowards : 등속이동


매개변수는 (현재위치,목표위치,속도)로 구성

마지막 매개변수에 비례하여 속도 증가

 

SmoothDamp -> 부드러운 감속 이동

 

ref : 참조 접근 -> 실시간으로 바뀌는 값 적용 가능

Lerp : 선형보간,SmoothDamp 보다 감속시간이 길다.
이 Lerp는 마지막 매개변수를 줄일수록 느리게 이동한다.

SLerp : 구면 선형 보간 , 호를 그리며 이동
트리스타나 w 점프처럼 이동함.

 

* 델타타임

 

Translate : 백터에 곱하기
transform.Translate(Vec * Time.deltaTime);

Vector 함수 : 시간 매개변수에 곱하기
Vector.Lerp(Vec1, Vec2, T * Time.deltaTime);

deltaTime 값은 프레임이 적으면 크고, 프레임이 많으면 작다

 

* 실제와 같은 물체를 만들기

 

유니티는 컴포넌트 기반 게임 엔진입니다.

 

Rigidbody를 이용하여 중력을 적용시키는법

아무 3D오브젝트 만든 후 Add Component 누르고 Rigidbody를 추가합니다.

3D면 Rigidbody 추가 2D면 Rigidbody2D 추가

 

Rigidbody를 가지게되면 중력의 영향을 받는다.

 

Collider : 물리 효과를 받기 위한 컴포넌트

Rigidbody 설정
Mass -> 무게  %무게가 무거울수록 빨리 내려가는게 아닌 서로 충돌했을때 누가더 단단한가 그차이
Use Gravity -> 말 그대로 중력을 사용할건지 안할건지 체크하는것 만약 체크를 안하면 그냥 둥둥 떠있음
Is Kinematic -> 외부 물리 무시 이걸 체크할시 물건과 물건이 누가(엄청 무거운사람)충돌할때도 그냥 가만히있음

 

Material : 오브젝트의 표면 재질을 결정하는 컴포넌트
메테리얼 설정하는법

 

 

Albedo -> 색깔 설정 옆에 작은 네모상자에 사진을 드래그 해서 넣으면 사진이 들어갑니다. 이걸 Texture 라고 합니다.

Metallic -> 금속재질 값
Smoothness -> 빛 반사 수치

Tiling -> 텍스쳐 반복 타일 개수라는 뜻
Emission -> 텍스쳐 발광(밝기)조절

메테리얼을 만들고 끌어다가 맨밑에 추가해서 넣으면 설정 가능.

 

Physic Material : 탄성과 마찰을 다루는 물리적인 재질 (예:농구공 야구공 등등..)

 

Physic Material를 추가하는 방법

 

Bounciness : 탄성력,높을수록 많이 튀어오른다.
Bounciness Combine : 다음 탄성을 계산하는 방식
Friction : 마찰력 , 낮을수록 많이 미끄러짐
Friction Combine : 다음 마찰력을 계산하는 방식

만화적인 연출 할려면
Bounciness 합산은 최대
Friction 합산은 최소로 

 

 

* 힘을 이용하여 물체 움직여보기

 

코드 흐름은 선언 -> 초기화 -> 호출 이 순서대로 진행됩니다.

 

예) Rigidbody를 사용시

 

1. Rigidbody rigid; -> 선언 맨위에 작성

public class MyBall : MonoBehaviour
{
    Rigidbody rigid;
}


2. rigid = GetComponent<Rigidbody>(); c# 기초에서 배운거처럼 <>안에 자료형을 써줘야 오류가 안납니다.

void Start()
{
    rigid = GetComponent<Rigidbody>();
}

 

2d에 3d넣어도 오류 3d에 2d넣어도 오류가 납니다. 이렇게 하면 초기화가 완료됩니다.

 

velocity : 현재 이동 속도

 

3. rigid.velocity = Vector3.right; -> 시작하자마자 오른쪽으로 가라.

rigid.velocity = new Vector3(2, 4, -2); -> 정확한 x,y,z 를설정해 가라.

만약 start 말고 update 에 사용하면
계속해서 올라갑니다.

RigidBody 관련 코드는 FixedUpdate 에서 작성합니다.

 

AddForce(Vec) : Vec의 방향과 크기로 힘을 줌.
ForceMode : 힘을 주는 방식

 

rigid.AddForce(Vector3.up * 50, ForceMode.Impulse); -> 위로 50만큼 밀어라
이 Force는 Rigidbody의 mass (무게) 값의 영향을 받는다.

 

void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");
        Vector3 vec = new Vector3(h, 0, v);

        rigid.AddForce(vec, ForceMode.Impulse); 
        rigid.AddTorque(Vector3.down);
    }

 

 

화전력

AddTorque(Vec) : Vec방향을 축으로 회전력이 생김.

rigid.AddTorque(Vector3.up); -> 빙글빙글 돔.
Vec를 축으로 삼기 때문에 이동 방향에 주의

 

*  물리 충돌 이벤트

 

오브젝트의 재질 접근은 MeshRenderer를 통해서 가능

CollisionEnter : 물리적 충돌이 시작할 때 호출되는 함수
CollisionExit : 물리적 충돌이 끝났을 때 호출되는 함수
CollisionStay : 물리적 충돌이 쭉 일어날때 호출되는 함수

Color : 기본 색상 클래스 , Color32 : 255 색상 클래스

mat.color = new Color(0, 0, 0); -> 0,0,0은 검정색 1,1,1 하얀색

Collision : 충돌 정보 클래스

 

재질 투명하게 보이게 하는법

Rendering Mode 를 Transparent 로 변경하고
색깔 알파값을 낮추면 투명하게 바꿀 수 있습니다.

 

TriggerStay : 콜라이더가 계속 충돌하고 있을 때 호출
그리고 트리거를 발동 시킬려면 콜라이더에 들어가서 Is Trigger를 체크 해야한다.

 

콜라이더 충돌로 발생하는 이벤트들
OnTriggerEnther
OnTriggerStay
OnTriggerExit

// 다른공과 부딪혔을때
private void OnCollisionEnter(Collision collision)
{
    if(collision.gameObject.name == "My Ball")
    mat.color = new Color(0, 0, 0);
}
// 다른공과 부딪히고 나올때
private void OnCollisionExit(Collision collision)
{
    if (collision.gameObject.name == "My Ball")
        mat.color = new Color(1, 1, 1);
}

 

 

*  게임 인터페이스

 

스크린 : 게임이 표시되는 화면, 해상도로 크기 결정.

폰트는 꼭 라이센스 확인해야합니다.

 

이미지 파일을 Sprite로 설정해야 UI 적용 가능.
-> 이미지를 보통 프로젝트에 끌어오면 디폴트로 적용되있는데
이 이미지타입을 Sprite (2D and UI)로 설정하면 사용가능

 

 

 

UI는 Hierarcy의 순서에 따라 위 아래 결정.
포토샵 레이어 생각하면됨

 

Button -> 클릭 이벤트를 가지고 있는 반응형 UI.

버튼 색깔 설정
Highlighted Color -> 갔다댔을때 색깔 설정
Pressed Color -> 눌렀을때 색깔 설정

 


OnClick() : 버튼 클릭 시 호출되는 이벤트 함수


앵커 - 파란점 : 컴포넌트에서 기준점.

shift + ctrl 를 눌러서 고정시킬 수 있습니다. 이 고정이 필요한 이유가

각각 해상도가 다 다른데, 그 해상도에 맞춰서 이미지가 나오게끔 하기 위함입니다.

 

앵커 설정하기 클릭후 shift + ctrl를 누르면 해당위치에 고정시킬 수 있습니다.

 

* 게임 만들기 및 유니티 기초

 

게임을 만들때는 무턱대고 만들기 보단,

계획을 세워서 만드는게 좋습니다. 

 

변수를 만들때

public float jumpPower; <- public을 붙이면 초기화 할 필요가 없고 실시간으로 값을 조절 가능합니다.

 

if(Input.GetButtonDown("Jump") && !isJump) -> !는 반대연산자

&&는 엔드연산자 isjump가 false가 되야 트루

 

위치를 이동시키거나 돌릴때 등등, 델타타임은 꼭 써줘야합니다.

(컴퓨터의 성능별로 실력이나 게임성능이 차이나면 안되기 때문입니다.)

 

오버로드 : 이름은 같지만 매개변수가 다른 함수를 호출

에셋이 필요할때 (예: 캐릭터, 배경, 적, 음악, 효과음등등)
위에 윈도우즈 -> 에셋스토어 가면 게임에 필요한걸 다운받을 수 있음. (유료,무료)

 

 

https://assetstore.unity.com/ko-KR

 

Unity 에셋 스토어

게임 제작을 위한 베스트셀러 에셋을 만나 보세요. 다양한 2D/3D 모델, SDK, 템플릿, 툴로 구성된 유니티의 카탈로그를 활용하여 게임 개발의 속도를 높일 수 있습니다.

assetstore.unity.com

 

AudioSource : 사운드 재생 컴포넌트, AudioClip 필요

오디오를 넣을려고 적용할때
Play On Awake 체크 해제해야합니다.
왜냐하면 이것을 체크하면 실행하자마자 사운드를 재생한다기때문에
비활성화 구간에는 컴포넌트 함수가 실행되지 않을 수 있다.

 

Tag : 오브젝트를 구분하는 단순한 문자열

 

'Unity' 카테고리의 다른 글

Unity 2D 플랫포머  (0) 2024.11.23
Unity 기초 눌러담은 3D게임  (0) 2024.11.23
Unity(1) 기초  (0) 2024.11.07