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