public override NodeStatus Tick(BehaviorBlackboard data) { Transform agent = (Transform)data.Get("_BTD_Agent"); Transform child = agent.Find(childName); if (child != null) { ColliderHelper colHelper = child.GetComponent <ColliderHelper>(); if (colHelper != null) { if (colHelper.trigger != null) { data.Add(entry, colHelper.trigger); return(NodeStatus.SUCCESS); } else { return(NodeStatus.FAILURE); } } else { Debug.LogError("Behavor Tree Designer\nNo ColliderHelper script found on child: " + childName + " on object: " + agent.name); return(NodeStatus.ERROR); } } else { Debug.LogError("Behavor Tree Designer\nChild: " + childName + " not found on object: " + agent.name); return(NodeStatus.ERROR); } }
public void InitDistanceBounds() { bounds = ColliderHelper.CaculateBounds(gameObject.transform, false); //不用碰撞体,计算包围盒就行了 roamBounds = ColliderHelper.CaculateBounds(gameObject.transform, false); //不用碰撞体,计算包围盒就行了 roamBounds.size *= roamDistancePower; roamBoundsOut = ColliderHelper.CaculateBounds(gameObject.transform, false);//不用碰撞体,计算包围盒就行了 roamBoundsOut.size *= roamDistanceOutPower; freeBounds = ColliderHelper.CaculateBounds(gameObject.transform, false);//不用碰撞体,计算包围盒就行了 freeBounds.size *= freeDistancePower; freeRadius = ColliderHelper.GetRadius(freeBounds.size); freeRadius /= transform.lossyScale.x;//模型本身可能有比例参数 roamRadius = ColliderHelper.GetRadius(roamBounds.size); roamRadius /= transform.lossyScale.x;//模型本身可能有比例参数 roamRadiusOut = ColliderHelper.GetRadius(roamBoundsOut.size); roamRadiusOut /= transform.lossyScale.x;//模型本身可能有比例参数 //#if UNITY_EDITOR //ShowDistanceCollider(); //#endif }
public List<Vector3> GetTestPoints() { if (points.Count > 0) return points; //distanceChecker var pos = transform.position; points.Add(pos); var bounds = ColliderHelper.CaculateBounds(gameObject.transform, false);//不用碰撞体,计算包围盒就行了 var size = bounds.size/2; points.Add(pos + new Vector3(-size.x, -size.y, -size.z)); points.Add(pos + new Vector3(-size.x, -size.y, size.z)); points.Add(pos + new Vector3(-size.x, size.y, -size.z)); points.Add(pos + new Vector3(size.x, -size.y, -size.z)); points.Add(pos + new Vector3(-size.x, size.y, size.z)); points.Add(pos + new Vector3(size.x, -size.y, size.z)); points.Add(pos + new Vector3(size.x, size.y, -size.z)); points.Add(pos + new Vector3(size.x, size.y, size.z)); points.Add(pos + new Vector3(0, -size.y, -size.z)); points.Add(pos + new Vector3(0, -size.y, size.z)); points.Add(pos + new Vector3(0, size.y, -size.z)); points.Add(pos + new Vector3(0, size.y, size.z)); points.Add(pos + new Vector3(size.x, 0, -size.z)); points.Add(pos + new Vector3(size.x, 0, size.z)); points.Add(pos + new Vector3(size.x, 0, -size.z)); points.Add(pos + new Vector3(size.x, 0, size.z)); points.Add(pos + new Vector3(-size.x, -size.y, 0)); points.Add(pos + new Vector3(size.x, -size.y, 0)); points.Add(pos + new Vector3(-size.x, size.y, 0)); points.Add(pos + new Vector3(size.x, size.y, 0)); return points; }
public virtual bool IsInBounds(Transform t) { if (isInitBounds == false) { bounds = ColliderHelper.CaculateBounds(gameObject.transform, false);//不用碰撞体,计算包围盒就行了 isInitBounds = true; } return(bounds.Contains(t.position)); }
/// <summary> /// 获取相机聚焦物体的信息 /// </summary> /// <param name="obj"></param> /// <returns></returns> protected override AlignTarget GetTargetInfo(GameObject obj) { if (radius == 0) { var bounds = ColliderHelper.CaculateBounds(gameObject.transform, false);//不用碰撞体,计算包围盒就行了 radius = ColliderHelper.GetRadius(bounds.size); } camDistance = radius * 1.5f; disRange = new Range(radius * 0.75f, radius * 3f); angleFocus = new Vector2(60, 60); AlignTarget alignTargetTemp = new AlignTarget(obj.transform, angleFocus, camDistance, angleRange, disRange); return(alignTargetTemp); }
private void CombineMeshes(Queue <MeshFilter> filters , byte area , InputGeometryCompiler compiler , ColliderHelper helper) { Queue <CombineInstance> combineInstances = new Queue <CombineInstance>(); while (filters.Count != 0) { MeshFilter filter = filters.Dequeue(); if (helper != null) { Collider collider = filter.GetComponent <Collider>(); if (collider) { CombineInstance ci; if (helper.Get(collider, out ci)) { combineInstances.Enqueue(ci); continue; } } } // Note: Null shared meshes were filtered out by the calling method. for (int subIndex = 0; subIndex < filter.sharedMesh.subMeshCount; ++subIndex) { CombineInstance combineInstance = new CombineInstance(); combineInstance.mesh = filter.sharedMesh; combineInstance.transform = filter.transform.localToWorldMatrix; combineInstance.subMeshIndex = subIndex; combineInstances.Enqueue(combineInstance); } } MeshUtil.CombineMeshes(combineInstances, area, compiler); }
void SpawnPlayer(PlayerSettings settings) { var entity = EntityManager.CreateEntity(playerArchetype); EntityManager.SetComponentData(entity, new Translation { Value = new float3(0, 0, 0) }); EntityManager.SetComponentData(entity, new Velocity { value = Unity.Mathematics.float2.zero }); EntityManager.SetComponentData(entity, new Speed { value = settings.speed }); EntityManager.SetComponentData(entity, new Faction() { value = FactionUtil.PLAYER_FACTION }); EntityManager.SetComponentData(entity, ColliderHelper.MakeBoxCollider(new Unity.Mathematics.float3(settings.colliderSize.x, settings.colliderSize.y, settings.colliderSize.z), false)); EntityManager.SetComponentData(entity, new Health() { current = settings.health, max = settings.health }); EntityManager.SetComponentData(entity, new Cooldown() { cd = settings.cd }); EntityManager.SetComponentData(entity, new Player() { bulletPrefab = 0 }); EntityManager.SetSharedComponentData(entity, new RenderMesh() { mesh = settings.mesh, material = settings.material }); EntityManager.AddBuffer <CollisionResult>(entity); EntityManager.AddBuffer <DamageEvent>(entity); }
private void ShowDistanceCollider() { BoxCollider collider1 = ColliderHelper.CreateBoxCollider(gameObject.transform, false, true); collider1.size *= roamDistancePower; collider1.enabled = false; BoxCollider collider11 = ColliderHelper.CreateBoxCollider(gameObject.transform, false, true); collider11.size *= roamDistancePower * 3; collider11.enabled = false; BoxCollider collider2 = ColliderHelper.CreateBoxCollider(gameObject.transform, false, true); collider2.size *= freeDistancePower; collider2.enabled = false; SphereCollider collider3 = ColliderHelper.CreateSphereCollider(gameObject.transform, false, true); collider3.radius *= freeDistancePower; //collider3.radius = radius; collider3.enabled = false; }
private static void CreateWizard() { ColliderHelper window = (ColliderHelper)GetWindow(typeof(ColliderHelper)); window.Show(); }
private void Compile(InputBuildContext context) { context.info.compilerCount++; ColliderHelper colliderHelper = (colocationOption == MeshColocationOption.Collider) ? new ColliderHelper() : null; InputGeometryCompiler compiler = context.geomCompiler; List <Component> master = new List <Component>(context.components); List <byte> areas = new List <byte>(context.areas); Queue <MeshFilter> filters = new Queue <MeshFilter>(); int count = 0; int ignored = 0; while (master.Count > 0) { byte area = 0; for (int i = master.Count - 1; i >= 0; i--) { Component item = master[i]; if (item is MeshFilter) { MeshFilter filter = (MeshFilter)item; if (filter.sharedMesh == null) { ignored++; areas.RemoveAt(i); master.RemoveAt(i); } else { if (filters.Count == 0) { area = areas[i]; } if (areas[i] == area) { count++; filters.Enqueue(filter); areas.RemoveAt(i); master.RemoveAt(i); } } } else { areas.RemoveAt(i); master.RemoveAt(i); } } if (filters.Count > 0) { CombineMeshes(filters, area, compiler, colliderHelper); } } if (colliderHelper != null) { colliderHelper.Dispose(); } if (ignored > 0) { string msg = string.Format("{0}: Ignored {1} MeshFilters with a null mesh." , name, ignored); context.Log(msg, this); } context.Log(string.Format("{0}: Compiled {1} MeshFilters.", name, count), this); }
public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) { dstManager.AddComponent <PhysicsBody>(entity); if (dynamic) { dstManager.AddComponent <Dynamic>(entity); } if (useGravity) { dstManager.AddComponent <Gravity>(entity); dstManager.SetComponentData(entity, new Gravity() { value = gravityAcceleration }); } var sphereCollider = GetComponent <SphereCollider>(); if (sphereCollider) { dstManager.AddComponent <ColliderComponent>(entity); dstManager.SetComponentData(entity, ColliderHelper.MakeSphereCollider(sphereCollider.radius, trigger)); dstManager.SetComponentData(entity, new PhysicsBody() { elasticity = elasticity, inertiaTensorInv = Bootstrap.CalculateBoxInverseInertaTensor(sphereCollider.radius, sphereCollider.radius, sphereCollider.radius, mass) }); } var boxCollider = GetComponent <BoxCollider>(); if (boxCollider) { dstManager.AddComponent <ColliderComponent>(entity); var box = new Vector3(transform.localScale.x * boxCollider.size.x * 0.5f, transform.localScale.y * boxCollider.size.y * 0.5f, transform.localScale.z * boxCollider.size.z * 0.5f); dstManager.SetComponentData(entity, ColliderHelper.MakeBoxCollider(box, trigger)); dstManager.SetComponentData(entity, new PhysicsBody() { elasticity = elasticity, inertiaTensorInv = Bootstrap.CalculateBoxInverseInertaTensor(box.x, box.y, box.z, mass) }); } if (!sphereCollider && !boxCollider) { //todo: Warning } dstManager.AddComponent <AngularVelocity>(entity); dstManager.SetComponentData(entity, new AngularVelocity() { value = initialAngularVelocity }); dstManager.AddComponent <Velocity>(entity); dstManager.SetComponentData(entity, new Velocity() { value = initialLinearVelocity }); dstManager.AddComponent <Impulse>(entity); dstManager.SetComponentData(entity, new Impulse() { angularImpulse = float3.zero, impulse = float3.zero }); dstManager.AddComponent <Mass>(entity); dstManager.SetComponentData(entity, new Mass() { value = mass }); dstManager.AddBuffer <CollisionResult>(entity); }
List <Collider> LocateEnemyInWeaponRange(float range) { return(ColliderHelper.FindNearbyColiders(transform, range, "Infected")); }
public static void AddBoxCollider() { Transform parent = Selection.activeGameObject.transform; ColliderHelper.CreateBoxCollider(parent); }