본문 바로가기

프로그래밍286

Spine Skin Attachment public class Test_Attachment : MonoBehaviour { internal SkeletonAnimation m_Spine; [SpineSlot(dataField: "m_Spine")] public string m_SlotName; public float m_Rotate = 0.0f; private void Awake() { m_Spine = GetComponent(); } // http://suyeongpark.me/archives/1906 // http://ko.esotericsoftware.com/forum/Combining-Skins-Additive-6507 void Load2() { string PartsName = "Leg_F2"; var Origin = m_Spine... 2021. 4. 28.
Unity - Joystick Pack 최초 터치 문제 protected void Awake() { m_JoyStick = GameObject.Find("Dynamic Joystick").GetComponent(); m_JoyStick.OnPointerDown(new PointerEventData(EventSystem.current)); m_JoyStick.OnPointerUp(new PointerEventData(EventSystem.current)); } 최초 터치 시 이런식으로 가운데가 안맞는다면 위의 코드를 해주면 한번 임의로 눌렀다 뗀거로 해서 이후로는 정상적으로 작동 2021. 4. 16.
Unity - Collider Center & Top 좌표 구하기 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test_Collider : MonoBehaviour { public Transform m_Obj_Head; public Transform m_Obj_Center; Collider2D m_Collider; private void Awake() { m_Collider = GetComponent(); } // Start is called before the first frame update void Start() { m_Obj_Center.position = m_Collider.bounds.center; m_Obj_Head.position = m.. 2021. 3. 29.
Unity - 오브젝트 가까운 순으로 정렬 feat Linq using System.Linq; void Test() { var list = GameObject.FindGameObjectsWithTag("Enemy").OrderBy( x => Vector2.Distance(transform.position, x.transform.position) ).ToList(); } 2021. 3. 25.
SoundManagerPro 3 : Next Gen 수정해야 되는 점 SoundManager_SFX_Internal.cs private GameObject AddOwnedSFXObject(AudioClip clip) { GameObject SFXObject = new GameObject("SFX-["+clip.name+"]", typeof(AudioSource)); SFXObject.transform.parent = transform; SFXObject.name += "(" + SFXObject.GetInstanceID() + ")"; SFXObject.GetComponent().playOnAwake = false; //GameObject.DontDestroyOnLoad(SFXObject); // 이하 생략... } GameObject.DontDestroyOnLoad(SF.. 2021. 3. 22.
SoundManagerPro 3 : Next Gen SFX 음량 들쭉 날쭉한 문제 갑자기 PlaySFX 로 효과음을 내는데 소리가 점점 작아졌다 다시 돌아왔다 작아졌다를 반복하는 현 상이 일어났다. 원인은 이 부분에 값을 넣었더니 그 SFX 말고 다른 SFX 에 까지 볼륨 조절이 적용 됐던 것;; 그냥 0100 으로 쓰자;; 2021. 3. 22.
무결성 랜덤 (Random) A C# Mersenne Twister class - CodeProject A C# Mersenne Twister class A pseudorandom number generator. www.codeproject.com C++ 에 Boost::Random 이 있다면 C# 은 MersenneTwister 가 있다...? namespace MersenneTwister; void Test() { int rnd = (new MT19937()).RandomRange(0, 10); } 2021. 3. 9.
Spine Animation - AnimationState 가 null 일 때 SkeletonAnimation m_Spine; private void Awake() { m_Spine = GetComponent(); // 이 때 하면 AnimationState 가 null 일 때도 있다 m_Spine.AnimationState.SetEmptyAnimation(0, 0.0f); } private void Start() { // 이 때 하면 awake 에서는 null 이던게 아니게 된다 m_Spine.AnimationState.SetEmptyAnimation(0, 0.0f); } 늘 그런건 아니지만 Awake 에서 AnimationState 가 null 일 때도 있으니 한템포 쉬고 Start 쪽에서 참조하면 값이 있다.. 코루틴 같은 상황에서는 WaitFor 시리즈로 한틱 정도만 쉬어준.. 2021. 2. 26.
Unity Spine Animation y 축 180 돌렸을 때 덜덜 떨리는 현상 transform.rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f); //gameObject.transform.SetPositionAndRotation(gameObject.transform.position, Quaternion.Euler(0, 0, 0)); transform.rotation = new Quaternion(0.0f, 180.0f, 0.0f, 0.0f); //SetPositionAndRotation(gameObject.transform.position, Quaternion.Euler(0, 180, 0)); 아래 주석으로 했을 때 180 돌린 후 이동하면 덜덜 떨었는데 new 로 한 다음엔 괜찮음 SetPositionAndRotation 말고도 Engle.. 2021. 2. 23.
30프레임에 한번씩 미리 가비지 컬렉션 if (Time.frameCount % 30 == 0) { System.GC.Collect(); } 2021. 2. 8.
C# foreach 중 삭제(Remove) feat Linq using System.Linq; Dictionary m_Dic = new Dictionary(); private void Start() { m_Dic.Add("test1", 1.0f); m_Dic.Add("test2", 2.0f); m_Dic.Add("test3", 3.0f); // error foreach (var tmp in m_Dic) if (tmp.Value < 2.0f) m_Dic.Remove(tmp.Key); // success foreach (var key in m_Dic.Keys.ToList()) if (m_Dic[key] < 2.0f) m_Dic.Remove(key); } 2021. 2. 2.
Unity 네비메쉬 2D GitHub - h8man/NavMeshPlus: Unity NavMesh 2D Pathfinding h8man/NavMeshPlus Unity NavMesh 2D Pathfinding. Contribute to h8man/NavMeshPlus development by creating an account on GitHub. github.com 네비메쉬플러스를 사용 :) 2021. 1. 26.
KinematicObject 계열의 캐릭터 주의점 유니티에서 샘플로 받을 수 있는 2D 플랫포머의 캐릭터 컨트롤러를 참고 하다보면 KinematicObject 라는 클래스를 참고해서 2D 게임을 만드는 경 우가 많을 것 같은데 본인 역시 이걸 가져다가 없는 기능 2개 정도를 추가해서 사용 중 다수의 총알을 쏘고 맞는 게임을 제작 중 이상 동작을 하는 것을 확인.. 대략 이틀 정도 고민 끝에 원인을 발견.. 원인은 여기서 ContactFilter2D 를 설정해서 RaycastHit2D[] 버퍼에 받는 과정이 문제... 일단 캐릭간 충돌, 총알과 캐릭간 충돌, 바닥 타일간 충돌 이 설정된 Enemy 라는 Layer를 사용했더니 다수의 탄을 맞을 때 RaycastHit2D의 디폴트 버퍼 15를 탄알이 가득 채워버리는 바람에 정작 해야할 그라운드의 체크를 못해.. 2021. 1. 25.
2D Lookat / Lookat2D public void Set(Vector3 pos, Vector3 dir) { transform.position = pos; transform.rotation = Quaternion.AngleAxis(Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg, Vector3.forward); } // dir = (target.pos - pos).normalize protected void LookAt2D(Vector3 dir) { transform.rotation = Quaternion.Euler(0, 0, Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - 90); } 2021. 1. 21.
LayerMask.NameToLayer / Equals 성능/포퍼먼스 LayerMask.NameToLayer("Ground") 이렇게 쓰다보면 string 들어가니 성능 안나오고 그런게 아닐까.. 미리 다른 곳에 받아놓고 그걸 쓰는 사람들도 있고.. 과연 얼마나 차이가 있을까 실험을 해봅시다 using System.Diagnostics; private void Awake() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); for (int i = 0; i < 100000; i++) if (gameObject.layer == LayerMask.NameToLayer("Ground")) break; stopwatch.Stop(); Debug.Log($"Test 1 Sec {stopwatch.ElapsedMillisecon.. 2021. 1. 14.
Spine Render Separator spine-unity Runtime Documentation (esotericsoftware.com) spine-unity Runtime Documentation Licensing Integrating an official Spine Runtime into your applications requires a valid Spine license, though you are welcome to use the Spine Runtimes for evaluation purposes. To use the spine-unity runtime in your Unity project: Download and install Unit ko.esotericsoftware.com 에서 Transparency and Draw O.. 2021. 1. 8.
JobQueue wiki.unity3d.com/index.php/JobQueue JobQueue - Unify Community Wiki Description This is a simple threaded job queue for any kind jobs you want to execute on a thread. The JobQueue class is a management class, the actual job scheduler. When you create an instance of that class you have to specify the "job class" it will man wiki.unity3d.com ㄴ 원문 JobQueue.cs /**************************************.. 2020. 12. 27.
에서 필요한 정식 매개 변수 에 해당하는 제공된 인수가 없습니다 클래스 상속시 'class' 에서 필요한 정식 매개 변수 ~~ 에 해당하는 제공된 인수가 없습니다 경고문 떴을 때 class StageData { public StageData(int id) { } } class StageData_Normal : StageData { public StageData_Normal(int id) : base(id) { } } : base 를 추가해주면 됩니다 2020. 11. 20.
C# 내일까지 남은 초 구하기 public static float NowToTomorrowSec() { return (float)((DateTime.Now - DateTime.Parse("0:00:00 AM").AddDays(1)).TotalSeconds); // 혹은 return (float)DateTime.Today.AddDays(1).Subtract(DateTime.Now).TotalSeconds; } 백문이 불여일견 2020. 11. 13.
List 루프 돌며 삭제 for (int i = 0; i < List.Count;) { if (List[i] == 조건) { List.RemoveAt(i); continue; } else i++; } 2020. 11. 11.