C# 两位一体的品格

C# 两位一体的品格,c#,unity3d,C#,Unity3d,我有个问题。我必须让角色在两个位置移动,就像下图所示。 我只想知道怎么做。例如,角色自动向右移动,然后当它向上单击时,它已经移动到顶部栏,并且仍然向右移动,当它向下单击时,它已经返回到底部栏 public float speed; public GameObject[] buttons; private void Start() { foreach (GameObject button in buttons) button.GetOrAddComponent<

我有个问题。我必须让角色在两个位置移动,就像下图所示。

我只想知道怎么做。例如,角色自动向右移动,然后当它向上单击时,它已经移动到顶部栏,并且仍然向右移动,当它向下单击时,它已经返回到底部栏

  public float speed;
public GameObject[] buttons;
private void Start()
{
    foreach (GameObject button in buttons)
        button.GetOrAddComponent<MouseEventSystem>().MouseEvent += ChangeBoyPosition;
}

private void ChangeBoyPosition(GameObject target, MouseEventType type)
{
    if (type == MouseEventType.CLICK)
    {
        int buttonIndex = System.Array.IndexOf(buttons, target);
        if (buttonIndex == 0)
        {
            //do down position
        }
        else
        {
            //do up position

        }
    }
}

void Update()
{
    //used for automatic movement
    //set a speed that responds to the speed of the boy
    //automatically move it to the right, then we will change the direction when it reaches the X axis limit
    transform.Translate(Vector3.right * speed * Time.deltaTime);
}
公共浮动速度;
公共游戏对象[]按钮;
私有void Start()
{
foreach(按钮中的游戏对象按钮)
button.GetOradComponent().MouseeEvent+=ChangeBoyPosition;
}
私有void ChangeBoyPosition(游戏对象目标,MouseEventType类型)
{
if(type==MouseEventType.CLICK)
{
int buttonIndex=System.Array.IndexOf(按钮,目标);
如果(按钮索引==0)
{
//俯卧位
}
其他的
{
//上身姿势
}
}
}
无效更新()
{
//用于自动移动
//设定一个与男孩的速度相适应的速度
//自动向右移动,当它达到X轴极限时,我们将改变方向
transform.Translate(Vector3.right*速度*时间.deltaTime);
}

基本上我有两个按钮,向上和向下,用它们我操纵角色。如果有人知道我如何使这个物理变得更简单?谢谢你

您可以尝试使用
Physics2D.gravity
修改y值

Physics2D.gravity = new Vector2(0, -1); // To go down

Physics2D.gravity = new Vector2(0, 1); // To go up
你可能会把它放在一个更新函数中,因为它需要检查输入,所以我建议创建两个向量
gravityUp
gravityDown
,并将
physical.gravity
设置为一个或另一个,取决于你想走的方向

像这样:

Vector2 gravityUp = Vector2.up;
Vector2 gravityDown = Vector2.down;
这同样适用于3D,只是你必须使用
Vector3
Physics.gravity

您的代码可能如下所示:

Vector2 gravityUp = Vector2.up;
Vector2 gravityDown = Vector2.down;

private void ChangeBoyPosition(GameObject target, MouseEventType type)
{
    if (type == MouseEventType.CLICK)
    {
        int buttonIndex = System.Array.IndexOf(buttons, target);
        if (buttonIndex == 0)
        {
            Physics2D.gravity = gravityDown;
        }
        else
        {
            Physics2D.gravity = gravityUp;
        }
    }
}

是的,那正是我所想的。我只是尝试使用“transform.GetComponent()。重力标度