unity/유니티 초보 23

Unity - UI 자동화

유니티에서 UI를 작업하는 경우 하이어라키 창에서 object를 일일이 연결해야된다는 번거러운점이 있다 이를 해결하기위해 자동 연결 기능을 구현해 보자 1. Bind - C#은 reflection이라는 좋은 기능이 있으므로 이를 활용하여 구성각 요소들을 얻어와 보자 public class GameUI : MonoBehaviour { public void Bind(Type type) where T : UnityEngine.Object { // enum 에 있는 요소들의 이름을 가져온다 string[] names = Enum.GetNames(type); UnityEngine.Object[] objects = new UnityEngine.Object[names.Length]; // 이름을 통해 하위 객체에 동..

Unity - 아이템 쿨타임 UI

유니티에서는 버프나 아이템에 쿨타임 화면이 표기되는데 이는 Image의 Type을 이용하여 손쉽게 구현 할 수 있다 1. 아이템 쿨타임 조정 코드 using UnityEngine; using UnityEngine.UI; public class CoolDown : MonoBehaviour { [SerializeField] private float _coolTime = 3f; [SerializeField] private Image image; private float _timer = 0; private void Awake() { image = GetComponent(); } void Start() { // 코드로도 조정이 가능하다 // 시계 방향으로 쿨타임 감소 //image.type = Image.Type..

Unity - new Input System 사용법

서론 기존에 캐릭터의 움직임을 제어할 경우 유니티에 있던 Input Manger을 사용해 왔을것이다. 그렇지만 기존의 InputSystem보다 Observer 패턴을 더 잘 활용할 수 있고 코드를 더 깔끔하게 관리할 수 있으며 여기에서는 소개하지 않지만 Scheme설정을 통해 PC, Moblie같은 특정 타겟마다 Input System을 설정할 수 있는 장점을 가지고 있는 새로운 Input System을 알게되어 소개한다. 사용법 - 2DGame 1. InputSystem package 설치 2. PlayerInput component 추가 및 InputAction 추가 project창 -> 마우스왼쪽클릭 -> create -> 맨밑쪽 InputAction 생성 -> 더블클릭후 이름 정의 Action T..

Unity2D - 간단한 바운스볼 로직 구현

게임 오브젝트가 벽을 튕기는 동작을 구현 하다 바운스볼은 어떻게 하면 만들 수 있을까 궁금증이 생겼다 1. 첫번째 방법 Physics Material 사용 Bounciness를 1로 하게되면 운동에너지가 그대로 보존되어 공이 일정한 높이로 튀어 오를 거라 생각하여 rigidBody와 함께 사용해 보았다. 이 설정으로 만 시작하면 공이 점점 높이 뛰어 오르는데 이를 해결하기 위해서는 충돌검사를 연속적으로 이루어지게 해야된다. 따라서 Rigidbody2D의 Collision Detection 부분을 Continuous로 수정 하면 된다. 2. 두번째 방법 AddForce 사용 그럼 땅에 닿았을때 일정한 크기의 힘을 가하면 어떨까 라는 생각으로 AddForce가 떠올르게 되었다 여기에서 ForceMode를 I..

Unity3D - Custom Editor 제작

사용 이유 Editor Mode에서 GameObject의 크기를 조정하거나 이동시킬수 있다. 이러한 조정을 Script에 적용하고 싶은때 사용하는 방법이 Custom Editor이다. 카메라 제어를 통한 예제 1. 기본 스크립트 카메라 위치 제어 코드 using UnityEngine; public class TestCamera : MonoBehaviour { public float height = 5.0f; public float distance = 5.0f; public Transform target; private void LateUpdate() { CameraUpdate(); } public void CameraUpdate() { transform.position = target.position +..

Unity 광고 추가 방법 - UnityAds 최신버전

1. window -> general -> advertisement Legacy install한다 2. ads광고 초기화 코드 -> 여기에서 _androidGameId, _iOSGameId만 추가해 주면 된다. using UnityEngine; using UnityEngine.Advertisements; public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener { [SerializeField] string _androidGameId; [SerializeField] string _iOSGameId; //실제 배포를 원하면 false로 해두자 [SerializeField] bool _testMode = true; private ..

Unity : 카메라 캐릭터 따라다니기 - 중간에 방해물이 있는경우

void LateUpdate() { if (_mode == Define.CameraMode.QuarterView) { RaycastHit hit; Debug.DrawRay(_player.transform.position, _delta, Color.red, 0.1f); //Wall layer이 존재하면 카메라를 그 앞으로 이동시킨다 if (Physics.Raycast(_player.transform.position, _delta, out hit, _delta.magnitude, LayerMask.GetMask("Wall"))) { float dist = (hit.point - _player.transform.position).magnitude * 0.8f; transform.position = _playe..

Unity : 카메라 캐릭터 따라다니기

1. 캐릭터를 따라다니는 카메라 // _delta이 없으면 캐릭터 바로 아래에 카메라가 위치하므로 이 값으로 카메라 위치를 조정한다 Vector3 _delta = new Vector(0.0f, 6.0f, -5.0f); //LateUpdate()는 Update()보다 무조건 늦게 실행된다. //주로 Update()에서 이동이 실행되므로 LateUpdate()에 코드를 넣어줘야 카메라의 버벅거림이 없다 void LateUpdate() { transform.position = _player.transform.position + _delta; } 2. 캐릭터가 보는 방향하고 카메라를 일치 시키기위해서 - 캐릭터의 하위계층에 카메라를 넣는다 Unity : 카메라 캐릭터 따라다니기 - 중간에 방해물이 있는경우 vo..