본문 바로가기

C#17

레이캐스트(Raycast) 레이캐스트는 어떤 위치에서 광선을 발사해서 그 광선이 닿는 물체가 있는지 검사하는 방식 만들어볼 것: - FPS 플레이어가 응시하고 있는 눈앞의 사물을 다른 곳으로 옮기는 작업 - 카메라의 정 중앙으로 광선을 쏴서 레이캐스트 통해 눈 앞의 사물 검사 1. Cube 광선에 감지 public class RayInteraction : MonoBehaviour { public LayerMask whatIsTarget; //카메라의 정 중앙에서 앞쪽으로 향하는 광선을 쏠 것임 private Camera playerCam; //광선이 날아가는 거리 public float distance = 100f; void Start() { //현재 활성화된 메인 카메라를ㅔ playerCam으로 playerCam = Camera.. 2021. 7. 23.
제네릭 제네릭: 여러가지 타입을 한방에 대응 상황: Print 함수를 숫자 뿐만 아니라 문장이나 다른 타입에 대해서도 끼우고 싶다. 이때 오버로딩을 사용하거나 별개의 이름을 가진 함수를 만들어서 여러가지 파생형을 직접 만들 수 있음. 이럴 때 제네릭을 만들어서 여러가지 타입을 한방에 대응할 수 있음 제네릭의 서식은 함수 이름 다음에 를 사용해서 가상의 타입의 이름을 아무렇게나 지어줌 등등 다 가능. 근데 보통 라고 많이 씀. 그 다음 T 형태의 타입을 받는다고 명시하면 됨 이렇게 하면 Print 함수가 T 타입에 맞춰서 발동됨 안에 사용하고 싶은 타입을 명시하면 Print 함수가 그 타입에 맞춰서 발동을 시킴 유니티에서 자주 쓰던 거: 안의 타입에 대해서 어떤 컴포넌트를 맞추어 발동시킬지를 명시할 수 있었.. 2021. 7. 21.
액션 + 람다 함수 액션: C#에서 제공하는 미리 사용하기 쉽게 만들어진 델리게이트. 람다 함수: 마치 오브젝트를 탄생시키듯 코드 도중에 이름이 없는 함수를 탄생시키고 마치 변수에 값을 넣어주듯 여기저기 줄 수 있음. 액션: 입력과 리턴값이 없는 형태의 함수를 대행하는 델리게이트를 작성할 일이 많으니까 처음부터 그러한 형태의 델리게이트를 C# 내부에 타입을 선언해놓음. using Systyem을 추가하면 Work work; 를 Action work; 로 바꿀 수 있음 이 Action은 리턴값이 없고 입력값이 없는 델리게이트 타입임. 람다함수: 이름이 없는 함수를 즉석으로 만들어내는 것 man이라는 친구를 대상으로 하는 함수 + 실제 구현 man이라는 입력을 받아 그걸 어떻게 사용하는지 만듦. 함수이면서 오브젝트 화살표연산자.. 2021. 7. 21.
이벤트 이벤트 사용 이유: 두 오브젝트 사이에 커플링이라고 부르는 직접도를 없애기 위해서 이벤트는 기본적으로 publisher와 subscriber로 나눠서 두개 사이의 커플링을 낮춰주고 동시에 델리게이트를 사용할 때 이벤트란 키워드를 사용하면 좀 더 엄격하게 델리게이트를 이벤트에 맞춰 사용할 수 있단 얘기! 커플링: 두 오브젝트가 잘 알고지내고 하드하게 연결되어있는 정도 커플링이 심하다: A, B 오브젝트가 서로 심하게 엮어있어서 A가 없어지면 B가 영향을 받기 떄문에 코드를 수정하기 쉽지 않다는 것. 코드를 깔끔하게? : 커플링을 줄이는데 집중 publisher : 어떤 이벤트를 쥐고 발동 시키는 측 subscriber : 어떤 이벤트에 자기 자신의 기능을 등록시켜놓고 대기하는 측 publisher은 이벤트.. 2021. 7. 21.
델리게이트 델리게이트: 어떠한 기능을 목록에 추가해두면 델리게이트가 기능들을 대신 발동시켜줌. 1) 대신해줄 친구의 서식을 명시하고 2) 그러한 델리게이트 타입의 변수를 새로 만들어준 다음, 3) 대행해줄 친구를 명단에 등록! 4) 그 다음에 그 친구를 발동만 시켜주면 됨! 상황: Calculator 오브젝트를 만들어보자 Update()함수에서 어떤 계산을 할지 명시를 해줘야 함. 즉 계산기가 어떤 계산을 할지 계산 하는 순간에 알고 있어야 함. 이 방법의 단점은 계산하고 싶은게 달라졌을 때 Update안의 코드를 바꾸지 않는 이상 변경사항을 적용할 수 없음 Update 안에는 코드 바꿀 필요 없이 계산 한다는 것만 명시해주고 계산의 내용은 실시간으로 바꿀 수 있게 어떤 사람이 죽기 전에 유언 리스트에다 자기가 하.. 2021. 7. 20.
유니티 이벤트 이벤트: 이벤트가 발동 되면 그 사건에 등록해놓은 기능들이 자동으로 딸려들어가서 같이 발동이 됨 이벤트를 발동시키는 측, 그 이벤트에 기능을 등록해놨던 측 모두 서로에게 관심이 없음. 즉 이벤트에 기능을 등록해놓은 오브젝트들은 기능을 등록해놓고 그게 언제 발동될지 신경을 전혀 안씀. 또한 이벤트를 발동시키는 측도 자기 이벤트에 어떤 친구들이 등록이 됬는지 전혀 신경쓰지 않고 이벤트를 발동시켜버림. 장점: 서로에게 관심이 없기 때문에 코드가 꼬일 일이 없음. 상황 설정: 플레이어가 죽었을 때 여러가지 기능이 동작해야함 UI에 플레이어가 죽었다고 뜨고, 도전 과제가 해제되고, 게임을 재시작하는 기능 등을 발생시켜야함. 이 기능들을 플레이어의 죽음과 연계시킬 때 코드를 좀 더 깔끔하게 짜고 싶음 Player가.. 2021. 7. 20.