保持物体垂直于与地面碰撞并平行于地面的表面

时间:2020-10-26 10:03:18

标签: c# visual-studio unity3d

我正在创建一个小型游戏,玩家可以在其中射击粘在墙上的平台。

当射弹击中墙壁时,它们大多垂直于表面并平行于地面,但并非100%,这即使在使用高摩擦物理材料的情况下也可能导致玩家滑落。射击的预制件是一个空的游戏对象,具有刚体和盒子对撞机。目的是使物体始终与所撞击的表面成90°角,物体在碰撞时会沿X和Z轴缩放,以使其平坦并用作平台或盖。

我对编码还很陌生,因为我不知道计算两个对象法线并使平台垂直的必要方法。

下面是碰撞检测代码以及我尝试进行非常粗略的旋转修复。

if(col.gameObject.tag == "Level")
    {
        transform.localRotation = Quaternion.Euler(0f, transform.rotation.y, transform.rotation.z);
        rb.constraints = RigidbodyConstraints.FreezeAll;
        cube.GetComponent<BoxCollider>().enabled = false;
        scale = true;
        StartCoroutine(ScaleOverTime(1));
        StopCoroutine(ScaleOverTime(1));
        StartCoroutine(DeScaleOverTime(1));
    }

我尝试对旋转进行硬编码,但并不能在所有墙壁上使用,另一个问题是我使用Probuilder构造了水平,因此法线不准确。

0 个答案:

没有答案