C# 测试长方体的哪个面与地板接触

C# 测试长方体的哪个面与地板接触,c#,unity3d,unityscript,C#,Unity3d,Unityscript,我目前正在做一个游戏,在这个游戏中,我必须使用箭头键移动一个长方体,记住棋盘的约束条件 对象只能逐步移动,这意味着: 如果它是向上的,你按任意键:它会朝那个方向落下,然后 站在它一边 如果它在一边:它将移动1步 那个方向 我有一个脚本就是这样做的。。。对于立方体。然而,我不能让它与长方体一起工作 我想我应该检查哪一个面实际上与地板接触,然后根据结果做不同的动作 如果两个方形面中有一个与地板接触,我应该 执行我的脚本当前执行的操作 如果四个矩形中的一个 面部与地板接触时,我应调整脚本以移动

我目前正在做一个游戏,在这个游戏中,我必须使用箭头键移动一个长方体,记住棋盘的约束条件

对象只能逐步移动,这意味着:

  • 如果它是向上的,你按任意键:它会朝那个方向落下,然后 站在它一边
  • 如果它在一边:它将移动1步 那个方向
我有一个脚本就是这样做的。。。对于立方体。然而,我不能让它与长方体一起工作

我想我应该检查哪一个面实际上与地板接触,然后根据结果做不同的动作

  • 如果两个方形面中有一个与地板接触,我应该 执行我的脚本当前执行的操作
  • 如果四个矩形中的一个 面部与地板接触时,我应调整脚本以移动 同样的道理
这似乎是一个好的解决方案吗?如果是这样的话,你能帮我弄清楚我必须写什么样的条件来检查哪张脸目前与地板接触吗

我的UnityScript(我打算将其转换为C)

var旋转器:变换;
无功转速=1.0;
var半尺寸=0.5;
私有变量=假;
函数RotateCube(参考点:Vector3,旋转轴:Vector3){
rotator.localRotation=Quaternion.identity;
rotator.position=transform.position-Vector3.up*halfSize+refPoint;
transform.parent=旋转器;
变量角度:浮动=0;
同时(角度<90.0){
角度+=时间。deltaTime*90.0*速度;
rotator.rotation=四元数角度轴(数学最小值(角度,90.0),旋转轴);
产量
}
transform.parent=null;
旋转=假;
}
函数Start(){
旋转器=(新游戏对象(“旋转器”)。变换;
}
函数更新(){
如果(!旋转){
if(Input.GetKey(“right”)){
旋转=真;
RotateCube(矢量3.右*半尺寸,-矢量3.向前);
}
else if(Input.GetKey(“左”)){
旋转=真;
RotateCube(-Vector3.右*半尺寸,Vector3.向前);
}
else if(Input.GetKey(“up”)){
旋转=真;
RotateCube(矢量3.正向*半尺寸,矢量3.右侧);
}
else if(Input.GetKey(“down”)){
旋转=真;
RotateCube(-Vector3.正向*半尺寸,-Vector3.右侧);
}
}
}
您应该使用

function OnCollisionEnter(Collision : collision)
检测任何碰撞。如果要在每个帧中检测碰撞,请使用

function OnCollisionStay(Collision : collision)
查看他们的描述和描述

然后使用
collision.contacts
检测接触点()

以下是一个例子:

function OnCollisionStay(collision : Collision) {
    for (var contact : ContactPoint in collision.contacts) {
        print(contact.thisCollider.name + " hit " + contact.otherCollider.name);
        // Visualize the contact point
        Debug.DrawRay(contact.point, contact.normal, Color.white);
    }
}
function OnCollisionStay(collision : Collision) {
    for (var contact : ContactPoint in collision.contacts) {
        print(contact.thisCollider.name + " hit " + contact.otherCollider.name);
        // Visualize the contact point
        Debug.DrawRay(contact.point, contact.normal, Color.white);
    }
}