【问题标题】:How to move my GameObject to desired position?如何将我的游戏对象移动到所需位置?
【发布时间】:2014-08-05 07:51:21
【问题描述】:

我的数学技能再次困扰着我。我正在为移动设备构建一个垂直平台游戏,其中角色跳到平台上,试图在避免危险的同时尽可能高。我将其设置为相机不会移动,而是在每次角色与平台之间发生碰撞时平台和角色向下移动。我无法弄清楚如何将当前正在碰撞的平台和玩家向下移动到主摄像机游戏对象中 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 时,他会随着平台移动。

这是一个视觉表示:

【问题讨论】:

    标签: c# mobile unity3d


    【解决方案1】:
    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) 移除了一个额外的括号(意外?)

    【讨论】:

    • 这很有帮助,但它仍然没有按照我想要的方式工作。我想我必须用 currentPlatformPosition 和 targetPosition 之间的距离替换 -4。每个平台与 targetPosition 的距离不同。
    • 你是对的,在图中它们看起来都相同的距离,所以我假设你让它们都在彼此上方产生 4 个单位。您必须让每个对撞机都有一个带有要使用的距离变量而不是 4 的组件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多