2014-02-12 1 views
0

여러 개의 메쉬 콜리더로 구성된 구가 슬롯에 있고, 플레이어가 퍼즐 피스 (또는 메쉬 콜리더)를 구와 접촉하도록 움직이는 퍼즐 게임을하고 있습니다. 충돌 한 메쉬 콜 리더 '슬롯'에 달라 붙을 것입니다. 그러나 제 스크립트는 이상하게 작동합니다. 그것은 때로는 고착하고, 다른 때에는 게임 세계로 떠내려갑니다. 어떻게 작동시킬 수 있습니까?여러 메쉬 콜리 더를 결합하는 유니티

다음은 퍼즐 조각이에 충실 해야하는 구, 그리고 퍼즐 조각 자체의 하나 Puzzle

구는 자신의 메쉬 입자 가속기 각각 여러 메쉬로 구성되어있다. 왼쪽의 불규칙한 모양의 물체가 퍼즐 조각 중 하나입니다. 플레이어가 구를 향해 움직이면 구에있는 첫 번째 메쉬 콜 리더에 달라 붙어 있어야합니다.

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; 
    } 
} 

답변

2

공간에 떠 다니는 경우 조각이 고정 된 후에 해당 대상의 강체를 비활성화 할 수 있습니다. 어떤 방향으로도 움직이거나 회전 할 수 없도록 구속 조건을 설정할 수 있습니다.

+0

그게 효과가! 감사! –

0

메쉬의 입자 가속기가 실제 메쉬에서 충돌 데이터의 생성

그리고 여기 내 스크립트입니다. 따라서 기본적으로 두 메쉬를 하나로 결합하면 필요한 적절한 콜 리더가 생성됩니다.

정확하게 내장 된 CombineMeshes 방법을 사용하거나 수동으로 수행 할 수 있습니다.

포럼에 이전 스크립트 - link이 있습니다.

그리고 직접 작성한 경우 모든 정점 데이터를 한 메쉬에서 다른 메쉬로 이동해야합니다. 새 정점 데이터에서 새 삼각형을 생성해야합니다. 메쉬가 두 개의 서로 다른 텍스쳐를 사용한다면, 그것들을 합쳐서 그 중 하나의 텍스쳐 좌표를 다시 매핑해야합니다.

+0

감사합니다. 어떻게하면 CombineMeshes를 사용하여 문제를 해결할 수 있을지 잘 모르겠습니다. 또한 내가 찾고있는 것을 명확히하는 데 도움이되는 질문을 편집했습니다. –