일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- list
- Unity
- StartActivityForResult
- 바이너리세마포
- map
- 포톤
- 세마포
- unorderedset
- registerForActivityResult
- unorderedmap
- 뮤텍스
- dependencyResilutionManagement
- 유니티
- 스핀락
- photon
- Vector
- NotFoundException: String resource ID #0x0
- C++
- SpinLock
- 게임개발
- 안드로이드스튜디오
- Java
- mutex
- unityAR
- 유니티슈팅게임
- ARface
- 광유다
- 동기화
- 지크슈
- semaphore
- Today
- Total
와와
절대강좌유니티 본문
p54 ~ p117
1. matarial 설정
2. 스내핑: V키
3. light
1) Directional Light ( default )
: 전체화면에 균일한 빛 ( 태양 ), 가장 저렴
2) Point Light
: 전구, 360˚로 퍼짐
3) Spot Light
: 콘 모양, 가장 비쌈
4) Area Light
: 사각형 형태, 한쪽 면에서 빛을 발하는 조명, 실시간X, 주로 간접 조명으로 사용
4. 하늘 표현
1) Skybox
: 6sided, Cubemap, Panoramic, Procedural(텍스처X, 직접설정)
2) Skydome
p118 ~ p 168
1. 단축키
콘솔: ctrl + shift + c
실행: ctrl + p
씬뷰 가상카메라 팔로우: ctrl + F
2. GetAxisRaw()
GetAxis() : -1.0f ~ +1.0f 사이의 값 반환
GetAxisRaw() : -1.0f, 0, +1.0f 세 가지 중 하나의 값 반환
3. GetComponent<>()
GetComponent<추출할 클래스>();
4.Translate()
Void Translate( Vector3 direction, Space.World/ Space.Self ( 기본 ) )
5. Time.deltaTime
Time.deltaTime = ( 현재 프레임 시작 시간 ) - ( 이전 프레임 시작 시간 )
transform.Translate(Vector3.forward * 10);
: 프레임마다 10유닛씩 이동
transform.Translate(Vector3.forward * Time.deltaTime * 10);
: 매 초 10유닛씩 이동
6. normalized
벡터크기 정규화 ( 방향벡터에 사용 )
7. 애니메이션
레거시 애니메이션: Animation 컴포넌트
메카님 애니메이션: Animator 컴포넌트
Animation.Play("애니메이션 클립명") // 애니메이션 실행
8. 애니메이션 블랜딩
애니메이션 변경을 부드럽게 해줌 (CrossFade)
PlayerCtrl.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerCtrl : MonoBehaviour
{
// 컴포넌트를 캐시 처리할 변수
private Transform tr;
// Animation 컴포넌트를 저장할 변수
private Animation anim;
// 이동 속도 변수 ( public으로 선언되어 인스펙터 뷰에 노출됨 )
public float moveSpeed = 10.0f;
// 회전 속도 변수
public float turnSpeed = 80.0f;
// Start is called before the first frame update
void Start()
{
// Transform 컴포넌트를 추출해 변수에 대입
tr = GetComponent<Transform>(); // 함수명 < 형식(추출할클래스) > ( 매개변수 )
anim = GetComponent<Animation>();
// 애니메이션 실행
anim.Play("Idle");
}
// Update is called once per frame
void Update()
{
float h = Input.GetAxis("Horizontal"); //-1.0f ~ 0.0f ~ +1.0f
float v = Input.GetAxis("Vertical"); //-1.0f ~ 0.0f ~ +1.0f
float r = Input.GetAxis("Mouse X"); // 마우스 왼쪽: 음수 , 오른쪽: 양수 반환
//Debug.Log("h=" + h);
//Debug.Log("v=" + v);
//전후좌우 이동 방향 벡터 계산
Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h);
//Trasnsform 컴포넌트의 위치를 변경
// transform.position += new Vector3(0,0,1);
//정규화 벡터를 사용한 코드
//transform.position += Vector3.forward * 1; // ( 전진방향 ) * ( 속력 )
// Translate 함수를 사용한 이동 로직
tr.Translate(moveDir.normalized * Time.deltaTime * moveSpeed ); // ( 방향 ) * deltaTime * {전진/후진} * ( 속도 )
// Vector3.up 축을 기준으로 turnSpeed만큼의 속도로 회전
tr.Rotate(Vector3.up * turnSpeed * Time.deltaTime * r); // (회전좌표축) * (회전속도) * Time.deltaTime * (변위입력값)
// 주인공 캐릭터의 애니메이션 설정
PlayerAnim(h, v);
}
void PlayerAnim(float h, float v)
{
// 키보드 입력값에 따라 동작할 애니메이션 수행
if (v >= 0.1f)
{
anim.CrossFade("RunF", 0.25f); // 전진 애니메이션 실행
}
else if (v <= -0.1f)
{
anim.CrossFade("RunB", 0.25f); // 전진 애니메이션 실행
}
else if (h >= 0.1f)
{
anim.CrossFade("RunR", 0.25f); // 전진 애니메이션 실행
}
else if (h <= -0.1f)
{
anim.CrossFade("RunL", 0.25f); // 전진 애니메이션 실행
}
else
{
anim.CrossFade("Idle", 0.25f);
}
}
}
p169 ~ p198
1. 무기 장착
pelvis
2. 그림자
실시간 그림자는 부하가 큼
실시간 그림자off -> 새로 오브젝트 추가 -> 캐릭터 오브젝트의 차일드화 -> Shader 설정 ( Mobile/Paricle/Multiply )
3. LOD ( Level Of Detail )
화면을 렌더링하는 카메라로부터 멀리 떨어질수록 낮은 폴리곤으로 변경해 렌더링 부하를 줄여주는 기법
LOD Group 컴포넌트로 각 LOD 영역에 메시 연결
4. Follow Camera 로직
카메라 위치 = 타깃의 위치 + ( 타깃의 뒤쪽 방향 * 떨어질 거리 ) + ( Y축 방향 * 높이 )
FollowCam.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowCam : MonoBehaviour
{
//따라가야 할 대상을 연결할 변수
public Transform targetTr;
//Main Camera 자신의 Transform 컴포넌트
private Transform camTr;
//따라갈 대상으로부터 떨어질 거리
[Range(2.0f, 20.0f)]
public float distance = 10.0f;
//Y축으로 이동할 높이
[Range(0.0f, 10.0f)]
public float height = 2.0f;
// Start is called before the first frame update
void Start()
{
//Main Camera 자신의 Transform 컴포넌트를 추출
camTr = GetComponent<Transform>();
}
// Update is called once per frame
void LateUpdate()
{
//추적해야 할 대상의 뒤쪽으로 distance만큼 이동
//높이를 height만큼 이동
camTr.position = targetTr.position
+ (-targetTr.forward * distance) + (Vector3.up * height);
//Camera를 피벗 좌표를 향해 회전
camTr.LookAt(targetTr.position);
}
}
p199 ~ p250
'개발 > Unity 3D' 카테고리의 다른 글
Unity AR 얼굴 인식 ( AR Face Manager ) (0) | 2022.07.22 |
---|---|
Unity AR 개발환경 & 평면에 오브젝트 생성( 안드로이드 ) (0) | 2022.07.21 |
Unity VR 개발환경 ( 오큘러스퀘스트2/ XR interaction Toolkit ) (0) | 2022.07.21 |
[절대강좌유니티] 13. 오클루전 컬링 (0) | 2022.02.08 |
[절대강좌유니티] 10. 네비게이션 고급 기법 (0) | 2022.02.05 |