void InitRayCastTarget(PlayerEntity player)
        {
            var target = RayCastTargetUtil.AddRayCastTarget(player.RootGo());

            PlayerCastData.Make(target, player.entityKey.Value.EntityId);
            player.hasAddRaycast = true;
        }
        private RayCastTarget MakeCastTarget()
        {
            var go  = new GameObject(DefaultName);
            var col = go.AddComponent <BoxCollider>();

            col.isTrigger = true;
            var target = RayCastTargetUtil.AddRayCastTarget(go);

            go.layer            = UnityLayerManager.GetLayerIndex(EUnityLayerName.UserInputRaycast);
            go.transform.parent = _poolRoot.transform;
            return(target);
        }
        public void OnLoadSucc(VehicleEntity vehicle, UnityObject unityObj)
        {
            var go = unityObj.AsGameObject;

            AssertUtility.Assert(go != null);

            //vehicle.gameObject.Value.GetComponent<Rigidbody>().isConstantColliderPose = true;
            if (!vehicle.hasVehicleType)
            {
                vehicle.AddVehicleType((EVehicleType)vehicle.vehicleAssetInfo.VType);
            }

            // UnityEngine.Debug.LogError("Client Load Vehicle Successfully!!!");
            if (vehicle.HasDynamicData())
            {
                var dataComp = vehicle.GetDynamicData();
                go.transform.rotation = dataComp.Rotation;
                go.transform.position = dataComp.Position.ShiftedVector3();
            }
            else
            {
                go.transform.eulerAngles = new Vector3();
                go.transform.position    = new Vector3(11, 50, 17);
            }

            vehicle.AddVehicleComponentsPostInit((EVehicleType)vehicle.vehicleAssetInfo.VType, unityObj,
                                                 _contexts.player, false);
            var vehicleTimer = _contexts.session.clientSessionObjects.VehicleTimer;

            vehicle.SetTimer(vehicleTimer);

            if (!vehicle.isFlagOffline && !SharedConfig.DynamicPrediction)
            {
                vehicle.SetKinematic(true);
            }

            if (SharedConfig.DynamicPrediction)
            {
                VehicleStateUtility.SetVehicleSyncLatest(vehicle, true);
            }

            var target = RayCastTargetUtil.AddRayCastTarget(go);

            VehicleCastData.Make(target, vehicle.entityKey.Value.EntityId);
        }
示例#4
0
        public static RayCastTarget Assemble(GameObject model, Vector3 position, string name, bool needRotation = false)
        {
            if (null == model)
            {
                Logger.ErrorFormat("model is null !");
                return(null);
            }
            model.transform.position = position + GetGroundAnchorOffset(model);
            var colTrans = model.transform.Find(SceneObjectConstant.NormalColliderName);

            if (null == colTrans)
            {
                Logger.ErrorFormat("no normal collider find in {0}", model.name);
                var colGo = new GameObject(SceneObjectConstant.NormalColliderName);
                colTrans                  = colGo.transform;
                colTrans.parent           = model.transform;
                colTrans.localPosition    = Vector3.zero;
                colTrans.localEulerAngles = Vector3.zero;
                colTrans.localScale       = Vector3.one;
                var col = colGo.AddComponent <BoxCollider>();
                col.isTrigger = true;
                col.size      = Vector3.one;
            }

            if (needRotation)
            {
                colTrans.Rotate(new Vector3(0, 0, 90));
            }
            var normalCollider = colTrans.GetComponent <BoxCollider>();

            if (null == normalCollider)
            {
                Logger.ErrorFormat("no box attached to collider go");
                return(null);
            }

            RayCastTarget target = RayCastTargetUtil.AddRayCastTarget(normalCollider.gameObject);

            normalCollider.gameObject.layer = UnityLayerManager.GetLayerIndex(EUnityLayerName.UserInputRaycast);
            normalCollider.enabled          = true;
            return(target);
        }
        protected RayCastTarget AddRaycastTarget(GameObject gameObject)
        {
            var           colliders           = gameObject.GetComponentsInChildren <Collider>();
            var           colliderCount       = colliders.Length;
            bool          noInputCastCollider = true;
            RayCastTarget target = null;

            for (int i = 0; i < colliderCount; ++i)
            {
                var collider = colliders[i];
                if (collider.gameObject.layer == UnityLayerManager.GetLayerIndex(EUnityLayerName.UserInputRaycast))
                {
                    target = RayCastTargetUtil.AddRayCastTarget(collider.gameObject);
                    noInputCastCollider = false;
                }
            }

            if (noInputCastCollider)
            {
                _logger.ErrorFormat("Door {0} has no inputraycast collider.", gameObject.name);
            }
            return(target);
        }
