C# 统一:上下移动精灵

C# 统一:上下移动精灵,c#,unity5,game-physics,unity3d-2dtools,C#,Unity5,Game Physics,Unity3d 2dtools,虽然我熟悉C#,但我对在游戏开发和统一中使用C#还是很陌生。我想让球上下弹跳。我可以很容易地让球左右移动,但当我的代码从“滚动”更改为“反弹”时,我得到以下结果:(球沿对角线移动,而不是上下移动) 但我想要的是: //每帧调用一次更新 无效更新(){ 如果(向下移动){ transform.localScale=新矢量3(-1f,1f,1f); GetComponent().velocity=newvector2(速度,GetComponent().velocity.x); }否则{ tran

虽然我熟悉C#,但我对在游戏开发和统一中使用C#还是很陌生。我想让球上下弹跳。我可以很容易地让球左右移动,但当我的代码从“滚动”更改为“反弹”时,我得到以下结果:(球沿对角线移动,而不是上下移动)

但我想要的是:

//每帧调用一次更新
无效更新(){
如果(向下移动){
transform.localScale=新矢量3(-1f,1f,1f);
GetComponent().velocity=newvector2(速度,GetComponent().velocity.x);
}否则{
transform.localScale=新矢量3(1f、1f、1f);
GetComponent().velocity=newvector2(-speed,GetComponent().velocity.x);
}
}
我相信答案一定很简单,但经过漫长的一天,我的大脑变得一团糟。有人能提供建议吗

Ps从左到右的工作代码如下所示:

transform.localScale = new Vector3 (-1f, 1f, 1f);
            GetComponent<Rigidbody2D> ().velocity = new Vector2 (speed, GetComponent<Rigidbody2D> ().velocity.y);
transform.localScale=新矢量3(-1f,1f,1f);
GetComponent().velocity=newvector2(速度,GetComponent().velocity.y);

如果有帮助,您可以冻结x位置


矢量2有两个分量;X和Y。速度的“X”分量表示对象的水平速度(左/右)。速度的“Y”分量表示对象的垂直速度(向上/向下)

若要垂直上下移动,速度的“X”分量必须为“零”(0),否则对象将继续水平和垂直移动,从而形成对角线


调用Vector2的构造函数时,传入两个参数;第一个参数是“X”值,第二个分量是“Y”值。在示例代码中,在第一个(X)参数中传递一个非零值,导致对角线移动。

var vel=GetComponent().velocity;y级*=-1;GetComponent().velocity=vel这似乎接近我需要的,但不是完美的工作。球慢慢地落下,但每秒都会有一点隆起,使它看起来像是在振动。我需要调查发生了什么。只在球打到顶部或底部时调用代码,而不是在每一帧上…Derp my bad,正如我所说的long day!这不是答案,这是一个注释;GetComponent().velocity=newvector2(速度,GetComponent().velocity.x);我的球disappears@Phil3992这是因为您正在将球的比例调整为0。。。本质上,如果球的比例为1,且球的像素为32x32,则仍然是32x32像素,因此将x比例更改为0将使球成为0x32(大小*比例),因此如果球没有大小或单位,则它将不可见,如果球上有碰撞器,则可能还会有一条警告对此进行投诉。
transform.localScale = new Vector3 (-1f, 1f, 1f);
            GetComponent<Rigidbody2D> ().velocity = new Vector2 (speed, GetComponent<Rigidbody2D> ().velocity.y);