- Home /
Question by
mattkell462 · Feb 27, 2019 at 04:31 AM ·
transformvector3scaleboolean
I'm trying to make a zoom by changing the scale of the object and need constraints
So i have an object that scales larger when I press the UpArrow key and smaller when I press the DownArrow key. I'm wondering how to set constraints for how far to "zoom " in and out. Currently I am using transform.localScale += new Vector3(0.1f, 0.1f, 0); for zooming in and transform.localScale += new Vector3(-0.1f, -0.1f, 0); for zooming out. I was trying to use an if statement for check is the scale of the object was a certain size and to stop zooming in that direction if it was. Here is my script so far.
public bool mapBigger;
public bool mapSmaller;
private Vector3 bigVec;
private Vector3 smallVec;
// Start is called before the first frame update
void Start()
{
mapBigger = true;
mapSmaller = true;
bigVec = new Vector3(2.0f, 2.0f, 0);
smallVec = new Vector3(1.0f, 1.0f, 0);
}
// Update is called once per frame
void Update()
{
if(mapBigger == true)
{
if(Input.GetKey(KeyCode.UpArrow))
{
transform.localScale += new Vector3(0.1f, 0.1f, 0);
}
}
if(transform.localScale == bigVec)
{
mapBigger = false;
mapSmaller = true;
}
if (mapSmaller == true)
{
if (Input.GetKey(KeyCode.DownArrow))
{
transform.localScale += new Vector3(-0.1f, -0.1f, 0);
}
}
if (transform.localScale == smallVec)
{
mapSmaller = false;
mapBigger = true;
}
}
Comment
Answer by WarmedxMints · Feb 27, 2019 at 05:23 AM
If you are only going to be adjusting the scale by the same amount on each axis, then you can do this;
using UnityEngine;
public class ScaleObject : MonoBehaviour
{
public float MinScale = 1f;
public float MaxScale = 2f;
public float ScaleIncrement = 0.01f;
private Vector3 _currentScale;
private void Start()
{
_currentScale = transform.localScale;
}
private void Update()
{
if(Input.GetKey(KeyCode.UpArrow))
{
AdjustScale(ScaleIncrement);
}
else if(Input.GetKey(KeyCode.DownArrow))
{
AdjustScale(-ScaleIncrement);
}
}
private void AdjustScale(float scaleIncrement)
{
var scaleAdjustment = _currentScale.x + scaleIncrement;
//If we are out of bounds, do nothing and return;
if (scaleAdjustment <= MinScale || scaleAdjustment >= MaxScale)
return;
_currentScale.x = scaleAdjustment;
_currentScale.y = scaleAdjustment;
transform.localScale = _currentScale;
}
}
You could, of course, expand on the code in you wanted non-uniform scaling.