首页 > 解决方案 > 在移动平台上移动敌人

问题描述

我有一个设置,其中包括一个移动平台(绿色)和一个在上面巡逻的敌人,如下所示:

在此处输入图像描述

平台周期性地左右移动,巡逻的敌人也在使用rigidbody.velocity. 两者分别在运动时看起来都很好。但是当敌人在平台的顶部时,敌人是平台的子对象,即使我已经纠正了平台的速度,敌人也显得静止(只是在它的位置播放移动动画)。以下是我用于巡逻敌人的代码片段:

void Start()
    {
        myRigidBody = GetComponent<Rigidbody2D>();
        parent = transform.parent;
        parentVelocity = new Vector2(0f, 0f);
    }

    // Update is called once per frame
    void Update()
    {
        if (parent != null && parent.GetComponent<Rigidbody2D>() != null) 
            parentVelocity = parent.GetComponent<Rigidbody2D>().velocity;

        Debug.Log("parentVelocity=== " + parentVelocity);
        if (IsFacingRightOrUp())
        {
            if (moveVertical)
                myVelocity = new Vector2(0f, moveSpeed);
            else
                myVelocity = new Vector2(moveSpeed, 0f);
        }
        else
        {
            if (moveVertical)
                myVelocity = new Vector2(0f, -moveSpeed);
            else
                myVelocity = new Vector2(-moveSpeed, 0f);            
        }
        Debug.Log("myRigidBody.velocity === " + myVelocity);
        myRigidBody.velocity = myVelocity + parentVelocity;
        Debug.Log("myRigidBody.velocity === " + myRigidBody.velocity);
    }

它按如下方式生成调试日志,parentVelocity默认为 (0,0):

在此处输入图像描述

我应该怎么做才能使敌人的运动与平台上的观察者相同,因为当他们都站在静止的地面上时会出现敌人的运动?

应用的更正myRigidBody.velocity = myVelocity + parentVelocity;似乎根本不重要。无论修正如何,敌人都显得静止。如果我将移动平台的速度更改为零,它会按预期工作。为什么相对速度校正不起作用?

即使我将速度硬核到 100,敌人也似乎是静止的,尽管刚体组件正确地将速度显示为 100。

标签: c#unity3d

解决方案


在没有相对速度校正的情况下添加transform.Translate(myVelocity * Time.deltaTime);解决了这个问题,尽管我不完全理解为什么。

void Update()
{        
    if (IsFacingRightOrUp())
    {
        if (moveVertical)
            myVelocity = new Vector2(0f, moveSpeed);
        else
            myVelocity = new Vector2(moveSpeed, 0f);
    }
    else
    {
        if (moveVertical)
            myVelocity = new Vector2(0f, -moveSpeed);
        else
            myVelocity = new Vector2(-moveSpeed, 0f);            
    }                
    myRigidBody.velocity = myVelocity;
    transform.Translate(myVelocity * Time.deltaTime);
}

在此处输入图像描述


推荐阅读