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;
    }
Beispiel #4
0
    public virtual bool IsInBounds(Transform t)
    {
        if (isInitBounds == false)
        {
            bounds       = ColliderHelper.CaculateBounds(gameObject.transform, false);//不用碰撞体,计算包围盒就行了
            isInitBounds = true;
        }

        return(bounds.Contains(t.position));
    }
Beispiel #5
0
    /// <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);
    }
Beispiel #6
0
    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();
    }
Beispiel #10
0
    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);
    }
Beispiel #12
0
 List <Collider> LocateEnemyInWeaponRange(float range)
 {
     return(ColliderHelper.FindNearbyColiders(transform, range, "Infected"));
 }
Beispiel #13
0
    public static void AddBoxCollider()
    {
        Transform parent = Selection.activeGameObject.transform;

        ColliderHelper.CreateBoxCollider(parent);
    }