private void OnTriggerEnter2D(Collider2D collision) { if (birdStateEnum == BirdStateEnum.flyToSeed && collision.tag == targetTag) { colliderObject = collision.GetComponent <ColliderObject>(); if (colliderObject == null) { Debug.LogError("collider does not exist on " + collision.gameObject); return; } colliderObject.RemoveCollider(); colliderObject.transform.rotation = Quaternion.identity; colliderObject.transform.position = transform.Find("beak").position; colliderObject.transform.parent = transform; birdStateEnum = BirdStateEnum.flyToNest; //hide nest cover nestCover.SetActive(false); flyStartPosition = transform.position; target = nestStop.position; direction = (target - flyStartPosition).normalized; speed /= 2f; } }
private void InitializeColliders() { if (this.colliderBuffer != null) { this.colliderBuffer.Release(); } // Initialize collider buffer if (this.headColliders.Length > 0) { ColliderObject[] colliders = new ColliderObject[this.headColliders.Length]; this.colliderBuffer = new ComputeBuffer(this.headColliders.Length, 32); for (int i = 0; i < this.headColliders.Length; i++) { // Scale collider information float scale = Mathf.Max(new float[] { this.headColliders[i].transform.lossyScale.x, this.headColliders[i].transform.lossyScale.y, this.headColliders[i].transform.lossyScale.z }); Vector3 colliderCenter = this.headColliders[i].transform.TransformPoint(this.headColliders[i].center); Vector3 p1 = colliderCenter - (this.headColliders[i].transform.up * ((this.headColliders[i].height * scale / 2) - (this.headColliders[i].radius * scale))); Vector3 p2 = colliderCenter + (this.headColliders[i].transform.up * ((this.headColliders[i].height * scale / 2) - (this.headColliders[i].radius * scale))); p1 = this.transform.InverseTransformPoint(p1); p2 = this.transform.InverseTransformPoint(p2); colliders[i] = new ColliderObject(); colliders[i].p1 = new Vector4(p1.x, p1.y, p1.z, this.headColliders[i].radius * scale); colliders[i].p2 = new Vector4(p2.x, p2.y, p2.z, colliders[i].p1.w * colliders[i].p1.w); Debug.Log("Collider " + i + ": " + colliders[i].p1 + " " + colliders[i].p2); } this.colliderBuffer.SetData(colliders); } }
public static void ReturnCollider(ColliderObject obj) { obj.go.SetActive(false); obj.go.transform.parent = tform; obj.mc.sharedMesh = null; freeColliders.Push(obj); }
protected void OnTriggerEnter2D(Collider2D collision) { if (spiderStateEnum == SpiderStateEnum.rushToSeed && collision.tag == targetTag) { ColliderObject colliderObject = collision.GetComponent <ColliderObject>(); colliderObject.RemoveCollider(); colliderObject.rb.transform.SetParent(transform, true); spiderStateEnum = SpiderStateEnum.moveBack; } }
// called on children getting merged by their parent void OnGettingMerged() { Object.Destroy(obj.mf.mesh); SplitManager.ReturnObject(obj); if (col != null) { SplitManager.ReturnCollider(col); col = null; } dead = true; }
public static ColliderObject GetCollider() { if (freeColliders.Count > 0) { ColliderObject free = freeColliders.Pop(); free.go.SetActive(true); return(free); } return(new ColliderObject()); }
static JObject SerializerSphereCollider(ColliderObject collider) { var attribute = collider.Attribute as SphereColliderAttribute; var jCollider = new JObject(); jCollider["type"] = "SPHARE"; jCollider["frame_name"] = collider.FrameName; jCollider["offset"] = collider.Offset.Serialize(); jCollider["radius"] = attribute.Radius; return(jCollider); }
static JObject SerializerBoxCollider(ColliderObject collider) { var attribute = collider.Attribute as BoxColliderAttribute; var jCollider = new JObject(); jCollider["type"] = "BOX"; jCollider["frame_name"] = collider.FrameName; jCollider["offset"] = collider.Offset.Serialize(); jCollider["width"] = attribute.Width; jCollider["height"] = attribute.Height; jCollider["depth"] = attribute.Depth; return(jCollider); }
public void Update() { if (hasChildren) { if (ShouldMerge()) { Merge(); } else { for (int i = 0; i < 8; i++) { children[i].Update(); } } } else if (!splitting && ShouldSplit()) { //SplitManager.AddToSplitList(this); SplitCompute(); } else if (splitting && childMeshCount >= 8) { SplitResolveCompute(); } else { // if at max depth, have valid mesh, and close to cam then should have a collider if (depth == MAX_DEPTH && !emptyMesh && obj.mf.sharedMesh && GetSqrDistToCamFromCenter() < colliderGenDistance * colliderGenDistance) { if (col == null) // if collider is null then spawn one { col = SplitManager.GetCollider(); col.go.transform.SetParent(obj.go.transform, false); col.go.transform.localPosition = Vector3.zero; col.go.transform.localRotation = Quaternion.identity; col.mc.sharedMesh = obj.mf.sharedMesh; } } else if (col != null) // otherwise if have collider then return it { SplitManager.ReturnCollider(col); col = null; } } SetGeomorph(); }
// Update is called once per frame void Update() { switch (spiderStateEnum) { case SpiderStateEnum.wait: if (targetObject.transform.position.y < transform.position.y && targetObject.transform.position.y > transform.position.y - detectHeightRange && targetObject.transform.position.x > transform.position.x - detectWidthRange && targetObject.transform.position.x < transform.position.x + detectWidthRange && !web.caughtSeed) { spiderStateEnum = SpiderStateEnum.rushToSeed; targetY = targetObject.transform.position.y - 1; } break; case SpiderStateEnum.rushToSeed: rb.MovePosition(transform.position + -Vector3.up * moveDownSpeed * Time.deltaTime); if (transform.position.y < targetY) { spiderStateEnum = SpiderStateEnum.moveBack; } break; case SpiderStateEnum.moveBack: rb.MovePosition(transform.position + Vector3.up * moveUpSpeed * Time.deltaTime); if (transform.position.y >= originPosition.y) { ColliderObject colliderObject = targetObject.GetComponent <ColliderObject>(); colliderObject.RecoverCollider(); colliderObject.rb.transform.SetParent(null, true); spiderStateEnum = SpiderStateEnum.end; } break; } }
private MetaFile(JObject jObj, string projectDir) { if (!jObj.ContainsKey("mesh")) { throw new Exception("has no mesh attribute"); } if (jObj["mesh"].Type != JTokenType.String) { throw new Exception("has no mesh attribute"); } MeshFilePath = projectDir + jObj.Value <string>("mesh"); if (!jObj.ContainsKey("anim")) { throw new Exception("has no anim attribute"); } if (jObj["anim"].Type != JTokenType.Object) { throw new Exception("has no anim attribute"); } var anims = jObj["anim"] as JObject; foreach (var item in anims) { int index = item.Value.Value <int>(); animationTable.Add(index, item.Key); } if (!jObj.ContainsKey("collider")) { throw new Exception("has no collider attribute"); } var jColliders = jObj["collider"]; if (jColliders.Type != JTokenType.Object) { throw new Exception("has no collider attribute"); } foreach (var item in (jColliders as JObject)) { String name = item.Key; JObject jCollider = item.Value as JObject; var collider = new ColliderObject(); collider.FrameName = jCollider.Value <string>("frame_name"); collider.Offset = Offset.Parse(jCollider["offset"] as JObject); switch (jCollider.Value <string>("type")) { case "BOX": collider.Type = ColliderType.Box; { var attribute = collider.Attribute as BoxColliderAttribute; attribute.Depth = jCollider.Value <float>("depth"); attribute.Height = jCollider.Value <float>("height"); attribute.Width = jCollider.Value <float>("width"); } break; case "SPHARE": collider.Type = ColliderType.Sphere; { var attribute = collider.Attribute as SphereColliderAttribute; attribute.Radius = jCollider.Value <float>("radius"); } break; } collider.Name = name; colliderList.Add(name, collider); } }