我正在做一个益智游戏,我有一个由多个网格碰撞器组成的球体作为插槽,并且玩家应该将拼图块(也是网格碰撞器)移动到与球体接触的位置,在那里它们会粘在网格上他们碰撞的对撞机'槽'。但是,我的脚本表现得很奇怪。它有时会粘附,有时它会自动浮现在游戏世界中。我怎么能让它起作用?
这是拼图应该坚持的领域,以及其中一个拼图本身:
球体由几个网格组成,每个网格都有自己的网格对撞机。左边的不规则形状的物体是其中一个拼图。当玩家将其移向球体时,它应该粘在它接触到的球体上的第一个网格对撞机上。
这是我的剧本:
using UnityEngine;
using System.Collections;
public class StickyObject : MonoBehaviour {
DragToMove1 otherScript;
GameObject mainObj, jigsphere;
bool stuck;
public LayerMask layerMask;
// Use this for initialization
void Start ()
{
otherScript = this.GetComponent<DragToMove1>();
mainObj = GameObject.Find("GameObject");
stuck = false;
}
// Update is called once per frame
void Update ()
{
if (stuck)
{
}
}
void OnCollisionEnter(Collision c)
{
if (!stuck)
{
//By contact point
ContactPoint touched = c.contacts[0];
Debug.Log ("Collision with " + this.name);
touched.otherCollider.gameObject.transform.parent = this.transform;
Debug.Log ("Parented to " + touched.otherCollider);
stuck = true;
if (otherScript != null)
{
otherScript.Stuck();
otherScript.selected = false;
}
mainObj.SendMessage ("Wake");
}
}
bool getStuck()
{
return stuck;
}
}
答案 0 :(得分:2)
如果它们漂浮在太空中,您可能想要在该块被“卡住”后尝试禁用该对象的刚体。您可以设置其约束,使其不能向任何方向移动或旋转。
答案 1 :(得分:0)
网格对撞机从实际网格生成它的碰撞数据。因此,基本上将两个网格合并为一个网格会产生您需要的合适对撞机。
您可以使用内置CombineMeshes方法,这些方法可以正确执行,也可以手动执行。
论坛中有一个旧脚本可以做到这一点 - link。
如果你自己动手,你必须将所有顶点数据从一个网格移动到另一个网格。比你需要从新的顶点数据生成新的三角形。此外,如果网格使用两种不同的纹理,您需要合并它们并重新映射其中一种纹理坐标。