Unity3d 如何仅单向检测碰撞?

Unity3d 如何仅单向检测碰撞?,unity3d,collision,game-physics,Unity3d,Collision,Game Physics,好吧,让我们假设你正在尝试制作一个像超级扣杀兄弟这样的游戏。如何制作这样的游戏,让你可以跳起来,通过一个浮动平台,但同时也为了避免在Unity 3d中失败?将此C脚本附加到您的平台上,您可以选择是只允许玩家跳过您的平台topCollision=true还是只允许玩家通过您的平台topCollision=false失败。此外,您的平台必须具有网格碰撞器才能使脚本正常工作。取自 假设一个角色有一个地板碰撞器和一个刚体:collider.enabled=rigidbody.velocity.y为了对神

好吧,让我们假设你正在尝试制作一个像超级扣杀兄弟这样的游戏。如何制作这样的游戏,让你可以跳起来,通过一个浮动平台,但同时也为了避免在Unity 3d中失败?

将此C脚本附加到您的平台上,您可以选择是只允许玩家跳过您的平台topCollision=true还是只允许玩家通过您的平台topCollision=false失败。此外,您的平台必须具有网格碰撞器才能使脚本正常工作。取自


假设一个角色有一个地板碰撞器和一个刚体:collider.enabled=rigidbody.velocity.y为了对神圣事物的热爱,请缩短标题。@hcbpsh恶作剧抱歉,我有时会这样做。我的坏朋友hahaI宁愿使用JavaScript,但是我需要修改这个脚本才能工作吗?不,我自己尝试了这个脚本。您只需创建一个名为PlatformCollision.cs的文件,并将其附加到您的平台
using UnityEngine;
using System.Collections.Generic;

[RequireComponent (typeof (MeshCollider))]
public class PlatformCollision : MonoBehaviour
{
    public bool topCollision = true;
    public float maxAngle = 45.0f;

    void Start ()
    {
        float cos = Mathf.Cos(maxAngle);
        MeshCollider MC = GetComponent<MeshCollider>();
        if (MC == null)
        {
            Debug.LogError("PlatformCollision needs a MeshCollider");
            return;
        }
        Mesh M = new Mesh();
        Vector3[] verts = MC.sharedMesh.vertices;
        List<int> triangles = new List<int>(MC.sharedMesh.triangles);
        for (int i = triangles.Count-1; i >=0 ; i -= 3)
        {
            Vector3 P1 = transform.TransformPoint(verts[triangles[i-2]]);
            Vector3 P2 = transform.TransformPoint(verts[triangles[i-1]]);
            Vector3 P3 = transform.TransformPoint(verts[triangles[i  ]]);
            Vector3 faceNormal = Vector3.Cross(P3-P2,P1-P2).normalized;
            if ( (topCollision && Vector3.Dot(faceNormal, Vector3.up) <= cos) ||
                 (!topCollision && Vector3.Dot(faceNormal, -Vector3.up) <= cos) )
            {
                triangles.RemoveAt(i);
                triangles.RemoveAt(i-1);
                triangles.RemoveAt(i-2);
            }
        }
        M.vertices = verts;
        M.triangles = triangles.ToArray();
        MC.sharedMesh = M;
    }
}