void Update() { if (!playerCtrl.activeSts) { return; } float vpad_vertical = 0.0f; float vpad_horizontal = 0.0f; zFOXPAD_BUTTON vpad_btnA = zFOXPAD_BUTTON.NON; zFOXPAD_BUTTON vpad_btnB = zFOXPAD_BUTTON.NON; if (vPad != null) { vpad_vertical = vPad.vertical; vpad_horizontal = vPad.horizontal; vpad_btnA = vPad.buttonA; vpad_btnB = vPad.buttonB; } float joyMv = Input.GetAxis("Horizontal"); float vpadMv = vpad_horizontal; vpadMv = Mathf.Pow(Mathf.Abs(vpadMv), 1.5f) * Mathf.Sign(vpadMv); playerCtrl.ActionMove(joyMv + vpadMv); if (Input.GetButtonDown("Jump") || vpad_btnA == zFOXPAD_BUTTON.DOWN) { playerCtrl.ActionJump(); return; } if (Input.GetButtonDown("Fire1") || Input.GetButtonDown("Fire2") || Input.GetButtonDown("Fire3") || vpad_btnB == zFOXPAD_BUTTON.DOWN) { if (Input.GetAxisRaw("Vertical") + vpad_vertical < 0.5f) { playerCtrl.ActionAttack(); } else { playerCtrl.ActionAttackJump(); } } if (Input.GetAxisRaw("Vertical") > 0.7f) { if (actionEtcRun) { playerCtrl.ActionEtc(); actionEtcRun = false; } } else { actionEtcRun = true; } }
void CheckButtonUp(RaycastHit hit, int i) { if (hit.collider.gameObject == sprButtonA.gameObject) { buttonA = zFOXPAD_BUTTON.UP; buttonAindex = i; sprButtonA.color = new Color(1.0f, 1.0f, 1.0f); } else if (hit.collider.gameObject == sprButtonB.gameObject) { buttonB = zFOXPAD_BUTTON.UP; buttonBindex = i; sprButtonB.color = new Color(1.0f, 0.0f, 0.0f); } }
void CheckButtonMove(RaycastHit hit, int i) { if (hit.collider.gameObject == sprButtonA.gameObject) { buttonA = zFOXPAD_BUTTON.HOLD; buttonAindex = i; buttonAHit = true; } else if (hit.collider.gameObject == sprButtonB.gameObject) { buttonB = zFOXPAD_BUTTON.HOLD; buttonBindex = i; buttonBHit = true; } }
void CheckButtonNon() { if (!buttonAHit) { buttonA = zFOXPAD_BUTTON.NON; buttonAindex = -1; sprButtonA.color = new Color(0.0f, 0.0f, 0.0f); } if (!buttonBHit) { buttonB = zFOXPAD_BUTTON.NON; buttonBindex = -1; sprButtonB.color = new Color(0.0f, 0.0f, 0.0f); } }
void CheckButtonDown(RaycastHit hit, int i) { if (hit.collider.gameObject == sprButtonA.gameObject) { buttonA = zFOXPAD_BUTTON.DOWN; buttonAindex = i; buttonAHit = true; sprButtonA.color = new Color(1.0f, 0.0f, 0.0f); } else if (hit.collider.gameObject == sprButtonB.gameObject) { buttonB = zFOXPAD_BUTTON.DOWN; buttonBindex = i; buttonBHit = true; sprButtonB.color = new Color(1.0f, 0.0f, 0.0f); } }
void Update() { if (autoLayoutUpdate) { RunAutoLayout(); } if (buttonA == zFOXPAD_BUTTON.UP) { buttonA = zFOXPAD_BUTTON.NON; buttonAindex = -1; } if (buttonB == zFOXPAD_BUTTON.UP) { buttonB = zFOXPAD_BUTTON.NON; buttonBindex = -1; } buttonAHit = false; buttonBHit = false; if (Input.touchCount > 0) { bool objectTouched = false; for (int i = 0; i < Input.touchCount; i++) { Ray ray = uicam.ScreenPointToRay(Input.GetTouch(i).position); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity)) { TouchPhase tp = Input.GetTouch(i).phase; if (tp == TouchPhase.Began) { CheckButtonDown(hit, i); objectTouched = true; } else if (tp == TouchPhase.Moved || tp == TouchPhase.Stationary) { CheckButtonMove(hit, i); objectTouched = true; } else if (tp == TouchPhase.Ended || tp == TouchPhase.Canceled) { CheckButtonUp(hit, i); objectTouched = true; } } } if (!objectTouched) { CheckButtonNon(); } } else { Ray ray = uicam.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity)) { if (Input.GetMouseButtonDown(0)) { CheckButtonDown(hit, 0); } else if (Input.GetMouseButton(0)) { CheckButtonMove(hit, 0); } else if (Input.GetMouseButtonUp(0)) { CheckButtonUp(hit, 0); } else { CheckButtonNon(); } } else { CheckButtonNon(); } } //slide 처리 movEnable = false; if (Input.touchCount > 0) { for (int i = 0; i < Input.touchCount; i++) { if (i != buttonAindex && i != buttonBindex) { TouchPhase tp = Input.GetTouch(i).phase; if (tp == TouchPhase.Began) { if (CheckSlidePadDown(Input.GetTouch(i).position)) { break; } } else if (tp == TouchPhase.Moved || tp == TouchPhase.Stationary) { if (CheckSlidePadMove(Input.GetTouch(i).position)) { break; } } else if (tp == TouchPhase.Ended || tp == TouchPhase.Canceled) { CheckSlidePadUp(); } } } } else { if (Input.GetMouseButtonDown(0)) { if (Input.mousePosition.x / Screen.width < 0.5f) { CheckSlidePadDown((Vector2)Input.mousePosition); } } else if (Input.GetMouseButton(0)) { CheckSlidePadMove((Vector2)Input.mousePosition); } else if (Input.GetMouseButtonUp(0)) { CheckSlidePadUp(); } } // 이것도 왜 하는지 모르겠다. if (movEnable == false) { movPadEnable = false; mov = Vector2.zero; } // 이것도 왜 하는지 모르겠다. switch (padValMode) { case zFOXPAD_SLIDEPADVALUEMODE.PAD_XY_SCREEN_WH: horizontal = mov.x * padSensitive / Screen.width; vertical = mov.y * padSensitive / Screen.height; break; case zFOXPAD_SLIDEPADVALUEMODE.PAD_XY_SCREEN_WW: horizontal = mov.x * padSensitive / Screen.width; vertical = mov.y * padSensitive / Screen.width; break; case zFOXPAD_SLIDEPADVALUEMODE.PAD_XY_SCREEN_HH: horizontal = mov.x * padSensitive / Screen.height; vertical = mov.y * padSensitive / Screen.height; break; } // Mathf.clamp 함수를 쓰는 게 더 좋을 듯 if (horizontal < -1.0f) { horizontal = -1.0f; } if (horizontal > 1.0f) { horizontal = 1.0f; } if (vertical < -1.0f) { vertical = -1.0f; } if (vertical > 1.0f) { vertical = 1.0f; } if (Mathf.Abs(horizontal) < horizontalStartVal) { horizontal = 0.0f; } if (Mathf.Abs(vertical) < verticalStartVal) { vertical = 0.0f; } Vector3 pos = new Vector3(horizontal / (padSensitive), vertical / (padSensitive), 0.0f); sprSlidePad.transform.localPosition = pos; }