private void OnMouseEvent(Define.MouseEvent evt) { switch (State) { case Define.State.Idle: OnMouseEvent_IdleRun(evt); break; case Define.State.Moving: OnMouseEvent_IdleRun(evt); break; case Define.State.Skill: // 마우스를 떼면 공격 멈추기 if (evt == Define.MouseEvent.PointerUp) { _stopSkill = true; } break; case Define.State.Die: break; default: break; } }
//클릭 관련 이벤트가 발생하면 inputManager에서 델리게이트로 실행 하고 있음. void OnMouseEvent(Define.MouseEvent evt) { //캐릭터의 상태에 따른 함수 실행. switch (State) { case Define.State.Idle: case Define.State.Moving: OnMouseEvent_IdleRun(evt); break; case Define.State.Skill: { if (evt == Define.MouseEvent.PointerUp) { _stopSkill = true; } } break; case Define.State.SkillQ: case Define.State.SkillW: case Define.State.SkillE: case Define.State.SkillR: { StartCoroutine(CheckIfSkillisFinish()); } break; } }
void OnMouseEvent(Define.MouseEvent evt) { if (evt == Define.MouseEvent.OnPressed) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); LayerMask mask = LayerMask.GetMask("Floor"); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100.0f, mask)) { DestPos = hit.point; // _destPos.y = transform.position.y; input = (DestPos - transform.position).normalized; } if (State != Define.State.Moving && State != Define.State.Idle) { State = Define.State.Moving; } } if (evt == Define.MouseEvent.ButtonDown) { //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //LayerMask mask = LayerMask.GetMask("Floor"); //RaycastHit hit; //if (Physics.Raycast(ray, out hit, 100.0f, mask)) //{ // DestPos = hit.point; // // _destPos.y = transform.position.y; // input = (DestPos - transform.position).normalized; //} //if (State != Define.State.Moving) State = Define.State.Moving; } if (evt == Define.MouseEvent.ButtonUp) { } if (evt == Define.MouseEvent.None) { if (DestPos == Vector3.zero) { return; } float remainDist = (DestPos - transform.position).magnitude; if (remainDist < 0.05f) { if (State != Define.State.Wait && State != Define.State.Idle) { State = Define.State.Wait; } } } }
void OnMouse(Define.MouseEvent evt) { if (evt == Define.MouseEvent.LClick) { StartCoroutine("MoveLoop"); MoveToX(); } //if (Input.GetMouseButton(0)) // MoveToX(); }
// 정지/이동 상태일때 void OnMouseEvent_IdleRun(Define.MouseEvent evt) { RaycastHit hit; // 마우스 클릭시 레이 캐스팅 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); bool raycastHit = Physics.Raycast(ray, out hit, 100.0f, _layerMask); //래이케이스팅 저장 => 어떤 클릭을 햇는지 Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f); switch (evt) { case Define.MouseEvent.PointerDown: { //몬스터 타겟인지 땅클릭인지 구분 if (raycastHit) { _desPos = hit.point; State = Define.State.Moving; Debug.Log($"레이캐스트 : {hit.collider.gameObject.tag} / {hit.collider.gameObject.name}"); _stopSkill = false; if (hit.collider.gameObject.layer == (int)Define.Layer.Monster) { Debug.Log("Monster Click!"); _lockTarget = hit.collider.gameObject; //몬스터 타겟 저장 //TODO : 몬스터 커리시 공격처리 } else { _lockTarget = null; Debug.Log("Not Monster Click! "); } } } break; case Define.MouseEvent.Press: { if (_lockTarget == null && raycastHit) { _desPos = hit.point; } } break; case Define.MouseEvent.PointerUp: _stopSkill = true; break; } }
private void OnMouseEvent_IdleRun(Define.MouseEvent evt) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //Debug.DrawRay(Camera.main.transform.position, ray.direction * 100f, Color.red, 0.5f); bool raycastHit = Physics.Raycast(ray, out hit, 100f, _mask); switch (evt) { // 마우스를 한번 눌렀을 때 case Define.MouseEvent.PointerDown: if (raycastHit) { _destPos = hit.point; State = Define.State.Moving; _stopSkill = false; if (hit.collider.gameObject.layer == (int)Define.Layer.Monster) { _lockTarget = hit.collider.gameObject; } else { _lockTarget = null; } } break; // 계속 누르고 있는 상태 case Define.MouseEvent.Press: if (_lockTarget == null && raycastHit) { _destPos = hit.point; } break; // 마우스를 뗐을 때 case Define.MouseEvent.PointerUp: _stopSkill = true; break; //case Define.MouseEvent.Click: // break; } }
void OnMouseEvent_IdleRun(Define.MouseEvent evt) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); bool raycastHit = Physics.Raycast(ray, out hit, 100.0f, _mask); //100.0f 거리를 정한다. // Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f); // 1.0f -> 1초만 유지 switch (evt) { case Define.MouseEvent.PointerDown: { if (raycastHit) { State = Define.State.Moving; _destPos = hit.point; _stopSkill = false; if (hit.collider.gameObject.layer == (int)Define.Layer.Monster) { _lockTarget = hit.collider.gameObject; } else { _lockTarget = null; } } } break; case Define.MouseEvent.Press: { if (_lockTarget == null && raycastHit) { _destPos = hit.point; } } break; case Define.MouseEvent.PointerUp: { _stopSkill = true; } break; } }
void MouseInput(Define.MouseEvent mouseEvent) { if (CameraController.camMode == Define.CamMode.QuarterView) { Camera mainCamera = Camera.main; Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); int mask = 1 << 9; Debug.DrawRay(mainCamera.transform.position, ray.direction * 100.0f, Color.magenta, 1.0f); if (Physics.Raycast(ray, out var hitInfo, 100.0f, mask)) { destPoisition = hitInfo.point; currState = PlayerState.Running; } } }
void OnMouseClicked(Define.MouseEvent evt) { if (_state == PlayerState.Die) { return; } Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100.0f, LayerMask.GetMask("Wall"))) { _desPos = hit.point; _state = PlayerState.Moving; } }
void OnMouseEvent_IdleRun(Define.MouseEvent evt) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); bool raycastHit = (Physics.Raycast(ray, out hit, 100.0f, _mask)); switch (evt) { case Define.MouseEvent.PointerDown: { if (raycastHit) { _destPos = hit.point; State = Define.State.Moving; _stopSkill = false; if (hit.collider.gameObject.layer == (int)Define.Layer.Monster) { _lockTarget = hit.collider.gameObject; } else { _lockTarget = null; } } } break; case Define.MouseEvent.Press: { if (_lockTarget == null && raycastHit) { _destPos = hit.point; } } break; case Define.MouseEvent.PointerUp: _stopSkill = true; break; } }
void OnMouseEvent(Define.MouseEvent evt) { switch (State) { case PlayerState.Idle: OnMouseEvent_IdelRun(evt); break; case PlayerState.Moving: OnMouseEvent_IdelRun(evt); break; case PlayerState.Skill: { if (evt == Define.MouseEvent.PointerUp) { _stopSkill = true; } } break; } }
void OnMouseClicked(Define.MouseEvent _event) { if (playerState == PlayerState.Dead) { return; } Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; Debug.DrawRay(Camera.main.transform.position, ray.direction * 100f, Color.red, 1.0f); LayerMask mask = LayerMask.GetMask("Monster") | LayerMask.GetMask("Wall"); //int mask = (1 << 8) | (1 << 9);//비트플래그 방식으로 8번레이어만 사용하려면 1을8번까지 쉬프트 연산후에 레이케스트할때 마스트변수에 넣어주면된다. 그리고 | 즉 or 연산을 하게되면 8번과 9번이 동시에 켜지게되면서 두개의 레이어를 동시에사용하게 할 수 있다. if (Physics.Raycast(ray, out hit, 100f, mask)) { desPos = hit.point; playerState = PlayerState.Moving; Debug.Log("" + hit.collider.gameObject.name); } }
public void ChangeColor(Define.MouseEvent mousebtn) { switch (mousebtn) { //다음 큐브 색상으로 인덱스를 변경 case Define.MouseEvent.LClick: //증가 { m_colorIndex++; if (m_colorIndex > m_cubeSpawner.CubeColors.Length - 1) // 0,1,2 0,1,2 { m_colorIndex = m_cubeSpawner.CubeColors.Length - 1; } } break; case Define.MouseEvent.RClick: //감소 { m_colorIndex--; if (m_colorIndex <= 0) { m_colorIndex = 0; } } break; } //if (m_colorIndex < m_cubeSpawner.CubeColors.Length - 1) //{ // m_colorIndex++; //} //else // m_colorIndex = 0; //실제 큐브 색상 변경 m_meshRenderer.material.color = m_cubeSpawner.CubeColors[m_colorIndex]; }
//캐릭터가 땅을 클릭할때 실행되는 함수. void OnMouseEvent_IdleRun(Define.MouseEvent evt) { //True ->무언가를 수확중일때 //수확중에 움직이면 수확하는 것을 멈춤. if (_LoadingBar != null) { Managers.UI.ClosePopupUI(_LoadingBar); } if (State == Define.State.DIe) { return; } //스크린에서 부터 Raycast를 쏴서 부딪친것을 hit에 저장시킴. RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); bool raycastHit = Physics.Raycast(ray, out hit, 100.0f, _mask); switch (evt) { //최초로 마우스를 눌렀을때 실행. case Define.MouseEvent.PointerDown: { if (raycastHit) { //부딪친 오브젝트의 좌표를 가져 온 후 //공격을 하고 있었다면 멈추고 움직 임. _desPos = hit.point; State = Define.State.Moving; _stopSkill = false; //Raycast에 부딪친 좌표가 만약 몬스터라면 _LockTarget에 값을 넣어 줌 if (hit.collider.gameObject.layer == (int)Define.Layer.Monster) { _lockTarget = hit.collider.gameObject; } else { _lockTarget = null; } } } break; //마우스를 누르고 있을때 실행. case Define.MouseEvent.Press: { //실시간으로 부딪친 위치를 바꿔 줌. if (_lockTarget == null && raycastHit) { _desPos = hit.point; } } break; //땠을때 실행. //공격하고 있었다면 공격을 멈춤 case Define.MouseEvent.PointerUp: _stopSkill = true; break; } }