Unity/스크립트 기본(17)
-
유니티 매니저
1. 게임 매니저(Game Manager) 게임의 전반적인 상태를 관리합니다. 예를 들어, 게임의 시작, 종료, 일시정지, 재시작 등의 상태를 제어하고, 게임 오버와 승리 조건을 체크합니다. using UnityEngine; public class GameManager : MonoBehaviour { public static GameManager instance; private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else if (instance != this) { Destroy(gameObject); } } public void StartGame() { // 게임 시작 로직 } pu..
2024.04.05 -
BoxCast
RaycastHit2D hit = Physics2D.BoxCast(transform.position, new Vector2(0.99f, 0.1f), 0f, Vector2.down, 0.5f, groundLayer); void OnDrawGizmos() { Gizmos.color=Color.red; Gizmos.DrawCube(transform.position-transform.up * 0.5f, new Vector2(0.99f, 0.1f)); } using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { Rigidbody2D rigid; SpriteRend..
2023.02.21 -
오브젝트 풀링
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PoolManager : MonoBehaviour { // 프리펩 보관 public GameObject[] prefabs; // 풀 담당하는 리스트 List[] pools; // List 변수이름 = new List() 형태로 선언 void Awake() { pools = new List[prefabs.Length]; for(int index = 0; index < pools.Length; index++){ pools[index] = new List(); } } public GameObject Get(int index) // void 대신 G..
2023.01.26 -
메모리 관리
가비지 컬렉션 비활성화을 비활성화한 후, 게임이 멈추거나 로딩되는 화면에서 한번씩 부르거나, 아래 코드처럼 일정주기 마다 한번씩 가비지 컬렉션 실행 if (Time.frameCount % 30 == 0) { System.GC.Collect(); }
2022.06.27 -
애니메이터
Animator anim; void Awake() { anim = GetComponent(); } void 특정함수(){ anim.SetBool("유니티 애니메이터 창에서 설정한 값", false); anim.SetInteger("유니티 애니메이터 창에서 설정한 값", (int)value); anim.SetTrigger("유니티 애니메이터 창에서 설정한 값"); }
2022.06.16 -
파일 불러오기
Assets/Resources 폴더가 있어야 함 //Load a text file (Assets/Resources/Text/textFile01.txt) TextAsset textFile = Resources.Load("Text/textFile01"); //Load text from a JSON file (Assets/Resources/Text/jsonFile01.json) TextAsset jsonTextFile = Resources.Load("Text/jsonFile01"); //Then use JsonUtility.FromJson() to deserialize jsonTextFile into an object //Load a Texture (Assets/Resources/Textures/texture..
2022.06.16 -
게임오브젝트 불러오기
// 이름으로 불러오기 GameObject.Find("Name"); // 이름으로 불러온 오브젝트의 스크립트 내 함수 호출 GameObject bObject = GameObject.Find("GameManager"); GameManager bScript = bObject.GetComponent(); bScript.test(); // 태그명으로 불러오기 GameObject.FindWithTag("TagName");
2022.06.16 -
스태틱
정적변수 // 1번 스크립트 파일 public class 클래스이름{ // 정적 변수 선언 - 여러 게임오브젝트에 넣어도 되고, 어떤 게임오브젝트에도 안넣어도 됨 public static int 정적변수; } // 2번 스크립트 파일 위에 변수를 아래처럼 불러와서 사용 가능 클래스이름.정적변수; 정적함수 // 1번 파일 public class StaticTestClass{ public static int score; // 정적변수 public int memberInt; public static void StaticFunction(){ //정적함수 score = 10; // static 변수는 호출할 수 있다. memberInt = 10; // static 함수 내에서 멤버변수는 호출할 수 없다. } } ..
2022.06.16 -
킵입력
// 이벤트 종류 Input.GetKey(키코드) Input.GetKeyDown(키코드) Input.GetKeyUp(키코드) // 키코드 UpArrow, DownArrow, RightArrow, LeftArrow // 사용법 if(Input.GetKeyDown(UpArrow)){} Input.GetButton(세팅값) Input.GetButtonDown(세팅값) Input.GetButtonUp(세팅값) //세팅값 Horizontal, Vertical, Jump, Fire1 등 // -1 ~ 1 사이값을 반환. 만약 정수만 반환시 밑에 세팅에서 sensitivity 낮게 설정 Input.GetAxis("Horizontal") // -1,0,1 반환 GetAxisRaw("Horizontal") // "Hor..
2022.06.16 -
타이머
인보크 Invoke("Think", nextThinkTime); void Think(){ //do something } 코루틴 - 여러개의 엔트리 포인트를 두어 여러패턴으로 시간간격을 컨트롤 할 수 있다 void Start (){ StartCoroutine ( Function_name() ); // 인자값이 없을 경우 "함수명"으로도 실행 가능 StartCoroutine ( "Function_name" ); } IEnumerator Function_name(){ for(;;) // or while(1 or true){ yield return new WaitForSeconds(n); //n초 쉬는 함수. n초에 한번 실행되는 루틴 } }
2022.06.16 -
이동
트랜스폼(직접 이동) + 벡터 - 벽으로 이동시 흔들리는 문제있음 void Update(){ Vector3 moveVelocity = Vector3.zero; if(Input.GetAxisRaw("Horizontal") 0){ moveVelocity = Vector3.right; } transform.position += moveVelocity * 3 * Time.deltaTime; } 트랜스폼(직접 이동) - 벽으로 이동시 흔들리는 문제있음 void Update(){ if(Input.GetAxisRaw("Horizontal") < 0){ transform.Trans..
2022.06.16 -
색변경
// 변수 선언 SpriteRenderer spriteRenderer; // awake나 start에 추가 spriteRenderer = GetComponent(); // 색상도 다룰 수 있음 r,g,b,투명도 spriteRenderer.color = new Color(1,1,1,0.4f);
2022.06.16 -
좌우반전
// 변수 선언 SpriteRenderer spriteRenderer; // awake나 start에 추가 spriteRenderer = GetComponent(); // x축 반전 spriteRenderer.flipX = nextMove == 1; // x, y, z 축. 아래는 x축 기준으로 반전 (오른쪽 보고 잇는 캐릭터가 왼쪽 보게 됨) transform.localScale = new Vector3(-1,1,1);
2022.06.16 -
생명주기 함수
1. Awake(){ 스크립트가 실행될 때 한번만 호출 됨 (Start 함수보다 먼저 호출) 스크립트가 비활성화 되어있어도 실행됨 코루틴으로 실행 불가 } 2. Start(){ 스크립트가 실행될 때 한번만 호출 됨 (Update 함수보다 먼저 호출) 스크립트가 활성화 되어있어야 실행됨 다른 스크립트의 Awake가 모두 실행 된 이후에 실행됨 코루틴으로 실행 가능 } 3. Update(){ 프레임마다 호출되는 함수 주로 게임의 핵심 로직을 작성 그래픽이나 입력처리 } 4. LateUpdate() 모든 Update 함수가 호출되고 나서 한번씩 호출 됨 Update 함수에서 전처리가 끝난 후 실행해야 하는 로직에 사용 카메라 이동 로직에 주로 사용 } 5. FixedUpdate(){ 물리엔진의 시뮬레이션 계산..
2022.06.16 -
프레임 고정
void Awake(){ //60프레임 Application.targetFrameRate = 60; }
2022.06.12