'포트폴리오 영상' 카테고리의 다른 글
엔터 더 건전(Enter The Gungeon) - 모작 (0) | 2017.12.22 |
---|
엔터 더 건전(Enter The Gungeon) - 모작 (0) | 2017.12.22 |
---|
메모리 풀(memory pool)
volatile 키워드 (0) | 2019.11.20 |
---|---|
스택(Stack), 힙(Heap), 데이터(Data) - 메모리 영역 (0) | 2019.11.20 |
ADT(Abstract Data Type) 추상 자료형 (0) | 2017.12.29 |
가비지 컬렉션(Garbage Collection) , 가비지 컬렉터(Garbage Collector) 란? (0) | 2017.12.20 |
인터프리터와 컴파일러 (0) | 2017.12.04 |
가비지 컬렉션(Garbage Collection)
가비지 컬렉터(Garbage Collector)
코딩 작업시 가비지 컬렉션 최적화 방법.
1. 필요 이상 객체를 늘리지 않는다.
2. 객체 생성하고 삭제 하는 작업 보단 재활용 하는 수단을 찾기.
3. 복잡한 참조관계 줄이기. 관계가 복잡하면 가비지 컬렉션 이후 메모리가 살아 있을 수 있는 문제 발생.
volatile 키워드 (0) | 2019.11.20 |
---|---|
스택(Stack), 힙(Heap), 데이터(Data) - 메모리 영역 (0) | 2019.11.20 |
ADT(Abstract Data Type) 추상 자료형 (0) | 2017.12.29 |
메모리 풀(Memory Pool) - 스택(Stack) / 힙(Heap) (0) | 2017.12.20 |
인터프리터와 컴파일러 (0) | 2017.12.04 |
재귀(Recursive) 함수
재귀 결과 값)
C언어 volatile 의 의미/뜻 (0) | 2019.10.28 |
---|---|
C / C++ 변수 선언 차이점. (0) | 2018.10.17 |
C/C++ 서식문자(conversion specifier) 종류 - %d %u %o %x %f %e %g %c %s %p (0) | 2017.12.08 |
C/C++ escape sequence(이스케이프 시퀀스) 종류 - \b \f \n \r \t \v (0) | 2017.12.08 |
이진탐색(Binary Search)
#include <stdio.h> #include <iostream> int L_Search(int arr[], int length, int target) // 순차 알고리즘 { int first = 0; // 시작 인덱스 int last = length - 1; // 마지막 인덱스 int middle; // 중앙 인덱스 while (first <= last) { middle = (first + last) / 2; // 중앙값 찾기 if (target == arr[middle]) // 중앙값이 타겟과 같다는 조건 { printf("검색 완료 값 : %d \n", middle); return middle; // 검색된 값 리턴 } else { if (target < arr[middle]) { last = middle - 1; } else { first = middle + 1; } } } printf("검색 실패 \n"); return -1; } void main() { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 10 }; L_Search(arr, sizeof(arr) / sizeof(int), 3); L_Search(arr, sizeof(arr) / sizeof(int), 9); system("pause"); } |
결과값)
알고리즘(algorithm) 순차 탐색(Linear Search) (0) | 2017.12.11 |
---|---|
알고리즘(algorithm) 이란? (0) | 2017.12.08 |
자료구조(Data structure) 란? (0) | 2017.12.08 |
Humanoid 타입 애니메이션
준비물 : 휴머노이드 타입 모델 준비
준비가 안되셨다면! Asset Store 에서 unity-chan 을 검색하여 무료 모델을 다운 받을 수 있습니다.!
Asset Store는 유니티 메뉴 바에서 Window -> Asset Store 클릭 하시면 됩니다.
일단 처음 Create Empty 하나 만드신 후 Player로 이름을 변경 하세요.
그리고 스토어에서 받은 모델을 드래그하여 하위 오브젝트로 등록합니다.
굳이 하위 오브젝트로 등록 하지 않으셔도 됩니다.! ㅎㅎㅎ.. 그냥 저 구별 편할려구요..
모델에 기본적으로 Animator 컴포넌트가 존재하지만 저를 따라 Create Empty 생성하셨다면 Add Component 를 통해 Animator 컴포넌트를 추가해 주세요.
또한 캐릭터 컨트롤을 위한 Character Controller 컴포넌트도 추가해 주세요!
현재 저의 컴포넌트 설정 상태 입니다.
그다음 플레이어 컨트롤을 위한 스크립트 하나 추가해 줍니다. 이름은 Mecanim Control 이라고 하였습니다.
그리고 해당 스크립트는 Player 오브젝트에 추가해 줍니다.
그리고 애니메이션을 사용하기 위한 Animation Controller 를 만들어 줍니다.
오른쪽 클릭후 Create에서 하위 쪽에 Animation Controller 이 존재합니다.
만든후 이름을 MecanimPlayer 로 네이밍 해 주신 후 더블 클릭하여 들어갑니다.
간혹 창이 작아 전부 안보이시는 분이 있으실 텐데 창을 드래그하여 빼내신 후 늘리 시면 보입니다.
들어가면 왼쪽 상단에 Parameters 가 있는데 클릭하여 들어가신 후 아래 그림같이 설정해 줍니다.
Speed -> Float
Slide -> Trigger
IsRun -> Bool
Jump -> Trigger
각각 맞는 형식 으로 생성
여기 까지 설정 해 주신 후 아까 만든 MecanimControl 스크립트 먼저 작성하도록 하겠습니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MecanimControl : MonoBehaviour {
public float runSpeed = 6.0f; // 뛰는 속도 public float rotationSpeed = 360.0f; // 캐릭터 회전 속도 bool IsRun = false; // 뛰기와 걷기 구별하기 위한 불값 CharacterController pcController; //캐릭터 컨트롤러 컴포넌트를 사용하기 위한 변수 선언 Vector3 direction; // 방향 값 Animator animator; // 애니메이터 컴포넌트를 사용하기 위한 변수 선언 void Start () { pcController = GetComponent<CharacterController>(); // 캐릭터 컨트롤러 컴포넌트 가져오기 //animator = GetComponentInChildren<Animator>(); // 하위 에니메이터 사용 animator = GetComponent<Animator>(); // 애니메이터 컴포넌트 가져오기 } void Update () { CharacterControl_Slerp(); // 움직임을 정리한 함수 animator.SetFloat("Speed", pcController.velocity.magnitude); //컨트롤러의 속도 값을 애니메이터의 Speed와 연결 animator.SetBool("IsRun", IsRun); // 걷기, 뛰기 체크값을 애니메이터 IsRun과 연결 if(Input.GetMouseButtonDown(0)) { animator.SetTrigger("Slide"); // Slide 애니메이션을 애니메이터 Trigger와 연결 } if(Input.GetKeyDown(KeyCode.Space)) { animator.SetTrigger("Jump"); // 애니메이터 Jump 애니메이션 연결 } if(Input.GetKey(KeyCode.LeftShift)) { IsRun = true; runSpeed = 6.0f; } else { IsRun = false; runSpeed = 3.0f; }
} private void CharacterControl_Slerp() // 캐릭터 움직임 메소드 정의 { direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); if(direction.sqrMagnitude > 0.01f) { Vector3 forward = Vector3.Slerp(transform.forward, direction, rotationSpeed * Time.deltaTime / Vector3.Angle(transform.forward, direction)); transform.LookAt(transform.position + forward); } pcController.Move(direction * runSpeed * Time.deltaTime); } } |
이제 다시 MecanimPlayer Animation 창으로 오신 후 아래 그림 같이 생성 하도록 하겠습니다.
네모난 창은 오른쪽 클릭 -> Create State -> Empty 클릭 하시면 만들 수 있습니다.
화살표는 사각형 클릭 -> Make Transition 클릭 하시면 화살 표가 마우스 따라 생성 되는데 해당 화살표를 연결하고 싶은 사각형에 클릭하면 연결이 됩니다.
그리고 사각형 이름에 맞는 모션을 설정 해야겠죠?
사각형 클릭하시면 Inspector 창에 Motion 항목이 있는데 거기서 맞는 애니메이션을 등록 하시면 됩니다.
각 모션 설정 후 이제 화살표를 클릭하세요 Idle -> Walk 화살표 입니다.
그럼 Inspector 창에 무언가 뜨는데 거기서 아래로 내리시면 Settings 의 Conditions 항목이 있습니다.
거기서 + 클릭 후 아래 그림과 같이 설정 해 주시면 됩니다.
아 그리고 Settings 위에 Has Exit Time 이라는 체크 항목이 있는데
이것은 체크가 되있는 상태이면 해당 애니메이션이 완전 끝난 후 다음 애니메이션으로 진입하게 하며
체크가 되어있지 않은 상태라면 애니메이션 진행중 중간에 진입할 수 있게 하는 항목 입니다.
Walk -> Idle 화살표 입니다.
잘 보시면 float 형 Speed 옆에 Greater 와 Less 를 설정해 주는 게 있는데 Greater 는 옆의 숫자 보다 이상일때의 조건이며 Less 는 옆의 숫자보다 이하 일때 의 조건을 말합니다.
나머지도 연결 해주시고!
위 사진 같이 Animator 의 Controller에 MecanimPlayer 을 드래그하여 연결해 줍니다.
그리고 이제 실행을 시키시면 완전 잘 돌아 갑니다.!!!!
혹시 필력이 딸려 이해가 힘드시다면 댓글 부탁드립니다.
ㅜㅜ
유니티(Unity) - 네트워크 동기화 종류 (0) | 2020.08.15 |
---|---|
유니티(unity) 에서 간단한 Json(제이슨) 사용법 (1) | 2017.12.28 |
유니티(unity) 간단한 text 글씨 띄우기 (0) | 2017.12.11 |
유니티(unity) 현재 클래스에 특정 다른 C#스크립트 클래스 가져오기 (0) | 2017.12.11 |
유니티(unity) 간단한 코루틴(Coroutine) 사용법 (0) | 2017.12.11 |
간단한 text 글씨 띄우기
글자를 띄우기 위해서는
void OnGUI()
{
}
메소드가 필요하며 이안에서 글자가 출력이 됩니다.
private void OnGUI() { GUILayout.Label("GUILayout.Label 을 이용한 출력"); GUI.Box(new Rect(0, 20, 300, 300), "GUI.Box 를 이용한 백그라운드 텍스트 박스"); GUI.TextArea( new Rect(10, 40, 200, 20), "GUI.TextArea을 이용한 출력"); if (GUI.Button(new Rect(10, 70, 200, 20), "GUI.Button을 이용한 출력")) { } if (GUI.RepeatButton( // 누르고 있는 동안 true를 계속 반환하는 버튼 new Rect(10, 100, 50, 20), "<<")) { // : 좌 회전 } // 화면 사이즈 크기를 받아 위치 설정하기 // Screen 을 이용하여 지정 가능 GUI.TextArea(new Rect(Screen.width*0.01f, Screen.height / 2, 200, 20), "Screen을 이용한 위치설정"); } |
적용 화면)
유니티(unity) 에서 간단한 Json(제이슨) 사용법 (1) | 2017.12.28 |
---|---|
유니티(unity) 애니메이션(animation) 움직이기 Animation Type(Humanoid)휴머노이드 (1) | 2017.12.13 |
유니티(unity) 현재 클래스에 특정 다른 C#스크립트 클래스 가져오기 (0) | 2017.12.11 |
유니티(unity) 간단한 코루틴(Coroutine) 사용법 (0) | 2017.12.11 |
유니티(unity) Invoke, InvokeRepeating 사용법 - 지연호출 예약호출 일정시간호출 (0) | 2017.12.08 |
B라는 클래스가 A라는 클래스에 있는 변수 값들은 받아 조건을 새워야 하는상황이 올때가 있다.
그럼 C/C++ 처럼 B에 A를 선언 하여 사용 할 수 없을까?
있다!
사용예시)
public class SwordControl : MonoBehaviour {
PlayerControl player; void Start () { player = FindObjectOfType<PlayerControl>(); } }
|
코드를 보면 PlayerControl 클래스를 SwordControl 클래스에 선언하여 사용한 방식이다.
PlayerControl 의 변수를 선언하고 선언한 변수에 FindObjectOfType<연결할클래스이름>(); 을 해주면 끝이다.
이 후 사용법언
player. 변수명 뒤 (.)을 넣어 사용하면 되겠다!
물론 public 선언된 변수만 사용이 가능하겠다!
유니티(unity) 애니메이션(animation) 움직이기 Animation Type(Humanoid)휴머노이드 (1) | 2017.12.13 |
---|---|
유니티(unity) 간단한 text 글씨 띄우기 (0) | 2017.12.11 |
유니티(unity) 간단한 코루틴(Coroutine) 사용법 (0) | 2017.12.11 |
유니티(unity) Invoke, InvokeRepeating 사용법 - 지연호출 예약호출 일정시간호출 (0) | 2017.12.08 |
유니티(unity) Mathf.Clamp(클램프) 사용법 (0) | 2017.12.08 |
순차 탐색(Linear Search)
#include <stdio.h> #include <iostream> int L_Search(int arr[], int length, int target) // 순차 알고리즘 { for (int i = 0; i < length; i++) { if (arr[i] == target) // 대상 찾기 { printf("저장할 타겟 : %d \n", i); return i; } } printf("탐색에 실패함 \n"); return 0; // 못찾을시 -1 리턴 } void main() { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int SearchIndex; SearchIndex = L_Search(arr, sizeof(arr) / sizeof(int), 4); SearchIndex = L_Search(arr, sizeof(arr) / sizeof(int), 11); system("pause");
|
알고리즘(algorithm) 이진탐색(Binary Search) (0) | 2017.12.15 |
---|---|
알고리즘(algorithm) 이란? (0) | 2017.12.08 |
자료구조(Data structure) 란? (0) | 2017.12.08 |
간단한 코루틴(Coroutine) 사용법
void Start () { StartCoroutine(spawnWaves()); // spawnWaves라는 코루틴 함수 시작 startWait = 3.0f; EnemyCount = 10; spawnWait = 2.0f; } IEnumerator spawnWaves() { yield return new WaitForSeconds(startWait); // yield return 구문을 이용한 시간대기 함수(WaitForSeconds) // 이러면 3초후 시작 이라는 의미 while (true) { enemememy = EnemyStartPoint[UnityEngine.Random.Range(0, EnemyStartPoint.Length)]; Instantiate(Enemy, enemememy.transform.position, enemememy.transform.rotation); yield return new WaitForSeconds(spawnWait); // 2초마다 프리팹으로 만들어진 적들 소환 } } |
유니티(unity) 간단한 text 글씨 띄우기 (0) | 2017.12.11 |
---|---|
유니티(unity) 현재 클래스에 특정 다른 C#스크립트 클래스 가져오기 (0) | 2017.12.11 |
유니티(unity) Invoke, InvokeRepeating 사용법 - 지연호출 예약호출 일정시간호출 (0) | 2017.12.08 |
유니티(unity) Mathf.Clamp(클램프) 사용법 (0) | 2017.12.08 |
유니티(unity) prefab(프리팹) 만들기 (0) | 2017.12.07 |