본문 바로가기

전체 글

(20)
박싱 언박싱 성능 체크 기록 최적화 관련 자료들을 찾다보면 박싱 언박싱 얘기가 나오는데 어느정도로 느린건지 감이 오질 않아서 비교하고 기록을 남겨봅니다 더하기는 10,000,000번 (천만번)씩 반복했고 디버그 Debug.LogError() 코드는 비교용으로 1000번 반복했습니다. 결론 차이가 나기는 하지만 벌벌떨면서 사용하지 않을 필요는 없어보인다 전체 코드 public class TimeTester : MonoBehaviour { void Start() { int repeat = 10000000; CheckTime(() => { int sum = 0; for (int i = 0; i { object num = 1; i..
[C#] Generic 함수 타입 변수로 지정하기 제네릭 함수에 타입을 동적으로 제어하고싶을 때가 있어서 정리해보았습니다. Skill이 있다. public abstract class Skill { } public class Nothing : Skill { } public class Fire : Skill { } public class Arrow : Skill { } Player가 있다. Player는 스킬을 가지고있고, HasSkill 함수가 있다. public class Player { public List skills = new List(); public bool HasSkill() { return skills.Any(t => t is T); } } 데이터에 따라 해당 스킬을 가지고 있는지 판별하고 싶을 때 리플렉션으로 함수를 가져와서 사용할 수 있..
[Unity] Custom Editor 인스펙터 드랍다운 (enum 없이) Enum을 사용하면 인스펙트에서 드랍다운으로 enum을 선택할 수 있다. 데이터에 따라서 인스펙터에서 값을 선택하고 싶을 때 커스텀 에디터로 작성하면 가능하다. 동적으로 드랍다운 목록이 변경되도록 만든 예시 (마지막 아이템이 선택될 때마다 아이템 추가)
[Unity] Rigidbody 날아가는 궤적 그리기 앵그리버드 게임을 보면 어디로 날라갈지 미리 궤적을 보여줍니다. 이런건 어떻게 만드는지 궁금해서 영상 참고해서 만들어봤습니다! 참고한 유튜브링크는 글 아래에 적어뒀습니다. 원리를 간단하게 설명하자면 등가속운동 공식을 사용하여 시간에 따른 위치값을 미리 계산하는 것입니다! 스크립트는 3개로 만들어봤습니다 GameManager : force 계산해서 넣어주는애 BallController : force 받아서 날아가는 애 TrajectoryDrawer : force 받아서 궤적 그려주는 애 using UnityEngine; public class GameManager : MonoBehaviour { public BallController Ball; public TrajectoryDrawer Drawer; pu..
[Unity] Material Property Block 사용하여 배칭시키기 요약 - Material Property Block을 써도 속성 값이 같아야 배칭을 시켜준다. - Frame Debugger로 볼 수 있는 속성 값이 같아도 배칭이 되지 않는 경우가 있다. - 배칭시켜줄 렌더러의 Property Block을 모두 같은 방식으로 생성해 준 뒤 적용시켜야 편하게 쓸 수 있을듯하다 var sr = GetComponent(); sr.material.SetColor("MainColor", Color.white); 유니티에서 Material을 수정하면 Instance가 생성되어 배칭이 되지 않는다. Material Property Block Material Property Block을 사용하면 Material Instance를 생성시키지 않고 속성 값을 변경 할 수 있다. var ..
[Unity] 서로 이어지는 이펙트 만들기 (2D) 게임을 하다보면 서로 이어져있는 이펙트를 볼 수 있다. 유니티의 기본적인 파티클 시스템으로 만들 수 있지는 않은 것 같아서 만들어 보았다! LineRenderer가 나을수도..? 오브젝트 위치, 각도 설정 위치는 두 오브젝트 사이에 두고 각도를 양쪽을 바라보도록 설정했다. public class LineEffect : MonoBehaviour { public GameObject Target1; public GameObject Target2; private SpriteRenderer sr; private void Awake() { sr = GetComponent(); } private void Update() { Vector2 pos1 = Target1.transform.position; Vector2 p..
[Unity Shader] 가까워질수록 보이는 쉐이더, 카메라 위치 받아오기 Properties { _DisPower("Distance Power", float) = 0 } SubShader { Tags { "RenderType"="Transparent" "Queue"="Transparent" } LOD 200 CGPROGRAM #pragma surface surf Lambert alpha:fade #pragma target 3.0 float _DisPower; struct Input { float3 worldPos; }; void surf (Input IN, inout SurfaceOutput o) { fixed4 c = fixed4(1, 1, 1, 1); float d = distance(IN.worldPos, _WorldSpaceCameraPos) / _DisPower; d..
[C#] 스택(Stack), 큐(Queue) 속도 차이 실험 배경 캐시메모리 지역성 때문에 스택이 큐보다 push, pop 하는데 속도가 더 빠르다 해서 실험을 해보았는데 데이터 push만 하는 경우에도 스택이 더 빨라서 그 이유를 찾아보았습니다. 실험 환경 Windows 10 유니티, C# 결과 결론부터 말하자만 스택이 더 빠르다. C#에서 스택은 배열, 큐는 순환배열로 이루어져 있어 조건검사 하는데 좀 더 많은 연산을 하는 것 같다. 실험코드, 참고 사이트는 아래에 적겠습니다. 테스트 Stack 실험 코드 더보기 실험 코드 using System; using System.Collections.Generic; using UnityEngine; public class TimeTester : MonoBehaviour { private Queue queue = ..