2013-02-17 200 views
0

我试图用最简单的物理学(与重力坠落,左右移动,(也许)跳跃)制作最简单的平台游戏原型。例如:无物理碰撞

void Move() { 
    if (!isDying || !isDead || !isShooting || !isFalling) 
    { 
    float amountToMove = Time.deltaTime * Input.GetAxis("Horizontal") * playerSpeed; 
    transform.Translate(Vector3.right * amountToMove); 
    } 
} 

void ApplyGravity() { 

    float amountToMove = Time.deltaTime * gravity; 
    transform.Translate(Vector3.down * amountToMove); 

} 

问题是我不知道如何使没有物理和启用isKinematic的碰撞。我唯一知道的是使用OnTriggerEnter功能,因此增加了isTrigger的所有对象,写(Hero.cs):

void OnTriggerEnter (Collider otherGameObjectCollider) { 
    if (otherGameObjectCollider.gameObject.tag == "ground") { 
    Debug.Log("ground/wall collision"); 
    } 
} 

我知道我需要停止我的英雄,以防止坠落(步行)通过地面,但我真的不能想出来。

对不起愚蠢的问题。

回答

0

您可以使用英雄的isFalling旗帜来判断他是否处于坠落状态。试试这样:

void ApplyGravity() { 
    if (isFalling) { 
    float amountToMove = Time.deltaTime * gravity; 
    transform.Translate(Vector3.down * amountToMove); 
    } 
} 

void OnTriggerEnter (Collider otherGameObjectCollider) { 
    if (otherGameObjectCollider.gameObject.tag == "ground") { 
    Debug.Log("ground/wall collision"); 
    isFalling = false; 
    } 
} 

而当你的英雄离开的平台,而不是在一个跳跃,你应该设置isFalling为true,使他开始下降。

也许你想试试看看Unity officail演示:3D Platformer Tutorial。我相信它包含了构建平台游戏所需的所有技巧和方法。祝你好运。 :)