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 를 눌러서 고정시킬 수 있습니다. 이 고정이 필요한 이유가
각각 해상도가 다 다른데, 그 해상도에 맞춰서 이미지가 나오게끔 하기 위함입니다.
* 게임 만들기 및 유니티 기초
게임을 만들때는 무턱대고 만들기 보단,
계획을 세워서 만드는게 좋습니다.
변수를 만들때
public float jumpPower; <- public을 붙이면 초기화 할 필요가 없고 실시간으로 값을 조절 가능합니다.
if(Input.GetButtonDown("Jump") && !isJump) -> !는 반대연산자
&&는 엔드연산자 isjump가 false가 되야 트루
위치를 이동시키거나 돌릴때 등등, 델타타임은 꼭 써줘야합니다.
(컴퓨터의 성능별로 실력이나 게임성능이 차이나면 안되기 때문입니다.)
오버로드 : 이름은 같지만 매개변수가 다른 함수를 호출
에셋이 필요할때 (예: 캐릭터, 배경, 적, 음악, 효과음등등)
위에 윈도우즈 -> 에셋스토어 가면 게임에 필요한걸 다운받을 수 있음. (유료,무료)
https://assetstore.unity.com/ko-KR
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 |