我正在创建一个小型游戏,玩家可以在其中射击粘在墙上的平台。
当射弹击中墙壁时,它们大多垂直于表面并平行于地面,但并非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构造了水平,因此法线不准确。