Некоторое время я ломал голову над этой проблемой. У меня есть управляемый объект (только подвижный вверх и вниз), который я зажал сверху и снизу. Однако каждый раз, когда активируется определенный триггер, объект сжимается на 10%, пока не достигнет 90% от исходного размера. Проблема возникает, когда я уменьшаю ее. Когда он сжимается, минимальное и максимальное значения зажима не меняются вообще, и это приводит к тому, что объект зажимается до минимума и максимума. Их нужно уменьшать и увеличивать соответственно, чтобы они зажимались в одном и том же месте. Как можно это сделать? Я пробовал так много разных методов, но безрезультатно ...
Вот так я сокращаю свой плеер:
playerWidth /= 1.1f;
playerHeight /= 1.1f;
Vector3 scale = new Vector3(playerWidth, playerHeight, 1f);
playerOneShrink.transform.localScale = scale;
Большое спасибо!
РЕДАКТИРОВАТЬ 1:
Позвольте мне привести пример использования игры, которая может помочь лучше понять мою точку зрения. В основном, думайте о птице, но игрок использует стрелки вверх и вниз для перемещения, а не пробел. Когда птица умирает, птица сбрасывается, но становится меньше. Кажется, что поскольку птица меньше, она теперь перемещается «меньше» вверх и вниз и больше не касается верхней и нижней части экрана. Я хочу, чтобы птица все еще касалась верхней и нижней частей экрана.
РЕДАКТИРОВАТЬ 2:
Так что, очевидно, мое первое редактирование не прояснило столько, сколько я Я подумал, что я покажу свой код для тестовой сцены, в которой я все это пробую. Я не показал изменения minValue и maxValue, потому что с этим я борюсь ...
private static Rigidbody2D playerOneRB;
GameObject player1;
float verticalMovement = 0;
public static float playerHeight = 0.3417f;
public static float playerWidth = 0.05400001f;
public float minValue = 0;
public float maxValue = 10;
public static float p1VerticalSpeed = 3;
public GameObject playerOneShrink;
// Start is called before the first frame update
void Start()
{
playerOneRB = GameObject.FindGameObjectWithTag("P1 Normal").GetComponent<Rigidbody2D>();
player1= GameObject.Find("P1 Normal");
}
// Update is called once per frame
void Update()
{
verticalMovement = Input.GetAxis("Player 1 V"); //Looking for axis defined in our input manager
playerOneRB.velocity = new Vector3(0f, verticalMovement * p1VerticalSpeed, playerOneRB.velocity.x);
Vector3 scale1 = new Vector3(playerWidth, playerHeight, 1f);
Vector3 position = transform.position;
player1.transform.position = new Vector3(player1.transform.position.x, (Mathf.Clamp(player1.transform.position.y, minValue, maxValue)), 0f); //Restricting how far the players can move (aka, not off the screen)
if (Input.GetKeyDown(KeyCode.Alpha1))
{
playerWidth /= 1.1f;
playerHeight /= 1.1f;
scale1 = new Vector3(playerWidth, playerHeight, 1f);
paddleOneShrink.transform.localScale = scale1;
}
}
Вот фото того, что происходит:
1. Фотография положения, которого она достигает до сжатия
2. Фотография положения, которого он достигает после сжатия
Я хочу, чтобы игрок на изображении 2 мог после его сжатия добраться до той же верхней позиции, что и на изображении 1.