오브젝트를 움직이는 데 아는 방법들을 정리해보려고 한다.새로운 내용을 아는데로 계속 추가해나갈것.제일 기본적인 방법으로는 transform.position에 vector3 값을 직접 넣거나 연산을 하여 움직이게 하는 방법이 있다. 이 방식대로하면 순간이동을 하게된다.
객체를 상태로 정의하는 것으로,유한한 갯수의 상태를 관리하게 되고한 번에 하나의 상태만 가지게된다.FSM의 요소State(상태): 객체의 상태Transition(전이): 상태의 변화Condition(조건): 전이하기 위한 조건\[링크]
Raycast란 오브젝트에서 광선을 쏘는 걸 말하고,레이캐스트를 사용한다면 광선에 맞는 collider에 대한 거리,위치 등의 정보를 RaycastHit으로 return한다.레이캐스트는 충돌한 collider을 반환하므로오브젝트에 collider가 없다면 레이캐스트는
Update() - enabled가 true일 때, 매 프레임마다 호출 된다.일반적으로 물리효과 적용 안 된 단순한 오브젝트 움직임이나 키입력에 사용된다. Fixed Update() - 매 프레임마다 호출되지 않고, Fixed Timestep에 설정된 값에 따라 일정한
기본 함수 선언은 이런 식으로 하고DFS방법을 이용해 Type에 해당하는 오브젝트들을 찾아 반환한다. includeInactive는 inactive인 자식 오브젝트도 반환할건지 여부를 설정해주는 것이고,디폴트는 false로 만약 inactive인 자식오브젝트 반환하려면
이런식으로 image컴퍼넌트를 가져온다음 image컴퍼넌트의 색의 알파값을 변경하려 했으나read-only값이라 변경할 수 없었다.검색하여 찾은 방법은알파값이나 r,g,b값을 별도로 바꿀 순 없고 Color에 해당하는 벡터자체를 변경해서 넣어줘야한다는 것이다.예시로는
UI용 TMP의 list를 선언해서 이런식으로 넣어주는 코드였는데 NullReferenceException: Object reference not set to an instance of an object갑자기 이게 떠서 당황했다.CList를 선언만 하고 new연산자를
유니티에서 GetComponentsInChildren함수를 사용하는 도중 부분에서transform child out of bounds 오류가 계속 떠서 찾아봤다.찾아보니 transform에 자식이 없거나 자식 수보다 더 큰 값을 call할시 뜨는 오류였다.이상해서 각
buttonButtons에 getcomponentsinchildren()함수를 사용해 버튼들을 다 넣어준 후,반복문,delegate함수를 통해 각각 버튼에 onClick.AddListener함수로loadGame함수를 넣어주려했으나 먹통이 되었다. 이유는 반복문을 통해
게임오버가 되었을 때게임오버 화면에 있는 Game Over스프라이트에 입힌 애니메이션이작동을 안해서 한참을 고민했다.그러던 중, 인게임 내에서 게임오버 화면을 호출했을 땐 작동이 잘 되는 걸 보고Time scale에 문제가 있다고 생각이 들어서 찾아봤다.animatio
스크립트의 onEnable함수에서 버튼 리스너를 동적할당해줬다.하지만, 막상 실행하고 버튼을 클릭해보니 Method arguments are incompatible 오류가 계속 떠서 당황했다.찾아보니 저 오류는 버튼클릭에서 호출하는 함수의 인자가 모순적이라는 뜻이였다.
개요 깃헙 데스크탑을 이용해 유니티 협업을 하는데 브랜치를 새로 파서 커밋을 하니 > "warning: LF will be replaced by CRLF" 에러가 엄청 떠서 당황했다. 해결 방안 이번 경우는 인터넷 검색을 해보니 깃허브데 스크탑 사용할 시 .giti
사실 너무 기초적인 실수라 블로그에 적기도 민망하지만 시간을 너무 많이 쏟아서 화나기도 하고 나중에 또 이 부분 체크할 수 있도록 한다.buttonUp, buttonDown에 해당하는 함수를 바꿔썼다 ㅜ.ㅜpointer up에 buttonDown함수를 집어넣고 poin
개요 unity의 ui중 canvas 컴퍼넌트의 Render Mode를 정리한 문서 Screen Space - Overlay 캔버스가 씬내부 아무곳에 위치해도 게임씬 전체를 덮는 형식으로 렌더링된다. 스크린의 크기가 조절되거나 해상도가 변경되면 캔버스는 여기에
\[캔버스 렌더 모드] 이 게시글이 사실 캔버스 렌더모드에 따라 캔버스 UI좌표가 달라져서 한참 고민하다가 해결하고 정리한 글이다.처음엔 캔버스 렌더 모드가 씬에서 보는 관점만 바꿔준다고 생각하여 체력바 UI를 월드내의 몬스터 밑에 달려고 할 때,Screen Spac
개요 원래 3.5.1을 사용했는 데 플레이스토어에서 sdk업그레이드 안하면 업데이트 게시가 거부된다고 해서 sdk를 제일 최신인 4.3.0으로 업데이트 해줬다. 문제는 iunityadslistener인터페이스를 사용하는게 에러가 나는 것이였다.
함수의 원형bool 형의 함수로 해당 타입의 컴퍼넌트를 찾았다면 true반환, false 반환하는 함수이다.찾았다면 out되는 component에 해당 타입 컴퍼넌트를 할당해준다.GetComponent는 해당 타입의 컴퍼넌트를 찾지 못했을 때 memory allocat
유니티에서 2D나 3D에서 마우스 클릭으로 해당 오브젝트 정보 읽어오는 부분은 레이캐스트를 이용해 구현을 하였다.하지만, 인벤토리를 만들어 보려고 캔버스 위에서 슬롯과 아이콘오브젝트를 레이캐스트를 이용해 움직이려 했으나 반응하질 않았다.늘 그랬듯이 인터넷을 뒤적인 결과
as 연산자는 객체에서 캐스팅 할 때 형변환이 가능하면 형변환을 수행하고, 그렇지 않으면 null 값을 return하는 연산자다. 명시적 형변환을 하는 과정에서 System.InvalidCastException오류를 뱉어낼 때가 있다. 예를 들어 부모 객체를 자식객
인벤토리 UI시스템을 구현하는 중, 아이템 드래그 부분을 구현중이였다.아이템을 드래그한다면 드래그 중에 해당 아이템이 제일 앞에 위치해야하는데 어떤 방법을 사용하는지 궁금했다.하이러키의 local transform list에서 해당 오브젝트 순위를 맨 밑으로 보낸다.\
유니티에서 제공하는 텍스트 기능인 TMP유니티 매뉴얼에서 제공한는 설명에 따르면 TextMeshPro는 Unity를 위한 최고의 텍스트 솔루션으로, Unity의 UI 텍스트와 레거시 텍스트 메시를 완벽하게 대체합니다.강력한 기능과 뛰어난 사용성을 자랑하는 TextMes
해당 맵의 이름을 파일이름으로 저장 후 이름들을 불러와 배열에 저장할 일이 필요해서 이것저것 찾아보다가 폴더안의 파일이름들을 불러오는 방법을 찾아서 정리해두었다.기본적으로 폴더를 Killing, Sneaking, miniBoss로 나누고,해당 폴더마다 Easy, Nor
기본적으로 모든 monobehavior의 Awake()함수가 다 끝난 후, Start(), OnEnable()함수 순으로 실행되는 줄 알았는 데,OnEnable함수가 먼저 실행되고 Awake가 실행되어서 많이 당황했었다.\-> 오브젝트가 부모 자식관계가 존재한다면,자식
이런 식으로 파티클시스템을 인스펙터창에서 붙여넣어준 후,해당 파티클의 색을 스크립트로 변경하려 했다.이런식으로 해당 파티클시스템의 main을 호출해서 부르니 해당값에 직접 set이 안 되었다.검색해보니이런 식으로 따로 할당을 한 후에 변경해줘야했다.
오브젝트의 local active state를 반환한다. 무슨 뜻이나면 부모 오브젝트의 setactive가 false라도 자식 오브젝트가 true라면 true를 반환한다.오브젝트의 active state를 반환한다.자식 오브젝트가 setactive true 상태라도
코루틴을 사용할 때,뭐 이런 식이라던지 다양한 WaitFor친구들을 (WaitForFixedUpdate,WaitForEndOfFrame등등)new 연산자를 통해 새로 만들게 되는데결국 새로 인스턴스들이 만들어지므로 가비지가 생성된다. 따라서 이런식으로 캐싱을 해줘서 사
공격범위를 빨간색으로 띄우고 공격 스프라이트를 띄우려했다.공격범위를 해당 스프라이트 크기만큼 설정하면 편할거같아서 검색해봤다.이런 식으로 해당 스프라이트의 bounds 값을 불러오면 사이즈가 된다.
Vector3.dot 함수를 이용해 두 사이의 각도를 구하려는데 뭔가 하고 로그 찍어보면서 분석해봤다.이런식으로 오브젝트가 바라보는 벡터랑 오브젝트에서 플레이어로 향하는 벡터의 코사인 값을 Dot를 통해 구한 후, 아크코사인을 통해 라디안을 구하고 Rad2Deg값을 곱
시네머신을 사용해야해서 시네머신을 공부하던 중 이분의 블로그에서 재밌는 효과를 발견해서 작성한다.영상 링크유니티블로그에서도 소개되는 기능이다.오브젝트의 proximity보다 가까이 가게되면 해당 오브젝트쪽으로 카메라가 움직이는 방식이다. CinemachineTarget
Rect Transform의 Width, Height를 스크립트로 변경하려했는데 어떤 프로퍼티에 접근해야하는질 모르겠어서 찾아본결과다.이 sizeDelta가 width, height를 관리해서 sizeDelta.x, sizeDelta.y값을 불러와 width,heigh
스킬을 구현중에 scriptableObject를 사용해보고 싶어서 이분의 강의를 듣던중https://www.youtube.com/watch?v=cy49zMBZvhg프로퍼티함수는 serializeField로 attribute를 지정하지 않고field: Seria
유니티를 GitHub에 올려 작업을 하려했다. 다른 분들의 Github을 보면 Asset, ProjectSetting 정도만 올라와있는데,내가 올려보니 Asset부터 Library, usersetting, log 등등 모든 폴더가 다 올라갔다.. 딱봐도 .gitigno
A\* 알고리즘 - 가중치추가방금 올린 게시물이다.정리하면서 여러 레이어마스크를 활용하는 부분이 되게 인상깊어서 레이어마스크 부분만 따로 정리하는 게시물이다.Unity의 Layermask는 32개의 비트로 이뤄져 있다.Layer을 6번으로 설정했다고 하면 6번째 비트가
에셋을 임포트했는 데 한 스크립트가 컴포넌트로 붙어있는 오브젝트를 찾아야 하는 상황이였다.어디에 붙어있는지 당최 알 수 없어서 하나하나 다 찾아보다가 화가나서 검색했다.Find References in Scene으로 검색하면 하이러키에 오브젝트들이 쭉 뜬다!
이미지 바깥 부분을 클릭해 이미지를 닫게하는 부분을 구현해보려했고, UI부분은 아직 잘 모르겠어서 검색해봤다.찾아본 방식은 RectTransformUtility의 RectangleContainsScreenPoint 함수를 사용하는 방식이다. 마우스 입력이 되면 해당 위
이런 모양의 버튼을 캔버스에 추가한 후, 이미지를 뒤집고 싶어서.rect transform에서 y축으로 180도 회전을 시켰다,문제는 그 후로 button컴퍼넌트가 아예 작동이 되지 않았다.여기저기 검색해봤으나 첫번째 댓글의 facing direction때문인거 같다버
개요 이런 형식의 event나 이런 유니티 이벤트 형식을 자주 봤지만 익숙하지 않아서 정리하는 글이다. > https://gamedevbeginner.com/events-and-delegates-in-unity/ 이 분의 포스팅을 읽고 요약,정리해보는 글이다.
커서를 움직여 선을 그리고 싶어서 line renderer에 대해 간단하게 검색해보고 적는 글이다. https://www.youtube.com/watch?v=M4247oZ8sEI 이 유튜브를 통해 공부했다.우선 line renderer컴퍼넌트를 빈 오브젝트에게
유니티 UGUI에서 부모 자식 오브젝트 간에서 종횡비를 조절할 수 있게 해주는 컴퍼넌트다.위 사진처럼 두 가지 설정해줄 요소가 있는데 1\. aspect mode2\. aspect ratio이다.유니티 document에 적힌 프로퍼티들이다.주의할점은 Envelope P
GridBackground는 graph view에서 default background이다.유튭을 참고하며 Ui builder을 이용해 유니티에서 작업중 uss파일에서 GridBackground property를 건드려보던 중 계속 grid적용이 안되었다..이것저것 찾아
적 투사체가 화면 바깥에서 돌진하고 있을 때, 플레이어에게 알려주기 위해서 느낌표를 해당 방향에 띄우려고 시도했다.우선 떠오른 방법은 플레이어 위치와 카메라 너비 계산하기 였다.코드로 구현 중 예전에 배웠던 camera의 viewport가 떠올랐다.viewport내부에
플레이어의 회전을 다루는 데 , 우주선 prefab을 transform에서 x축으로 -90도 회전시킨 후, y축으로 45도를 회전하고 싶었는 데, y축으로 45도 회전결과가 z축으로 45도 회전한 것과 같은 방향이였다. 왜 이러지 생각하다가 수업 때 배운 짐벌락
버튼이 갑자기 작동을 안했다!가장 단순한 방식으로 혹시 버튼위에 다른 UI Object가 가리고 있으면 안된다.eventsystem이 있는지 체크해야한다!나 같은 경우는 scene에서 다른 scnene으로 작업물 옮기다가 eventsystem을 추가를 안해줘서 작동을
physics.Ray 를 통해 layer충돌 ray를 발사하는데, LayerMask의 GetMask와 NameToLayer함수가 반환값이 다르길래 검색하고 정리하는 글이다.GetMask함수는 말그대로 인자값으로 넘어온 레이어 이름에 해당하는 mask값을 반환한다. 해당
일단 본인은 쉐이더에 대해 무지한 상태이다. 만들어보며 공부하는 느낌으로 게임에 이거저거 추가하며 배우는 중이였다.이런 노드를 통해 UI에서 빛이 사선으로 내려오는 부분을 검색해가며 구현중이였다. 문제는 에디터상에선 의도대로 잘나오던 UI들이 빌드파일에서 투명하게 나왔
해상도 정보를 씬 넘어가도 유지하도록 scriptable object를 사용 중이였다.scriptable object는 씬 전환시 데이터가 유지되어서 각 씬끼리나 클래스들이 scriptable object의 데이터로 통신하게끔 만들어진것으로 알고 사용을 했다.문제는 0
개요 기본적으로 코루틴을 실행하는데 yield return으로 코루틴을 기다리는 상황이다. stopcoroutine으로 해당 코루틴을 중지시켰을 때, yield return을 빠져나오질 못해서 문제가 생긴 상황이였다. 코루틴 기본적으로 IEnumerator는
유니티에서 모든 스크립트의 Awake(), Start(), OnEnble()의 라이프사이클이 보장되는 줄 알았다.하지만 클래스 A와 B가 있다고 했을 때, A의 onenable이 B의 awake보다 먼저 호출되는 현상이 있었다. 찾아보니 유니티는 스크립트간의 순서는 보
Enum형식인 Actor와 Language를 키로 가지고 name을 값으로 가지는 이름을 가져오는 클래스를 생성했다.하지만 내부 초기화가 안 되어서 고민했다.이런식으로 작성을 했는데, static dictionary Actordict가 초기화가 안 되는 상황이였다.찾아
구조체를 typename 인자로 갖는 List에서 내부 구조체를 접근하려 할 때,오류가 발생했다.이런 맵의 정보를 가진 구조체가 있을 때,이런식으로 scriptableobject로 관리 중이였다.여기서 stageinfo.mapStates0. 이런식으로 mapStates