Commit 42671db1 authored by 16이진형's avatar 16이진형

2번 충돌하는 문제 해결

parent 08c6c35c
...@@ -27,6 +27,12 @@ public class ExtrudedMesh : MonoBehaviour ...@@ -27,6 +27,12 @@ public class ExtrudedMesh : MonoBehaviour
private MeshExtrusion.Edge[] precomputedEdges; private MeshExtrusion.Edge[] precomputedEdges;
int cnt = 0; int cnt = 0;
FlatlandMovement myMovement;
public Hash128 hash;
static int hashNum = 0;
public class ExtrudedTrailSection public class ExtrudedTrailSection
{ {
public Vector3 point; public Vector3 point;
...@@ -42,6 +48,10 @@ public class ExtrudedMesh : MonoBehaviour ...@@ -42,6 +48,10 @@ public class ExtrudedMesh : MonoBehaviour
GetComponent<MeshCollider>().sharedMesh = GetComponent<MeshFilter>().mesh; GetComponent<MeshCollider>().sharedMesh = GetComponent<MeshFilter>().mesh;
prevtime = Time.time; prevtime = Time.time;
transform.SetAsFirstSibling(); transform.SetAsFirstSibling();
myMovement = transform.parent.GetComponent<FlatlandMovement>();
hash = Hash128.Compute(gameObject.name + hashNum++);
} }
List<ExtrudedTrailSection> sections = new List<ExtrudedTrailSection>(); List<ExtrudedTrailSection> sections = new List<ExtrudedTrailSection>();
...@@ -60,6 +70,9 @@ public class ExtrudedMesh : MonoBehaviour ...@@ -60,6 +70,9 @@ public class ExtrudedMesh : MonoBehaviour
{ {
var clone = Instantiate(transform.parent.gameObject, transform.parent.position, transform.parent.rotation); var clone = Instantiate(transform.parent.gameObject, transform.parent.position, transform.parent.rotation);
clone.GetComponentInChildren<MeshFilter>().sharedMesh = clone.GetComponentInChildren<MeshFilter>().mesh; clone.GetComponentInChildren<MeshFilter>().sharedMesh = clone.GetComponentInChildren<MeshFilter>().mesh;
clone.GetComponentInChildren<ExtrudedMesh>().hash = hash;
var x = clone.GetComponents(typeof(Component)); var x = clone.GetComponents(typeof(Component));
foreach(var t in x) foreach(var t in x)
{ {
...@@ -170,26 +183,40 @@ public class ExtrudedMesh : MonoBehaviour ...@@ -170,26 +183,40 @@ public class ExtrudedMesh : MonoBehaviour
public void OnCollisionStay(Collision collision) public void OnCollisionStay(Collision collision)
{ {
if (transform.parent.GetComponent(typeof(FlatlandMovement)) == null) if (myMovement == null)
{
return; return;
}
else else
transform.parent.GetComponent<FlatlandMovement>().OnCollisionStaychild(collision); {
myMovement.OnCollisionStaychild(collision);
}
} }
public void OnCollisionEnter(Collision collision) public void OnCollisionEnter(Collision collision)
{ {
if (transform.parent.GetComponent(typeof(FlatlandMovement)) == null) if (myMovement == null)
{
return; return;
}
else else
transform.parent.GetComponent<FlatlandMovement>().OnCollisionEnterchild(collision); {
myMovement.OnCollisionEnterchild(collision);
}
} }
public void OnCollisionExit(Collision collision) public void OnCollisionExit(Collision collision)
{ {
if (transform.parent.GetComponent(typeof(FlatlandMovement)) == null) if (myMovement == null)
{
return; return;
}
else else
transform.parent.GetComponent<FlatlandMovement>().OnCollisionExitchild(collision); {
myMovement.OnCollisionExitchild(collision);
}
} }
} }
...@@ -46,6 +46,8 @@ public class FlatlandMovement : MonoBehaviour ...@@ -46,6 +46,8 @@ public class FlatlandMovement : MonoBehaviour
/// </summary> /// </summary>
Queue<float> pathVelocitys = new Queue<float>(); Queue<float> pathVelocitys = new Queue<float>();
List<Hash128> collisions = new List<Hash128>();
protected void Start() protected void Start()
{ {
Physics.IgnoreLayerCollision(0, 1); Physics.IgnoreLayerCollision(0, 1);
...@@ -275,12 +277,27 @@ public class FlatlandMovement : MonoBehaviour ...@@ -275,12 +277,27 @@ public class FlatlandMovement : MonoBehaviour
/// <param name="collision"></param> /// <param name="collision"></param>
public virtual void OnCollisionEnterchild(Collision collision) public virtual void OnCollisionEnterchild(Collision collision)
{ {
if(collision.gameObject.GetComponent<ExtrudedMesh>() == null)
{
return;
}
if(collisions.IndexOf(collision.gameObject.GetComponent<ExtrudedMesh>().hash) != -1)
{
return;
}
collisions.Add(collision.gameObject.GetComponent<ExtrudedMesh>().hash);
var tmp = collision.GetContact(0).normal; var tmp = collision.GetContact(0).normal;
tmp = new Vector3(tmp.x, 0, tmp.z); tmp = new Vector3(tmp.x, 0, tmp.z);
tmp = tmp.normalized; tmp = tmp.normalized;
tmp *= 100; tmp *= 100;
collisionforce = tmp; collisionforce = tmp;
alpha += collisionforce; alpha += collisionforce;
Debug.Log(collisions.Count);
} }
/// <summary> /// <summary>
/// 나갔을때 호출 /// 나갔을때 호출
...@@ -288,6 +305,18 @@ public class FlatlandMovement : MonoBehaviour ...@@ -288,6 +305,18 @@ public class FlatlandMovement : MonoBehaviour
/// <param name="collision"></param> /// <param name="collision"></param>
public virtual void OnCollisionExitchild(Collision collision) public virtual void OnCollisionExitchild(Collision collision)
{ {
if (collision.gameObject.GetComponent<ExtrudedMesh>() == null)
{
return;
}
if (collisions.IndexOf(collision.gameObject.GetComponent<ExtrudedMesh>().hash) == -1)
{
return;
}
collisions.Remove(collision.gameObject.GetComponent<ExtrudedMesh>().hash);
alpha -= collisionforce; alpha -= collisionforce;
collisionforce = new Vector3(0, 0, 0); collisionforce = new Vector3(0, 0, 0);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment