[Unity] Composite Collider 2D 적용 후 Play 눌렀을 때 화면이 위로 올라가는 현상
·
공부/Unity
제목 그대로, Composite Coliider 2D를 적용한 뒤 플레이를 눌렀을 때 게임 화면이 위로 올라가는 현상이 나온다면 Rigidbody 2D의 Body Type이 Dynamic인 것입니다. Static으로 변경하세요
[Unity] [Collab] Collab service is deprecated and has been replaced with PlasticSCM 에러
·
공부/Unity
Unity에서 새로운 프로젝트를 생성하자 이런 에러가 계-속 나온다. 매초마다... 내가 찾은 해결 방안을 써보겠다... 1️⃣ project -> Reimport All 2️⃣ Edit -> Project Settings -> Services -> Collaborate -> OFF
[Unity] 'Debug'는 모호한 참조입니다.
·
공부/Unity
가끔 Debug가 먹히지 않으며 오류를 뱉을 때가 있는데 오류 메시지에 이미 원인이 나와있다. using UnityEngine과 using System.Diagnostics를 함께 사용하기 때문에 나오는 오류다. using System.Diagnostics를 삭제해주자.
[Unity] Object Pooling/Pool Manager는 왜 사용하는가?
·
공부/Unity
Object가 필요할 때마다 Instantiate를 사용해 생성하고, 다 쓰면 Destroy를 사용해 없애는 과정은 매우 비효율적이다. Object를 생성하고 없애는 일은 부하가 큰 작업이다. 성능이 저하된다는 이야기다. 이래서 사용하는 것이 Pool이다. Pooling할 Object를 공간에 넣어놓고, 필요하면 그 공간에서 Object를 꺼내다 사용한다. 사용이 끝나면 Object를 없애는 것이 아니라 다시 그 공간에 넣어둔다. 만약 똑같은 Object를 2번 이상 사용한다면 같은 Object를 하나 더 생성하게 된다. https://a6ly.dev/93 [Unity] Object Pooling (오브젝트 풀링) 오브젝트 풀링의 사용 이유 : 오브젝트의 생성과 파괴는 부하가 크고, 오브젝트의 파괴는 G..
[Unity] 2D 캐릭터 무한 점프 막기
·
공부/Unity
좌우 이동은 마무리한 캐릭터가 스페이스를 먹었을 때 점프하게 하는 코드다. 기존 이동 코드에 내용을 추가해주면 된다. 플레이어에는 Rigidbody 2D, BoxCollider 2D가 들어있고, 바닥에는 Box Collider 2D가 들어있다. 바닥 태그를 Ground로 설정해준 상태이다. bool _canJump; void Update() { Moving(); } void OnCollisionEnter2D(Collision2D collision) //바닥과 충돌 감지 { if (collision.gameObject.tag == "Ground") _canJump = true; } protected virtual void Moving() { if (Input.GetKeyDown(KeyCode.Space) ..
[Unity] Tile로 만든 맵, 선이 생겨서 마음에 들지 않을 때
·
공부/Unity
사진 속 예시처럼 이어서 그린 Tile 맵 사이사이에 선이 생겨서 마음에 들지 않을때 제일 간단한 해결 방법이다. Project Settings에 들어간다. Quality -> Anti Aliasing을 Disabled로 변경해준다. 선이 전부 사라지지는 않았지만 대충 봐줄만 한 형태가 됐다.
[Unity] player가 갈 수 없는 영역 표시하기
·
공부/Unity
player의 이동 영역을 지정하고 싶은데 방법을 알지 못해서 강의에서 알려준 그대로 복습해봤다. 새로운 타일맵을 생성한다. 이름은 collision 비슷한 느낌이 나게 만들어주면 된다. 사용하지 않는 sprite로 player가 갈 수 없는 공간을 쭉 둘러준다. collision에 새로운 script인 "Collision" 파일을 생성하고 컴포넌트로 추가해준다. public class Collision : MonoBehaviour { public Tilemap _tilemap; void Start() { } void Update() { List blocked = new List(); foreach (Vector3Int pos in _tilemap.cellBounds.allPositionsWithin) ..
[Unity] 게임 실행 작은 화면으로 하기
·
공부/Unity
어떤 스크립트던 게임과 함께 실행되는 스크립트 상에 코드 한 줄만 넣어주면 된다. GameScene 등과 같이 기본적인 스크립트에 넣는 걸 추천 Screen.SetResolution(640, 480, false); 순서대로 가로, 세로, 전체화면유무를 명시해준다.
[Unity] 몬스터가 죽을 때 나오는 효과는 어떻게 만들어야 할까
·
공부/Unity
우선, 내가 듣는 수업에서는 CreatureController라는 스크립트를 통해 대부분 생명체의 관리를 통합적으로 하고 있다. 플레이어와 몬스터 등은 CreatureController를 상속받아 사용하면 된다. 몬스터가 죽을 때의 관리는 MonsterController에서 한다. 몬스터를 죽이게 되는 WeaponController 또는 PlayerController에서 몬스터의 죽음을 관리하게 되면 애매한 상황이 발생한다. 몬스터를 주먹으로 때렸을 때, 무기로 때렸을 때, 몬스터가 잘못된 지역에 가서 스스로 죽었을 때 등등 각기 다른 Controller에서 몬스터의 죽음을 관리하기는 무리다. 우선 CreatureController에서 OnDamaged라는 함수를 새로 파준다. 특별한 내용을 넣지는 않고..
[Unity] 버튼 클릭하면 다음 스테이지로 넘어가기 / 씬전환
·
공부/Unity
1. Hierarchy 창에서 버튼을 만들어준다. 2. Create Empty로 씬을 관리하는 게임 오브젝트를 만들어주고 Manager 스크립트를 만들어준다. using UnityEngine.SceneManagement; public class LoadManager : MonoBehaviour { public void Play() { SceneManager.LoadScene("FirstStage"); } public void Exit() { Application.Quit(); } } 3. using UnityEngine.SceneManagement; 를 추가해주고 아래 코드를 입력한다. 4. Play 버튼 아래 On Click 설정을 해준다. 표시한 부분에는 @LoadScene이라는 게임 오브젝트를 넣어..
[Unity] 1인칭 FPS 총알 발사하기
·
공부/Unity
내가 원하는 모습 : 마우스 좌클릭 시 prefab 상에 있는 총알이 Player의 총구 위치에서 생성되어 앞으로 발사됨 https://blog.naver.com/ghost365/221380308534 참고 1. 총알이 생성될 위치를 FirePos로 지정 2. flaregun에 마우스 좌클릭 시 일어날 이벤트 조정 public class GunShot : MonoBehaviour { public GameObject bulletFactory; public Transform FirePos; private void Update() { if (Input.GetMouseButtonDown(0)) Shoot(); } void Shoot() { GameObject _bullet = Instantiate(bulletF..
[Unity] Scene씬 전환 시 화면이 어두워지는 오류
·
공부/Unity
Window -> Rendering -> Lighting Auto Generate를 체크 해제해주고, Generate Lighting을 눌러준다. 현재 있는 모든 Scene에서 이 행동을 해주면 Scene을 전환해도 어두워지지않는다.
[Unity] 게임 play 후 스폰되는 player를 mainCamera로!
·
공부/Unity
게임이 재생된 후에 Instantiate되는 player를 mainCamera에 넣어주기 위해서는 SetPlayer라는 함수를 지정해주면 된다. mainCamera를 관리하는 CameraController script에 [SerializeField] GameObject _player; public void SetPlayer(GameObject player) { _player = player; } 간단하게 내용을 추가해준다. 그리고 player를 스폰할 GameScene script에서 SetPlayer 함수를 사용한다. Camera.main.gameObject.GetComponent().SetPlayer(Player); Player를 스폰해준 다음에 SetPlayer 함수를 추가해주면 mainCamera..
[Unity] Instantiate한 Object (Clone)을 없애자
·
공부/Unity
일반적으로 객체를 Instantiate하면 이름 뒤에 (Clone)이 붙는데, 이게 꽤나 거추장스럽다. void PlayerMake() { GameObject go = Instantiate(PlayerPrefab); go.name = PlayerPrefab.name; } 간단하게 go.name = PlayerPrefab.name만 붙여주면 (Clone)이 사라진다.
[Unity] 캡슐 플레이어가 기울면서 혼자 움직이는 현상
·
공부/Unity
Player 이동키를 하나도 누르지 않았는데 밑바닥이 동그래서 혼자 움직이는 오류가 생겼다. Player -> Rigidbody -> Constraints -> Freeze Rotation에 있는 X, Y, Z를 모두 On 상태로 해주면 오류가 사라진다.