1

我正在尝试将电话的滚动(y)转换为对象的比例,但有大小限制。

我已经使用以下代码成功扩展到无穷大 +- :

void Update () {
   float accelY = Input.acceleration.y;
   transform.localScale += new Vector3(0, accelY, 0);
}

我遇到的问题是规模的最大和最小限制。

我尝试以下列方式使用 Clamp,但最终只是限制了缩放方向,其中 -y(向自己滚动)等于 0,因此不会发生收缩,并且 +y(向自己滚动)以最大速率无限放大0.045f。

transform.localScale += new Vector3(0, Mathf.Clamp(accelY, 0f, 0.045f), 0);

在理想的世界中,我希望最小比例为 y = 1,最大比例为 y = 100,当你来回滚动手机时,它会在两种尺寸之间进行补间。

我可以找到翻译和旋转的代码片段,但没有任何缩放功能。请帮忙。

4

2 回答 2

0
void Update () {
   float accelY = Input.acceleration.y;
   transform.localScale = new Vector3(0, Mathf.Clamp(transform.localScale.y + accelY, 1f, 
   100f), 0)
}

您应该添加 Time.deltaTime 因为 Update 取决于帧/秒:

[SerializeField]
float speed = 10f;
[SerializeField]
float minSize = 1f;
[SerializeField]
float maxSize = 100f;

void Update () {
   float accelY = Input.acceleration.y * Time.deltaTime * speed;
   transform.localScale = new Vector3(0, Mathf.Clamp(transform.localScale.y + accelY, minSize , 
   maxSize ), 0)
}
于 2017-07-09T02:48:53.793 回答
0

我确实相信您想将值从一个范围(加速度计)缩放到另一个 0 - 100。如果是这种情况,那么最好不要使用钳位功能。您可以使用地图功能来做到这一点:

float mapValue(float mainValue, float inValueMin, float inValueMax, float outValueMin, float outValueMax)
{
    return (mainValue - inValueMin) * (outValueMax - outValueMin) / (inValueMax - inValueMin) + outValueMin;
}

Input.acceleration.y将加速度计值 ( ) 作为主要值传递。该inValueMin值应该是您喜欢的最小加速度计值。该inValueMax值应该是您喜欢的最大加速度计值。这完全由您决定。

outValueMinoutValueMax值是输出的范围。在你的情况下,那是0and 100

像下面这样的东西应该让你开始:

//Scale Min and max
public float scaleMin = 0;
public float scaleMax = 100f;

//Accelerometer min/max. Find this with Debug.Log(Input.acceleration.y);
public float accelYMin = -10;
public float accelYMax = 10;

void Update()
{
    float accelY = Input.acceleration.y;
    float scaledVal = mapValue(accelY, accelYMin, accelYMax, scaleMin, scaleMax);
    transform.localScale = new Vector3(0, scaledVal, 0);
}

float mapValue(float mainValue, float inValueMin, float inValueMax, float outValueMin, float outValueMax)
{
    return (mainValue - inValueMin) * (outValueMax - outValueMin) / (inValueMax - inValueMin) + outValueMin;
}
于 2017-07-09T03:19:58.077 回答