如何将我的GameObject移动到所需位置?

时间:2014-08-04 21:00:10

标签: c# mobile unity3d

我的数学技能再一次困扰着我。我正在为移动设备构建一个垂直平台,其中角色跳到平台上,试图尽可能高地避开危险。我设置它使摄像机不移动,而每当角色和平台发生碰撞时平台和角色向下移动。我无法弄清楚如何将当前正在碰撞的平台和玩家向下移动到主摄像机GameObject中Y轴上-4.0的目标位置。这是我必须将角色/平台向下移动到目标位置的代码:

/*********************************** Update **********************************/

void Update(){
    if (platformMove == true) {
        PositionChanging ();

        StartCoroutine(WaitToMove());
    }

}

/******************** Platform Holder Position Changing **********************/

void PositionChanging(){
    Vector2 positionA = new Vector2 (platformHolder.transform.position.x, -4);

    newPosition = positionA;        

    platformHolder.transform.position = Vector2.Lerp(platformHolder.transform.position, newPosition, Time.deltaTime * smooth);
}

//************************ Collision Function ********************************/

void OnCollisionEnter2D(Collision2D coll)
    {
        foreach(ContactPoint2D contact in coll.contacts)
        {   
            platformMove = true;
            currentPlatformPosition = (coll.transform.position.y);

            }
        }
    }

//********************** Wait to Set platformMove to false *******************/

    IEnumerator WaitToMove(){
        yield return new WaitForSeconds(0.5f);
        platformMove = false;
    }

正如您所看到的,我将当前的碰撞位置分配给OnCollision2D函数中的currentPlatformPosition,但我还没有做任何事情。我很确定我应该在某个地方使用它!我已经尝试了一百万种不同的东西并且已经接近了几次,但我似乎无法确定这一点。

当实例化平台时,它们被放置在Platform_Holder GameObject内部。我的主角也在那里,所以当我重新定位Platform_Holder时他会随平台移动。

enter image description here

这是一个直观的表示:

enter image description here

1 个答案:

答案 0 :(得分:2)

void Update(){
    if (platformMove == true) {
        PositionChanging ();
    }

}

void PositionChanging(){
    StartCoroutine(WaitToMove());
    Vector2 positionA = new Vector2 (platformHolder.transform.position.x, platformHolder.transform.position.y - 4);

    newPosition = positionA;        

    platformHolder.transform.position = Vector2.Lerp(platformHolder.transform.position, newPosition, Time.deltaTime * smooth);
}

void OnCollisionEnter2D(Collision2D coll)
    {
        foreach(ContactPoint2D contact in coll.contacts)
        {   
            platformMove = true;
            currentPlatformPosition = (coll.transform.position.y);
        }
    }
    IEnumerator WaitToMove(){
        yield return new WaitForSeconds(0.5f);
        platformMove = false;
    }

我做了什么: 1)将常规调用移动到方法和循环外部,以便在平台移动时不会连续调用它 2)将硬-4改为实际y位减去4 3)删除了一个额外的支架(意外?)