我试图将手机的掷骰(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,当你来回滚动手机时,它会在两种尺寸之间进行补间。
我可以找到Translate和旋转的代码片段,但没有任何缩放功能..请帮助。
答案 0 :(得分: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)
}
答案 1 :(得分:0)
我相信你想要将值从一个范围(加速度计)缩放到另一个范围(0到100)。如果是这种情况,那么使用钳位功能最好不要这样做。您可以使用map函数执行此操作:
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
值应该是您喜欢的最大加速度计值。这完全取决于你决定。
outValueMin
和outValueMax
值是输出的范围。在您的情况下,那是0
和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;
}