C# 如何缓慢添加到按钮上的对象Z比例
我想做一个游戏,你开一辆小车,当你按下一个按钮,比如说C,翅膀就会飞出来。我在想最好的办法是把一个胶囊缩放成汽车小孩的圆形翅膀。这些机翼的Z比例通常很小,以至于你看不到它们(0.01),但是当你按C键时,Z值会慢慢增加,直到达到某个点(在我的例子中是0.0435)。我现在得到的只是一个错误,说“不能修改‘Transform.localScale’的返回值,因为它不是一个变量。”C# 如何缓慢添加到按钮上的对象Z比例,c#,unity3d,transform,C#,Unity3d,Transform,我想做一个游戏,你开一辆小车,当你按下一个按钮,比如说C,翅膀就会飞出来。我在想最好的办法是把一个胶囊缩放成汽车小孩的圆形翅膀。这些机翼的Z比例通常很小,以至于你看不到它们(0.01),但是当你按C键时,Z值会慢慢增加,直到达到某个点(在我的例子中是0.0435)。我现在得到的只是一个错误,说“不能修改‘Transform.localScale’的返回值,因为它不是一个变量。” 您的错误是您使用了1等号,但您需要2等号进行比较,例如=: if (wings.localScale.z == 0.0
您的错误是您使用了1等号,但您需要2等号进行比较,例如
=
:
if (wings.localScale.z == 0.01f) { /* ... */ } // you want to compare
该错误具有误导性,当您使用一个等号赋值时,该错误是因为localScale
是一个结构,您必须从中引入一个局部变量,更改其值,然后将其赋回localScale
:
var localScale = wings.localScale;
localScale.z = 0.01f;
wings.localScale = localScale;
回到你的问题,你会得到一个关于浮点比较的警告
下面是比较它们的更好方法:
if (Mathf.Approximately(wings.localScale.z, 0.01f))
{
// ...
}
编辑 调整你的翅膀,根据你的需要改变:
using UnityEngine;
public class Scaler : MonoBehaviour
{
public Transform[] Wings; // drag your wings here in inspector
public KeyCode WingScaleKeyUp = KeyCode.KeypadPlus; // scale up key
public KeyCode WingScaleKeyUpDown = KeyCode.KeypadMinus; // scale down key
public Vector3 WingScaleFactor = new Vector3(0.1f, 0.1f, 0.1f); // scale step
public Vector3 WingScaleSpeed = new Vector3(0.1f, 0.1f, 0.1f); // scale speed
public Vector3 WingScaleMin = new Vector3(0.1f, 0.1f, 0.1f); // scale min
public Vector3 WingScaleMax = new Vector3(2.0f, 2.0f, 2.0f); // scale max
private void Update()
{
if (Wings == null)
return;
foreach (var target in Wings)
{
var p = Input.GetKey(WingScaleKeyUp) ? +1.0f : Input.GetKey(WingScaleKeyUpDown) ? -1.0f : 0.0f;
var q = target.localScale;
var r = Vector3.Scale(WingScaleFactor, WingScaleSpeed * p); // scale axes independently
var s = q + r;
var x = Mathf.Max(WingScaleMin.x, Mathf.Min(WingScaleMax.x, s.x)); // restrict
var y = Mathf.Max(WingScaleMin.y, Mathf.Min(WingScaleMax.y, s.y));
var z = Mathf.Max(WingScaleMin.z, Mathf.Min(WingScaleMax.z, s.z));
target.localScale = new Vector3(x, y, z);
}
}
}
看看这是否有效:
Vector3 tempScale = wings.localScale;
tempScale.z += 0.0335f;
wings.localScale = tempScale;
真是太棒了!我用你的建议修正了if声明,然后使用Easwar Chinraj的想法进行更改。我复制了Easwar Chinraj建议的3行,并将+=更改为-=,但它只更改了一次大小,从0.01更改为0.0435,或从0.0435更改为0.01。我怎样才能使它在我按下按钮时变为下一个尺寸,而不是一次?对不起,让我澄清一下:我希望能够按下C一次,尺寸会发生变化,这取决于它之前的位置。如果它在0.0435,我按C,它会变为0.01。如果它在0.01,我按C,它会变为0.0435,而我不必按住键。也许只是检查一下,如果大小是0.01,我按c键,它会变为0.0435,反之亦然?我不知道该怎么做,我对这个lol太初学了。你可以使用类似
Mathf.movetoward
的东西。
Vector3 tempScale = wings.localScale;
tempScale.z += 0.0335f;
wings.localScale = tempScale;