Unity3D:添加与位置相关的带电力
Unity3D: Adding charged force in relation to position
我正在尝试制作一个 "kind of" 模拟 "worms" 游戏射击的游戏。玩家可以选择物体的位置(圆形),然后施加到物体上的力应沿其指向的方向移动。我尝试使用 AddForce(transform.right)
代码,但它只会向右移动。 (2D BoxCollider 和 RigidBody2D)
然后是困难的部分,让玩家通过充能来选择势力。当玩家按住 "f" 键时,我希望功率上升到某个点。一旦达到那个点,我希望它再次下降然后再次上升,这样玩家就可以选择他想要的力量。我不知道该怎么做。
我已经有一段时间没有编写 Unity 代码了,所以我的语法可能存在一些小错误,但它应该能让您了解如何完成此操作。循环的最佳选择是使用协程来不阻塞主线程。
在 Update() 中检查 F 的 'on key down' 并启动这个协程:
IEnumerator Cycle()
{
float max = 10.0f;
float min = 1.0f;
float interval = 0.5f;
do
{
for(int i=min;i<max;i++)
{
PowerValue = i;
yield return new waitforseconds(interval);
if(!input.getkey(f))
break;
}
for(int i=max;i>min;i--)
{
PowerValue = i;
yield return new waitforseconds(interval);
if(!input.getkey(f))
break;
}
} while(input.getkey(f));
}
然后在 update() 中使用 powerValue 和 getKeyUp(f)
此处将 PowerValue 设置为参数,以防止代码将最大值和最小值设置在 1 到 10 范围之外(可配置)
private float powerValue = 1.0f;
public float PowerValue
{
get { return powerValue; }
set {
if(value>10f)
powerValue=10f;
else if (value<1f)
powerValue=1f;
else
powerValue=value;
}
}
我正在尝试制作一个 "kind of" 模拟 "worms" 游戏射击的游戏。玩家可以选择物体的位置(圆形),然后施加到物体上的力应沿其指向的方向移动。我尝试使用 AddForce(transform.right)
代码,但它只会向右移动。 (2D BoxCollider 和 RigidBody2D)
然后是困难的部分,让玩家通过充能来选择势力。当玩家按住 "f" 键时,我希望功率上升到某个点。一旦达到那个点,我希望它再次下降然后再次上升,这样玩家就可以选择他想要的力量。我不知道该怎么做。
我已经有一段时间没有编写 Unity 代码了,所以我的语法可能存在一些小错误,但它应该能让您了解如何完成此操作。循环的最佳选择是使用协程来不阻塞主线程。
在 Update() 中检查 F 的 'on key down' 并启动这个协程:
IEnumerator Cycle()
{
float max = 10.0f;
float min = 1.0f;
float interval = 0.5f;
do
{
for(int i=min;i<max;i++)
{
PowerValue = i;
yield return new waitforseconds(interval);
if(!input.getkey(f))
break;
}
for(int i=max;i>min;i--)
{
PowerValue = i;
yield return new waitforseconds(interval);
if(!input.getkey(f))
break;
}
} while(input.getkey(f));
}
然后在 update() 中使用 powerValue 和 getKeyUp(f)
此处将 PowerValue 设置为参数,以防止代码将最大值和最小值设置在 1 到 10 范围之外(可配置)
private float powerValue = 1.0f;
public float PowerValue
{
get { return powerValue; }
set {
if(value>10f)
powerValue=10f;
else if (value<1f)
powerValue=1f;
else
powerValue=value;
}
}