목록유니티 (14)
A-Dyu의 개발 일기장
유니티에서 네비메시를 사용할 때 바로 멈추지 않거나 Angular Speed를 아무리 높게 설정해도 회전 속도가 원하는 만큼 나오지 않을 떄가 있다.이럴 경우에선 velocity를 zero로 만들거나, 회전값을 바꿔 해결할 수 있다. 1.에이전트를 즉시 멈추게 하기먼저 isStopped를 true로 바꾼다, 하지만 이런 경우에선 바디만 몀추고 실제 계산은 계속 이루어지기 때문에velocity를 zero로 만들고 updatePosition을 false로 바꿔 해결할 수 있다.(물론 다시 움직일려면 또 바꿔야 한다)//움직임을 즉시 멈출 때public MovePause(){ navAgunt.isStopped = true; navAgunt.updatePosition = false; //계산 정지 ..
유니티에서 커맨드라인이나 bat파일로 실행할 때 커맨드 라인에서 인자를 받고 싶을 때가 있다.이럴 때 사용할 수 있는 방법이 있다. Environment.GetCommandLineArgs이 함수는 System네임스페이스에 포함된 Environment클래스의 기능이다.커맨드 라인에서 받은 여러 가지 인자를 string배열로 반환하며, 0번째 요소는 실행 파일을 실행할 때 사용한 경로이므로 1번째부터 요소를 읽는 걸 추천한다.using System;//Environment를 사용하기 위한 namespacevoid Start(){ string[] args = Environment.GetCommandLineArgs(); foreach (string arg in args) { Debu..
유니티에서 LookRotation을 사용하다가 Look rotation viewing vector is zero라는 메세지가 콘솔창에 출력됐다.이 함수는 LookRotation의 인수가 Vector3(0,0,0)이면 출력되는 콘솔로, 실행시키기 전 인수를 체크하는 걸로 해결할 수 있다.void Update(){ //pos가 Vector3.zero면 Look rotation viewing vector is zero메세지 출력 Quaternion.LookRotation(pos); //pos가 Vector3.zero인지 체크한 후 실행 if(pos != Vector3.zero){ Quaternion.LookRotation(pos); }}
유니티에서 양쪽면을 렌더하거나 안쪽 면만 렌더하고 싶은 경우가 있다.유니티 컬링 방향을 결정해 렌더할 수 있다.머터리얼의 인스펙터 창으로 간다.그럼 Render Face란 속성이 보이는데자신이 원하는 속성으로 바꾸면 된다.Both모든 면을 드로우합니다Back뒤쪽 면을 렌더링하지 않습니다(디폴트)Front앞쪽 면을 렌더링하지 않습니다.

유니티를 사용하다가 이런 경고가 출력되었다. There are 2 event systems in the scene. Please ensure there is alway s exactly one event system in the scene 이건 뭐 말 그대로 현재 게임에 EventSystem이 2개 이상 있다는 뜻이다.혹여나 씬을 Additive시킬 때 이런 경고가 뜰 수 있으니 조심!
InverseTransformPoint 메서드는 월드 좌표를 해당 객체의 로컬 좌표로 변환해줍니다.예를 들어, 월드 좌표 Vector3(1,1,1)이 객체 A의 로컬 좌표 Vector3(5,5,5)에 해당한다면, 해당 메서드를 실행하면 Vector3(5,5,5)를 반환합니다.GameObject A = GameObject.Find("A");A.InverseTransformPoint(new Vector3(1,1,1));//(5,5,5)
유니티를 사용하다 완성 후 빌드할때 이 오류가 떳다.난생 처음보는 오류에 구글에 검색해보았더니 꽤 오래전부터 있던 전통적인? 오류인것 같았다.https://discussions.unity.com/t/type-has-an-extra-field-of-type-in-the-player-and-thus-cant-be-serialized-error/678423여기에서 나온대로 원래 클래스 안쪽에 있던 열거형을 바깥에 빼봤더니 잘 된다.다시 넣어도 잘 된다.?ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

유니티에서 태그를 비교할 때 ==연산자를 많이 사용한다.using UnityEngine;public class Test : MonoBehaviour{ private void OnCollisionEnter(Collision collision) { //플레이어랑 충돌할 시 if (collision.gameObject.tag == "Player") { Debug.Log("플레이어랑 충돌하였습니다."); } }}하지만 이렇게 비교하면 tag는 변수가 아닌 프로퍼티이기 때문에 string을 복사,생성 후 메모리에 할당한다.그렇기 때문에 비교 후 가비지가 발생하고,결국 GC에 의한 성능 저하가 발생한다. 하지만 CompareTag 메서..