Вопрос Unity Mathf.Clamp на мобильном телефоне

Я использую этот код:

    void Update () {
    if (SystemInfo.deviceType == DeviceType.Desktop) 
    {
        float xMovement = Input.GetAxis("Horizontal");
        this.rb.velocity = new Vector2(xMovement, 0) * this.speed;


    } else if (SystemInfo.deviceType == DeviceType.Handheld) 
    {
        if (Input.touchCount > 0) 
        {
            Touch touch = Input.GetTouch(0);
            if (touch.position.x > this.westTouchBound && touch.position.x < this.eastTouchBound) 
            {

            } else 
            {
                this.speed = this.ballRigidBody.velocity.magnitude * 2.0f;

                Vector3 location = this.gameCamera.ScreenToWorldPoint(touch.position);

                Vector3 delta = location - this.transform.position;
                Vector2 course = new Vector2(delta.x, 0.0f);
                course.Normalize();
                this.rb.velocity = course * speed;

            }

        } else 
        {
            this.rb.velocity = new Vector2(0, 0);
        }

    }
    float eastMax = this.gameController.screenWidth / 2.0f - this.gameController.wallThickness - this.gameController.barWidth / 2.0f;
    float westMax = -eastMax;

    float actualX = Mathf.Clamp(this.transform.position.x, westMax, eastMax);
    this.transform.position = new Vector3(actualX, this.transform.position.y, this.transform.position.z);

}

На Mac это работает просто отлично, но на iOS или Android бар просто отскакивает от границы, и после этого возвращается, и это выглядит ужасно. Я изучал логи, и кажется, что проблема в физике, похоже, что ПК воспринимает это как-то иначе, чем мобильный. Я перепробовал много вещей, перемещая код в FixedUpdate, LateUpdate, пытался изменить элементы управления, даже пытался назначить положение жесткого тела, и это все еще не работает.

1 ответ

Я столкнулся с чем-то подобным,

просто замени это

float actualX = Mathf.Clamp(this.transform.position.x, westMax, eastMax);

с этим

if(actualX < westMax)
{
    actualX = westMax;
}
else if(actualX > eastMax)
{
    actualX = eastMax;
}

похоже зажим сломан или что-то

Другие вопросы по тегам