Unity3D 玩家停留在移动平台

我正在用Unity写一个2D平台的游戏,想让一个玩家停留在移动的平台上。我已经捯饬了一两天了,也没啥进展。
基本上,别人告诉我的都是当二者接触的时候让角色随着平台移动。首先,如果我用OnTriggerEnter()相关的东西,玩家会经过平台。如果用OnCollisionEnter()(给玩家一个CharacterController,给平台一个BoxCollider),什么都不会发生。我发现大部分人给的都是这两个建议。其他的是给玩家和平台建立父子关系,但这明显会引起问题(经常被提及,但从未被解释)。
所以,我应该怎样让玩家停留在移动的平台上呢?这是移动平台的代码:

public class MovingPlatform : MonoBehaviour
{
private float useSpeed;
public float directionSpeed = 9.0f;
float origY;
public float distance = 10.0f;

// 使用这个初始化
void Start () 
{
    origY = transform.position.y;
    useSpeed = -directionSpeed;
}

//每帧调用一次更新
void Update ()
{
    if(origY - transform.position.y > distance)
    {
        useSpeed = directionSpeed; //翻转方向
    }
    else if(origY - transform.position.y < -distance)
    {
        useSpeed = -directionSpeed; //翻转方向
    }
    transform.Translate(0,useSpeed*Time.deltaTime,0);
}
//AND here is the code for the Player's movement (in Update):
CharacterController controller = GetComponent<CharacterController>();
    float rotation = Input.GetAxis("Horizontal");
    if(controller.isGrounded)
    {
        moveDirection.Set(rotation, 0, 0); //moveDirection = new Vector3(rotation, 0, 0);
        moveDirection = transform.TransformDirection(moveDirection);

        //运行代码
        if(Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) //check if shift is held
        { running = true; }
        else
        { running = false; }

        moveDirection *= running ? runningSpeed : walkingSpeed; //set speed

        //jump code
        if(Input.GetButtonDown("Jump"))
        {
            //moveDirection.y = jumpHeight;
            jump ();
        }
    }
    moveDirection.y -= gravity * Time.deltaTime;
    controller.Move(moveDirection * Time.deltaTime);

EDIT: 我想可能和我如何定义玩家与平台有关,但是我尝试了不同的组合。如果平台是一个触发(在对撞机上),玩家一贯的穿过它。如果不是,我就不能用OnTrigger函数。玩家和平台都附有刚体,但是好像也没有影响到任何东西。当玩家在某些设置中的确在平台上,他只是战战兢兢的,以掉落结束。

原问题:Stay on Moving Platforms

查看回复