2. _mask에 왜 하드코딩으로 값을 넣어주지 않고 쉬프트 연산자를 사용해서 정수값을 넣어주나요??
그냥 넣어도 됩니다.
단지 1 << 형식으로 넣어야 마스크를 만들어준다는게 더 이해하기 쉬울 뿐이죠.
3. 1 << (int)Define.Layer.Ground하게 되었을때 1을 왼쪽으로 9칸 보내면 0001 0000 0000 으로(2진수) 256이 되서? AddLayer의 9번과 안 맞는것 아닌가요...???
음~ 질문이 잘 이해가 안갑니다. AddLayer의 9번과 안 맞는다는게 어떤 의미일까요?
4. 쉬프트연산을 사용하는것이 빠르다면 왜 빠른것인가요??
CPU에서 제공하는 가장 쉽고 단순한 명령어이기 때문입니다.
그리고 데이터 저장 방식도 훨씬 효율적으로 int 하나에 32개의 경우의 수를 담아넣을 수 있습니다.






제가 질문드린 1번과 1번의 답변은 구글링을 통해 이해가 갔습니다.
그래서 지금 _mask에 1 << (int)Define.Layer.Ground | (int)Define.Layer.Monster 이렇게 Ground 레이어와 Monster 레이러를 or 연산자로 int _mask에 할당하셨는데
1. int형에 어떻게 두가지의 정수값을 넣을 수 있는 것인가요?
2. 여기서 두가지의 정수를 _mask에 할당을 받았기 때문에 밑에
int _mask = (1 << (int)Define.Layer.Ground | (1 << (int)Define.Layer.Monster));
void OnMouseClicked(Define.MouseEvent evt)
{
if (_state == PlayerState.Die)
return;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//Debug.DrawR ay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100.0f, _mask ) )
{
_destPos = hit.point;
_state = PlayerState.Moving;
if (hit.collider.gameObject.layer == (int)Define.Layer.Monster)
{
Debug.Log("Monster Clicked!");
Debug.Log(_mask);
}
else
{
Debug.Log("Ground Clicked!");
Debug.Log(_mask);
}
이 코드에서 hit.collider.gameObject.layer == Ground일때와 Monster일때로 구분 할 수 있는것 인가요?