[C#] Raycast2D


어제 저녁부터 마우스 포지션에 있는 오브젝트가 레이에 맞지 않아서

유니티 레퍼런스, 구글링 등을 통해 Raycast2D에 대해 알아보았다.


정말 틀린 곳을 도무지 모르겠는데 자꾸만 오브젝트가 레이에 맞지 않더라..



일단 첫 줄의 Vector2 pos = Camera.main.ScreenToWorldPoint (Input.mousePosition);

화면상의 마우스 포인트를 월드 좌표로 바꾸어서 pos란 변수에 저장.


두 번째.

Ray2D 구조체를 생성해준다.

Ray2D의 첫 번째 변수는 레이가 만들어질 위치. 쉽게 말해 총구라 할 수 있다.

두 번째 변수는 레이가 어떤 방향으로 날아갈 것인가. 총구의 방향이라 할 수 있다.

여기까지 ok


세 번째.

RaycastHit2D가 달라는대로 변수를 넘겨준다.

1. 레이가 만들어질 위치 2. 레이가 날아갈 방향 3. 어디까지 날아갈 것인가(거리) 4. 레이어 마스크

앞서만든 Ray2D구조체의 첫 번째 변수 --> origin

두 번째, 방향을 가리키는 변수 --> direction

세 번째, 네 번째는 생략 가능

오키 여기까지도 문제없음


그런데.. 왜 오브젝트가 검출이 안되냐 이 말이지..

콜라이더도 다 붙여 놓았는데..


정말 이거 때문에 이 더운날 반나절 동안 혼자 씩씩대면서 열폭하던 중...

2D게임 만들면서 평면으로 보지 않고 있었네..?



Passenger - Let Her Go


오늘 같이 비오는 날 듣기 좋은 잔잔한 노래 Passenger의 Let Her Go를 포스팅 해보겠습니다.

사실 요즘 EDM, 힙합과 같은 음악이 대세를 이루고 있어 이러한 포크(?)류의 음악은

제 또래들(20대) 사이에서는 크게 인기가 없는 듯 합니다.



아일랜드 감성을 노래하는 Passenger는 2013년 이 Let Her Go라는 노래로 이름을 알리기 시작합니다.

그는 잔잔한 분위기와 함께 편지를 읽듯 편안하면서도 마음에 와닿는 가사를 노래합니다.


이 노래 역시나 많은 생각을 하게 하는 가사를 담고 있네요.

Passenger - Let her go 

 

Well you only need the light when it's burning low 

당신은 빛이 사라질 즈음에야 빛을 필요로 하고

Only miss the sun when it starts to snow 

눈이 내리기 시작할 즈음에야 햇살을 그리워하고

Only know you love her when you let her go 

그녀를 떠나보낼 때야 그녀를 사랑한다는 걸 알게 되죠
 

Only know you've been high when you're feeling low

우울할 때에야 행복했다는 걸 깨닫고 

Only hate the road when you're missing home

집이 그리워 질 때야 지나온 길을 싫어지고  

Only know you love her when you let her go

그녀를 보내야 할때야 그녀를 사랑한다는 걸 알게 되죠.

And you let her go 

그리고 당신은 그녀를 떠나보내죠

 
Staring at the bottom of your glass 

당신은 유리잔 밑을 바라보며

Hoping one day you'll make a dream last

언젠가 꿈이 이루어질 거라 바라고 있죠

But dreams come slow and they go so fast 

하지만 그 꿈은 천천히 다가오고 순식간에 사라져요

 

You see her when you close your eyes 

당신은 눈을 감을 때 그녀를 볼 수 있어요

Maybe one day you'll understand why 

어쩌면 언젠가 당신도 알게 될거예요 

Everything you touch surely dies 

왜 스쳐간 모든 것들이 그렇게 사라지는지

Staring at the ceiling in the dark

어둠속에서 천장을 바라보면서

Same old empty feeling in your heart

마음속에 오래 간직했던 공허함을 느껴요

'Cause love comes slow and it goes so fast 

왜냐면 사랑은 천천히 다가오고 순식간에 사라지기 때문이죠 

Well you see her when you fall asleep

당신은 잠이 들 즈음에야 그녀를 볼 수 있어요

But never to touch and never to keep 

하지만 만질 수도 없고, 잡을 수도 없죠

'Cause you loved her too much and you dive too deep 

왜냐면 당신은 그녀를 너무 사랑했고, 너무 깊게 빠져 들었으니까요


너무나 익숙해서 몰랐던 것을 잃고나서야 후회한다는 그런 내용입니다.

잔잔하면서도 많은 생각을 하게하는 노래. 오늘 같이 비오는 날 듣기에 좋을 것 같습니다.



1. Func 델리게이트


결과를 반환하는 메소드를 참조하기 위해 만들어졌습니다.

.NET 프레임워크에는 모두 17가지 버전의 Func 델리게이트가 있습니다.


ex)

public delegate TResult Func <out TResult>()

public delegate TResult Func <in T, out TResult> (T arg)

public delegate TResult Func <in T1, in T2, out TResult> (T1 arg1, T2 arg2)

....

public delegate TResult Func <in T1, in T2, ... in T16, out TResult> (T1 arg1, T2 arg2, .... , T16 arg16)


Func 델리게이트는 입력 매개 변수가 하나도 없는 것부터 16개까지 다양한 버전이 존재합니다.

매개 변수가 16개 이상인 경우, 혹은 ref, out한정자로 수식된 매개 변수를 사용해야 하는 경우가

아니라면 .NET에서 제공하는 기본 Func를 사용하면 되겠습니다.


ex)

using System;


namespace FuncTest{


class MainApp{


static void Main(string[] args){


Func<int> func1 = () => 10;

Console.WriteLne("func1 = {0}", func1());


Func<int,int> func2 = (x) => x*2;

Console.WriteLne("func2= {0}", func2(2));


Func<double, double, double> func3 = (x,y) => x*y;

Console.WriteLne("func3 = {0}", func3(2.0 , 3.0));


}

}

}


실행 결과


func1 = 10

func2 = 4;

func3 = 6.00000000000000



2. Action 델리게이트


Action 델리게이트는 Func 델리게이트과 거의 같으나, Action 델리게이트는 변환 형식이 없습니다.

Action 델리게이트도 Func 델리게이트와 마찬가지고 .NET 프레임워크에 17가지 버전이 선언되어 있습니다.


ex)

public delegate void Action <>()

public delegate void Action <in T> (T arg)

public delegate void Action <in T1, in T2> (T1 arg1, T2 arg2)

....

public delegate void Action <in T1, in T2, ... in T16> (T1 arg1, T2 arg2, .... , T16 arg16)


Func와는 달리 결과를 반환하지 않고 일련의 작업을 수행하는 것이 목적입니다.


ex)


using System;


namespace ActionTest{


class MainApp{


static void Main(){


Action ac1 = () => Console.WriteLine("Action()");

act1();


int result = 0;

Action<int> ac2 = (x) => result = x * x;


ac2(3);

Console.WriteLine("result = {0}", result);


Action<double, double> ac3 = (x,y) = > {


double pi = x/y;

Console.WriteLine("Action<T1, T2>({0}, {1}) = {2}", x,y,pi);

};


ac3(22.0, 7.0);

}

}

}


실행 결과


Action()

result = 9

Action<T1, T2>(22, 7) = 3.14285714285714





+ Recent posts