我正在尝试用最简单的物理学制作最简单的平台游戏原型(重力下降,左右移动,(可能)跳跃)。例如:
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 :(得分: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
设置为真,以使他开始堕落。
也许你想尝试看看Unity官方演示:3D Platformer Tutorial。我相信它包含了构建平台游戏所需的所有技巧和方法。祝好运。 :)