示例#6
0
        public static RayCastTarget Assemble(GameObject model, SceneObjectEntity entity)
        {
            model.transform.localRotation = Quaternion.Euler(0, 0, 0);
            model.transform.position      = Vector3.zero;

            var         child = model.transform.Find(SceneObjectConstant.NormalColliderName);
            BoxCollider boxCollider;

            if (null == child)
            {
                child                 = new GameObject(SceneObjectConstant.NormalColliderName).transform;
                child.parent          = model.transform;
                boxCollider           = child.gameObject.AddComponent <BoxCollider>();
                boxCollider.isTrigger = true;
            }
            else
            {
                boxCollider = child.gameObject.GetComponent <BoxCollider>();
            }
            boxCollider.center     = Vector3.zero;
            boxCollider.enabled    = true;
            child.gameObject.layer = UnityLayerManager.GetLayerIndex(EUnityLayerName.UserInputRaycast);

            if (entity.hasWeaponObject && SingletonManager.Get <WeaponResourceConfigManager>().IsC4(entity.weaponObject.ConfigId))
            {
                WeaponAnimationBase.FinishedWeaponAnimation(model);
            }

            Bounds bounds = CalculateBounds(model);

            boxCollider.size = bounds.size; // * model.transform.worldToLocalMatrix;

            /*if (entity.hasWeaponObject)
             * {
             *  var config = SingletonManager.Get<WeaponResourceConfigManager>().GetConfigById(entity.weaponObject.ConfigId);
             *  if (config != null && ((EWeaponType_Config) config.Type).CanAutoPick())
             *  {
             *      if (SingletonManager.Get<WeaponResourceConfigManager>().IsC4(entity.weaponObject.ConfigId))
             *      {
             *          boxCollider.size = new Vector3(bounds.size.x, 0.4f, bounds.size.z);
             *      }
             *      else
             *      {
             *          boxCollider.size = new Vector3(0.4f, bounds.size.y, bounds.size.z);
             *      }
             *  }
             * }*/
            entity.position.Bounds = bounds;

            child.localEulerAngles = Vector3.zero;
            child.localPosition    = bounds.center - model.transform.position;
            child.localScale       = Vector3.one;

            if (entity.hasSize)
            {
                model.transform.localScale = Vector3.one * Mathf.Max(1f, entity.size.Value);
            }
            else
            {
                model.transform.localScale = Vector3.one;
            }

            if ((entity.hasWeaponObject && !SingletonManager.Get <WeaponResourceConfigManager>().IsC4(entity.weaponObject.ConfigId) &&
                 !SingletonManager.Get <WeaponResourceConfigManager>().IsArmors(entity.weaponObject.ConfigId)) ||
                (entity.hasSimpleItem && entity.simpleItem.Category == (int)ECategory.WeaponPart))
            {
                model.transform.localRotation = Quaternion.Euler(0, 0, -90);
                entity.position.ModelRotate   = true;
            }
            else
            {
                entity.position.ModelRotate = false;
            }


            var target = RayCastTargetUtil.AddRayCastTarget(child.gameObject);

            return(target);
        }