C# Unity3d特征电机从移动平台上跌落/滑落

C# Unity3d特征电机从移动平台上跌落/滑落,c#,unity3d,C#,Unity3d,目前在我的游戏中实现移动平台,我已经成功地使用开关和案例获得了平台,但是当涉及到将玩家保持在平台上时,要么平台在玩家下方滑动,玩家在平台通过后掉落,要么在平台上升的情况下,玩家从平台上掉落 我知道unity有一个默认的charactermotor,它包含javascript中的脚本,但是我想制作一个更简单的charactermotor,它没有unity提供的1那么复杂 我曾尝试在移动平台脚本中添加家长代码,如下面的1,但没有效果: void triggerOnStay(Collider coll

目前在我的游戏中实现移动平台,我已经成功地使用开关和案例获得了平台,但是当涉及到将玩家保持在平台上时,要么平台在玩家下方滑动,玩家在平台通过后掉落,要么在平台上升的情况下,玩家从平台上掉落

我知道unity有一个默认的charactermotor,它包含javascript中的脚本,但是我想制作一个更简单的charactermotor,它没有unity提供的1那么复杂

我曾尝试在移动平台脚本中添加家长代码,如下面的1,但没有效果:

void triggerOnStay(Collider collider)
{
    if (collider.tag == "Player")
    {
        collider.transform.parent = transform.parent;
    }
}

void triggerOnLeave(Collider collider)
{
    if (collider.tag == "Player")
    {
        collider.transform.parent = null;
    }
}
想知道你们是否有人知道我可以添加什么或做什么,让我的charactermotor能够停留在移动的平台上,无论它们是从左到右还是从上到下

特征电机:

public class CharacterMotor2 : MonoBehaviour {
//Variables
public Transform respawnPoint1;
public Transform respawnPoint2;
public Transform respawnPoint3;


public Transform teleporterPoint1;
public Transform teleporterPoint2;

//public Transform nextLevel;
public float speed;
public float jumpSpeed; 
public float gravity;
public Vector3 moveDirection = Vector3.zero;
public float downwardForce;
public float terminalVelocity;
public float leftForce;
public float forwardForce;
public float airSpeed;

void Update() 
{
    CharacterController controller = GetComponent<CharacterController>();
    // is the controller on the ground?
    if (controller.isGrounded) 
    {
        //Feed moveDirection with input.
        moveDirection = new Vector3 (Input.GetAxis ("Horizontal"), 0, Input.GetAxis ("Vertical"));
        moveDirection = transform.TransformDirection (moveDirection);
        downwardForce = 0;
        //Multiply it by speed.
        moveDirection *= speed;

        //Jumping
        if (Input.GetButton ("Jump"))
        {
            downwardForce -= jumpSpeed;
        }   
    } 
    else 
    {
        if (downwardForce < terminalVelocity)
        {
                moveDirection *= airSpeed;
                downwardForce += gravity * Time.deltaTime;
        }
    }
    //Applying gravity to the controller
    moveDirection.y -= downwardForce * Time.deltaTime;
    //Making the character move
    controller.Move(moveDirection * Time.deltaTime);
}
void OnTriggerEnter(Collider collider)
{           
    if (collider.tag == "smallTrampoline") 
    {
        downwardForce *= -1 * collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;

    }
    if (collider.tag == "largeTrampoline") 
    {
        downwardForce *= -2 * collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;
    }
    if (collider.tag == "leftTrampoline")   
    {
        downwardForce *= -1 *collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;
    }
    if (collider.tag == "rightTrampoline")  
    {
        downwardForce *= -1 *collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;    
    }
    if (collider.tag == "forwardTrampoline")    
    {
        downwardForce *= -1 *collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;    
    }
    if (collider.tag == "backwardTrampoline")   
    {
        downwardForce *= -1 *collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;    
    }
    if (collider.tag == "Respawn") 
    {
        transform.position = respawnPoint1.position;
    }
    if (collider.tag == "NextRespawn")
    {
        transform.position = respawnPoint2.position;
    }
    if (collider.tag == "FinalRespawn")
    {
        transform.position = respawnPoint3.position;
    }

    if (collider.tag == "Teleporter") 
    {
        transform.position = teleporterPoint1.position;
    }
    if (collider.tag == "2ndTeleporter")
    {
        transform.position = teleporterPoint2.position;
    }






    if (collider.tag == "NextLevel") 
    {
        Application.LoadLevel(1);

    }
公共类CharacterMotor2:单一行为{
//变数
公共交通换气点1;
公共交通换乘点2;
公共交通换气点3;
公共转换传送点1;
公共转换传送点2;
//下一级公共改革;
公众浮标速度;
公众浮标跳跃速度;
公众浮力;
公共向量3移动方向=向量3.0;
公众下浮力;
公共交通终点站;
公共力量;
公共交通运输队;
公众浮标空速;
无效更新()
{
CharacterController=GetComponent();
//控制器在地面上吗?
if(controller.isground)
{
//输入的进给方向。
moveDirection=新矢量3(Input.GetAxis(“水平”)、0、Input.GetAxis(“垂直”);
moveDirection=transform.TransformDirection(moveDirection);
下压力=0;
//乘以速度。
移动方向*=速度;
//跳跃
if(Input.GetButton(“跳转”))
{
向下力-=跳跃速度;
}   
} 
其他的
{
if(向下力<终点延伸率)
{
移动方向*=空速;
下向力+=重力*时间增量;
}
}
//向控制器应用重力
moveDirection.y-=向下力*时间增量时间;
//使角色移动
控制器移动(移动方向*时间增量);
}
void ontriggenter(碰撞器-碰撞器)
{           
if(collider.tag==“smallTrampoline”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“largeTrampoline”)
{
下向力*=-2*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“leftTrampoline”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“rightTrampoline”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“forwardTrampoline”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“后向蹦床”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“重生”)
{
transform.position=respawnPoint1.position;
}
if(collider.tag==“nextrepawn”)
{
transform.position=respawnPoint2.position;
}
if(collider.tag==“FinalRespawn”)
{
transform.position=respawnPoint3.position;
}
if(collider.tag==“传送机”)
{
transform.position=teleporterPoint1.position;
}
if(collider.tag==“2ndTeleporter”)
{
transform.position=teleporterPoint2.position;
}
if(collider.tag==“NextLevel”)
{
应用程序。加载级别(1);
}

当玩家在平台上并落地后,你应该尝试将平台的X、Y和Z速度添加到玩家身上,而不是将角色作为移动平台的子对象。如果玩家站在平台上不动,玩家的速度将与平台匹配,玩家将与平台完全一样移动子对象。这也允许玩家能够在运动的平台上自由移动

查看此答案可获得更深入的解决方案: