コード例 #1
0
ファイル: Player.cs プロジェクト: zrisher/ARMS
        /// <summary>
        /// Determine if the ship is going to be hit and get TTI
        /// </summary>
        /// <param name="guided">Missile targeting ship</param>
        /// <param name="tti">Time to Impact</param>
        /// <returns>True iff the missile is on course</returns>
        private bool GetTimeToImpact(GuidedMissile guided, out byte tti)
        {
            Vector3 displacement = m_controlled.GetPosition() - guided.MyEntity.GetPosition();
            Vector3 velocity     = guided.MyEntity.Physics.LinearVelocity - m_controlled.GetTopMostParent().Physics.LinearVelocity;

            float velDotDisp = velocity.Dot(ref displacement);

            if (velDotDisp < 0f)
            {
                // missile has missed
                tti = byte.MaxValue;
                return(false);
            }

            Vector3 tti_vector = displacement * displacement.LengthSquared() / (velDotDisp * displacement);

            float tti_squared = tti_vector.LengthSquared();

            if (tti_squared > 3600f)
            {
                tti = byte.MaxValue;
                return(false);
            }
            tti = Convert.ToByte(Math.Sqrt(tti_squared));
            return(true);
        }
コード例 #2
0
    /// <summary>
    /// 미사일 발사 메소드
    /// </summary>
    public void FireChase()
    {
        // 살아있는 플레이어만 리스트에 추린다
        List <Player> alivePlayer = new List <Player>();

        for (int i = 0; i < Players.Length; i++)
        {
            if (!Players[i].IsDead)
            {
                alivePlayer.Add(Players[i]);
            }
        }

        // 플레이어 중 랜덤한 타겟을 선택
        int index            = Random.Range(0, alivePlayer.Count);
        int targetInstanceID = alivePlayer[index].ActorInstanceID;

        // 미사일을 추적모드로 발사
        Transform     missileFireTransform = MissileFireTransforms[MissileFireTransforms.Length - FireRemainCountPerOnetime];
        GuidedMissile missile = SystemManager.Instance.GetCurrentSceneMain <InGameSceneMain>().BulletManager.Generate(BulletManager.GuidedMissileIndex, missileFireTransform.position) as GuidedMissile;

        if (missile)
        {
            missile.FireChase(targetInstanceID, actorInstanceID, missileFireTransform.right, MissileSpeed, Damage);
        }
    }
コード例 #3
0
 void GuidedMissiles()
 {
     if (countWaveDuration > 0)
     {
         if (spawnTimer <= 0)
         {
             int tempPosIndex = Random.Range(0, 3);
             if (tempPosIndex == 0)
             {
                 spawnPosition.y = spawn[tempPosIndex].position.y;
                 spawnPosition.x = Random.Range(-ABSOLUTE_X_SPAWN, ABSOLUTE_X_SPAWN);
             }
             else
             {
                 spawnPosition.y = Random.Range(-ABSOLUTE_Y_SPAWN, ABSOLUTE_Y_SPAWN);
                 spawnPosition.x = spawn[tempPosIndex].position.x;
             }
             GameObject Obj_guidedMissile = GuidedMissile.GetFromPool(spawnPosition, poolGuidedMissile);
             obstaclesList.Add(Obj_guidedMissile);
             spawnTimer = DifficultyController.instance.guidedMissileTimer;
         }
         else
         {
             spawnTimer -= Time.deltaTime;
         }
     }
     else
     {
         WaveManager();
     }
 }
コード例 #4
0
        public static Relations getRelationsTo(this long identityId, IMyEntity target, Relations breakOn = Relations.NoOwner)
        {
            if (identityId == 0L)
            {
                return(Relations.NoOwner);
            }

            IMyCubeBlock asBlock = target as IMyCubeBlock;

            if (asBlock != null)
            {
                return(getRelationsTo(identityId, asBlock.OwnerId));
            }

            IMyCubeGrid asGrid = target as IMyCubeGrid;

            if (asGrid != null)
            {
                return(getRelationsTo(identityId, asGrid, breakOn));
            }

            IMyCharacter asChar = target as IMyCharacter;

            if (asChar != null)
            {
                if (asChar.IsBot)
                {
                    return(Relations.Enemy);
                }
                IMyPlayer player = asChar.GetPlayer_Safe();
                if (player != null)
                {
                    return(getRelationsTo(identityId, player.IdentityId));
                }

                Logger.DebugLog("character not found, treating as enemy: " + target.getBestName(), Logger.severity.WARNING);
                return(Relations.Enemy);
            }

            if (target is IMyMeteor)
            {
                return(Relations.Enemy);
            }

            if (target.IsMissile())
            {
                long missileOwner;
                if (GuidedMissile.TryGetOwnerId(target.EntityId, out missileOwner))
                {
                    return(getRelationsTo(identityId, missileOwner));
                }
                return(Relations.Enemy);
            }

            Logger.DebugLog("unknown entity, treating as enemy: " + target.getBestName(), Logger.severity.WARNING);
            return(Relations.Enemy);
        }
コード例 #5
0
ファイル: Player.cs プロジェクト: zrisher/ARMS
        private void Update()
        {
            IMyEntity controlled = myPlayer.Controller.ControlledEntity as IMyEntity;

            if (controlled != m_controlled)
            {
                m_controlled = controlled;

                if (controlled is IMyCharacter)
                {
                    m_soundEmitter = null;
                    m_threat       = null;
                    RelayNode charNode;
                    if (!Registrar.TryGetValue(controlled, out charNode))
                    {
                        Log.DebugLog("Failed to get node for character: " + controlled.getBestName(), Logger.severity.WARNING);
                        m_storage = null;
                        return;
                    }
                    m_storage = () => charNode.Storage;
                    Log.DebugLog("now controlling a character", Logger.severity.DEBUG);
                }
                else if (controlled is IMyCubeBlock)
                {
                    IRelayPart shipClient = RelayClient.GetOrCreateRelayPart((IMyCubeBlock)controlled);
                    m_storage      = shipClient.GetStorage;
                    m_soundEmitter = new MyEntity3DSoundEmitter((MyEntity)controlled);
                    Log.DebugLog("now controlling a ship", Logger.severity.DEBUG);
                }
                else
                {
                    Log.TraceLog("player controlling incompatible entity: " + controlled.getBestName(), Logger.severity.TRACE);
                    m_storage      = null;
                    m_soundEmitter = null;
                    m_threat       = null;
                    return;
                }
            }
            else if (m_storage == null || m_storage.Invoke() == null)
            {
                Log.TraceLog("no storage", Logger.severity.TRACE);
                m_threat = null;
                return;
            }

            if (UserSettings.GetSetting(UserSettings.BoolSettingName.MissileWarning))
            {
                UpdateMissileThreat();
            }
            else
            {
                m_threat = null;
            }
        }
コード例 #6
0
    protected override void Shoot()
    {
        base.Shoot();

        if (lastBulletFired != null && lastBulletFired is GuidedMissile)
        {
            GuidedMissile missile = (GuidedMissile)lastBulletFired;
            missile.ResetVelocity();
            missile.Impulse(impulseForce);
        }
    }
コード例 #7
0
    public void AEEndShootAnim()
    {
        smoke.SetActive(false);
        smoke.SetActive(true);
        GameObject missile = missilePool.GetPooledObject();

        missile.transform.localPosition = missileInitialPos;
        missile.SetActive(true);
        GuidedMissile guidedMissile = missile.GetComponentInChildren <GuidedMissile>();

        guidedMissile.speedFactor = speedFactor;
        missile.GetComponentInChildren <GuidedMissile>().speedFactor = speedFactor;
        shootInProgress = false;
    }
コード例 #8
0
ファイル: Player.cs プロジェクト: zrisher/ARMS
        /// <summary>
        /// Warn the player of incoming missile by beeping incessantly.
        /// </summary>
        private void MissileAudioWarning()
        {
            if (Globals.UpdateCount < m_nextBeep || m_threat == null || m_threat.Stopped)
            {
                return;
            }

            byte tti;

            if (!GetTimeToImpact(m_threat, out tti))
            {
                m_threat = null;
                Log.DebugLog("missile is no longer approaching", Logger.severity.DEBUG);
                return;
            }

            m_nextBeep = Globals.UpdateCount + tti;
            m_soundEmitter.PlaySound(m_sound, true);
        }
コード例 #9
0
ファイル: Player.cs プロジェクト: zrisher/ARMS
        /// <summary>
        /// Looks for a missile threating the ship the player is controlling.
        /// </summary>
        private void UpdateMissileThreat()
        {
            if (!(m_controlled is IMyCubeBlock))
            {
                //Log.DebugLog("not controlling a ship");
                return;
            }

            if (m_storage == null)
            {
                Log.TraceLog("no storage getter");
                return;
            }

            RelayStorage store = m_storage.Invoke();

            if (store == null)
            {
                Log.TraceLog("no storage");
                return;
            }

            byte timeToImpact = byte.MaxValue;

            m_threat = null;
            store.ForEachLastSeen((LastSeen seen) => {
                if (seen.Type == LastSeen.EntityType.Missile)
                {
                    GuidedMissile guided;
                    if (Registrar.TryGetValue(seen.Entity, out guided) && IsThreat(guided))
                    {
                        Log.DebugLog("threat: " + guided.MyEntity, Logger.severity.TRACE);
                        byte tti;
                        if (GetTimeToImpact(guided, out tti) && tti < timeToImpact)
                        {
                            timeToImpact = tti;
                            m_threat     = guided;
                        }
                    }
                }
            });
        }
コード例 #10
0
ファイル: Player.cs プロジェクト: zrisher/ARMS
        private bool IsThreat(GuidedMissile guided)
        {
            Target guidedTarget = guided.CurrentTarget;

            return(guidedTarget != null && guidedTarget.Entity != null && !guided.Stopped && guidedTarget.Entity.GetTopMostParent() == m_controlled.GetTopMostParent());
        }
コード例 #11
0
    //given an enemy direction, rotates the turret to face that direction and instantiates bullet
    void RotateAndShoot(Vector3 enemyDir)
    {
        //rotate turret and get intended bullet position
        if (enemyDir.x < 0 && enemyDir.y < 0)
        {
            //facing southwest
            MakeHeadVisible(turretSW, turretSE, turretNW, turretNE);
            bulletSpawn = transform.position + new Vector3(left, down, 0);
        }
        else if (enemyDir.x < 0)
        {
            //facing northwest
            MakeHeadVisible(turretNW, turretSW, turretSE, turretNE);
            bulletSpawn = transform.position + new Vector3(left, up, 0);
        }
        else if (enemyDir.y < 0)
        {
            //facing southeast
            MakeHeadVisible(turretSE, turretNW, turretNE, turretSW);
            bulletSpawn = transform.position + new Vector3(right, down, 0);
        }
        else
        {
            //facing northeast
            MakeHeadVisible(turretNE, turretNW, turretSW, turretSE);
            bulletSpawn = transform.position + new Vector3(right, up, 0);
        }

        Vector3 shootingDir = targetFuturePosition - bulletSpawn;

        //get force to be applied to bullet
        Vector3 bulletForce = shootingDir * strength;

        //instantiate guided missile if upgraded
        if (hasGuidedMissiles)
        {
            var missileClone = Instantiate(missilePrefab, bulletSpawn, Quaternion.identity);

            //get reference to missile's script
            GuidedMissile missile = missileClone.GetComponent <GuidedMissile>();

            if (missile != null)
            {
                missile.Seek(currentTarget.transform);
            }
        }
        else
        {
            //otherwise instantiate bullet
            var bulletClone = Instantiate(bulletPrefab, bulletSpawn, Quaternion.identity);
            bulletClone.GetComponent <Rigidbody2D>().AddForce(bulletForce);

            //get reference to bullet's script
            Bullet bullet = bulletClone.GetComponent <Bullet>();

            if (bullet != null)
            {
                bullet.Seek(currentTarget.transform);
            }
        }
    }
コード例 #12
0
ファイル: Recever.cs プロジェクト: Lenovezhou/Zl_beierAlone
    // 刷新场景内所有物体
    public void Refresh(List <RootObject> temp_dic)
    {
        //服务器里没有本地有
        foreach (RootObject value in temp_dic)
        {
            if (SenceObjects.ContainsKey(value.ID) &&
                value.state == ObjectState.Destroy)
            {
                //Debug.Log(SenceObjects.ContainsKey(temptest) + ":::value.contains过滤后"+value.Name + ":::value.name");

                //Ai销毁时,销毁对应的导弹
                if (value.type == ObjectType.AI && guideddestroy.ContainsKey(value.ID))
                {
                    Destroy(guideddestroy[value.ID], 1f);
                }
                //不销毁Boss,只隐藏
                if (value.type == ObjectType.AI)
                {
                    AI ai = value as AI;
                    if (ai.ai_type == AIType.LifeAndAttack && SenceObjects.ContainsKey(value.ID) && SenceObjects[value.ID] != null)
                    {
                        SenceObjects[value.ID].gameObject.SetActive(false);
                        Destroy(SenceObjects[value.ID].GetComponent <SenceGameObject>());
                    }
                    else
                    {
                        DestroySenceObject(SenceObjects[value.ID]);
                    }
                }
                else
                {
                    DestroySenceObject(SenceObjects[value.ID]);
                }
            }
            else if (value.type == ObjectType.AI && SenceObjects.ContainsKey(value.ID) &&
                     value.state != ObjectState.Destroy)
            {
            }
        }

        foreach (RootObject value in temp_dic)
        {
            //本地包含服务器物体
            if (Recever.rInstance.SenceObjects.ContainsKey(value.ID) && value != null)
            {
                RefreshObject(value);
            }
            //本地不包含服务器物体
            else if (!roleViews.ContainsKey(value.ID) && value.state != ObjectState.Destroy)
            {
                GameObject      obj;
                Role            player;
                AI              ai;
                Bullet          bullet;
                SenceGameObject obj_data;
                HP_View         hpview;
                switch (value.type)
                {
                case ObjectType.Player:
                    player = value as Role;
                    //Debug.Log("<color.red>"+player.Index+"</color>");
                    obj                = Instantiate(RolePrefabs[player.Index]) as GameObject;
                    obj_data           = obj.AddComponent <SenceGameObject>();
                    playerData         = obj.AddComponent <PlayerController>();
                    playerData.prefabs = this.BulletPrefabs;
                    obj_data.Player    = obj.transform.FindChild("_player").gameObject;
                    GradeTx            = obj_data.Player.transform.FindChild("Grade").GetComponent <TextMesh>();
                    PlayerHPText       = obj_data.Player.transform.FindChild("PlayerHPText").GetComponent <TextMesh>();
                    topworming         = obj_data.Player.transform.FindChild("Canvas").FindChild("Image_info").GetComponentInChildren <TextMesh>();
                    rightrange         = obj_data.Player.transform.FindChild("RightRange").GetComponent <TextMesh>();
                    leftrange          = obj_data.Player.transform.FindChild("LeftRange").GetComponent <TextMesh>();
                    RefreshPlayerGrad(player.HP, player.Grade);
                    obj_data.RightBattery = obj_data.Player.transform.FindChild("FireRR").gameObject.AddComponent <LookAt>();
                    obj_data.LeftBattery  = obj_data.Player.transform.FindChild("FireLL").gameObject.AddComponent <LookAt>();

                    //obj_data.RightBattery.transform.FindChild("PaoL").gameObject.AddComponent<Gunrotate>();
                    //obj_data.LeftBattery.transform.FindChild("PaoR").gameObject.AddComponent<Gunrotate>();

                    obj_data.LeftFirePoint  = obj_data.LeftBattery.transform.FindChild("FirePoint").gameObject;
                    obj_data.RightFirePoint = obj_data.RightBattery.transform.FindChild("FirePoint").gameObject;

                    FirePointcontroller temp1 = obj_data.LeftBattery.transform.FindChild("FirePoint").gameObject.AddComponent <FirePointcontroller>();
                    FirePointcontroller temp2 = obj_data.RightBattery.transform.FindChild("FirePoint").gameObject.AddComponent <FirePointcontroller>();
                    temp1.Init(false, true);
                    temp2.Init(false, true);



                    obj_data.RightRein = obj.transform.FindChild("Controller (right)").gameObject;
                    obj_data.LeftRein  = obj.transform.FindChild("Controller (left)").gameObject;
                    //obj_data.Camera = obj.transform.FindChild("Camera (head)").gameObject;
                    hpview = obj.AddComponent <HP_View>();
                    roleViews.Add(value.ID, hpview);
                    hpview.role = value as Role;
                    //  Debug.Log("<color.red>obj_data._weapon " + obj_data._weapon+"******************</color>");
                    hpview.Init();

                    obj_data.SenceObject = value;
                    DefaultWeapon        = obj_data._player.useWeapon.Name;
                    PlayerData           = obj_data;
                    SenceObjects.Add(value.ID, obj_data);
                    send_player.Add(value.ID, obj_data);
                    obj.transform.parent = this.transform;
                    obj.name             = "id_" + value.ID.ToString() + "_" + value.Name;
                    //network_server.isScreening = false;
                    break;

                case ObjectType.AI:
                    ai = value as AI;
                    //Debug.Log("<color=yellow>"+ai.Position+"</color>");
                    obj = null;
                    switch (ai.ai_type)
                    {
                    case AIType.Lithe:
                        obj = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        break;

                    case AIType.Attack:
                        obj           = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        Aiattack_more = ai.Index;
                        break;

                    case AIType.LifeAndAttack:

                        if (Boss == null)
                        {
                            obj = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        }
                        else
                        {
                            obj = Boss;
                        }
                        Aiattack_max = ai.Index;
                        //  初始化 AI只为大怪添加血条

                        hpview = obj.AddComponent <HP_View>();
                        roleViews.Add(value.ID, hpview);
                        hpview.role = value as AI;
                        hpview.Init();

                        break;

                    case AIType.SmartAI:
                        obj          = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        Aiattack_min = ai.Index;
                        break;

                    case AIType.Stone:
                        obj = Instantiate(StonePrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        break;

                    default:
                        Debug.LogError("没有对应的aitype");
                        break;
                    }


                    obj.SetActive(true);
                    obj_data = obj.AddComponent <SenceGameObject>();

                    obj_data.EnemyEffect = obj.transform.FindChild("Enemy Explode").gameObject;

                    obj_data.gameObject.tag = SenceGameObject.AI_TAG;
                    if (ai.ai_type != AIType.Stone)
                    {
                        obj.AddComponent <Follo>();
                        obj.GetComponent <BoxCollider>().size = new Vector3(5f, 2.5f, 5f);
                    }

                    obj_data.SenceObject = value;
                    SenceObjects.Add(value.ID, obj_data);
                    obj.transform.parent = this.transform;
                    obj.name             = "id_" + value.ID.ToString() + "_" + value.Name;

                    break;

                case ObjectType.Bullet:
                    bullet      = value as Bullet;
                    strs        = bullet.Name.Split('_');
                    id          = int.Parse(strs[0]);
                    bullet.Name = strs[1];
                    obj_data    = CreateBullet(bullet, false);
                    //Debug.Log(SenceObjects[id]._pc_man.Index+">>>>>"+Aiattack_min+">>>>>"+Aiattack_more+">>>>>>"+Aiattack_max);
                    /*生成敌机子弹时播放音效*/
                    if (SenceObjects.ContainsKey(id) && SenceObjects[id]._pc_man.Index == Aiattack_more)
                    {
                        //      Audiocontroller.instans.PlayGameAudio("Ss01");
                    }
                    if (SenceObjects.ContainsKey(id) && SenceObjects[id]._pc_man.Index == Aiattack_max)
                    {
                        //      Audiocontroller.instans.PlayGameAudio("kehuan");
                    }
                    if (SenceObjects.ContainsKey(id) && SenceObjects[id]._pc_man.Index == Aiattack_min)
                    {
                        //     Audiocontroller.instans.PlayGameAudio("Ss02");
                    }


                    if (SenceObjects.ContainsKey(id))
                    {
                        //SenceObjects[id].transform.FindChild("Enemy").FindChild("FireFlower").gameObject.SetActive(true);
                        if (SenceObjects[id]._pc_man.ai_type != AIType.LifeAndAttack)
                        {
                            if (SenceObjects[id].GetComponentInChildren <LookAtPlayer>())
                            {
                                obj_data.gameObject.transform.position = SenceObjects[id].GetComponentInChildren <LookAtPlayer>().gameObject.transform.position;
                            }
                            else
                            {
                                Debug.LogError("没有找到lookatplayer");
                                obj_data.gameObject.transform.position = SenceObjects[id].transform.position;
                            }
                        }
                        else
                        {
                            Debug.LogError("生成子弹时找不到对应的发射点");
                            obj_data.gameObject.transform.position = value.Position;
                        }

                        //控制开火特效
                        if (SenceObjects[id] != null && SenceObjects[id].GetComponentInChildren <LookAtPlayer>() && SenceObjects[id]._pc_man.ai_type != AIType.Stone)
                        {
                            //Debug.Log("<color=yellow>"+SenceObjects[id].name+"</color>");
                            SenceObjects[id].GetComponentInChildren <LookAtPlayer>().isFire = true;
                        }
                        else
                        {
                            Debug.LogError("没有找到;LookAtPlayer;");
                        }
                    }
                    else
                    {
                        Debug.LogError("生成子弹时找不到对应的发射点");
                        obj_data.gameObject.transform.position = value.Position;
                    }

                    obj_data.gameObject.transform.rotation = value.Rotation;
                    ray = new Ray(obj_data.transform.position, obj_data.transform.forward);
                    if (Physics.Raycast(ray, out hit) &&
                        hit.transform.gameObject.CompareTag(SenceGameObject.PLAYER_TAG) &&
                        !HurtPoints.ContainsKey(obj_data.SenceObject.ID))
                    {
                        HurtPoints.Add(obj_data.SenceObject.ID, hit.point);
                    }
                    obj_data.gameObject.GetComponent <Rigidbody>().AddForce(obj_data.transform.forward * MsgCenter.LUACH_FORCE * 2);
                    obj_data.gameObject.tag = SenceGameObject.AI_BULLET_TAG;
                    Destroy(obj_data.gameObject, 10f);
                    //SenceObjects.Add(value.ID, obj_data);
                    break;

                case ObjectType.PlayerBullet:

                    //bullet = value as Bullet;
                    //obj_data = CreateBullet(bullet,false);
                    //obj_data.gameObject.transform.position = value.Position;
                    //obj_data.gameObject.transform.rotation = value.Rotation;
                    //SenceObjects.Add(value.ID, obj_data);
                    break;

                case ObjectType.Weapon:
                    //   if (value.state != ObjectState.Destroy)
                {
                    string     temppath = dropOut.ReadXML(value.Name);
                    GameObject tempobj  = Resources.Load(temppath) as GameObject;
                    // Debug.Log("<color=yellow>生成掉;落物" + value.Name +value.Position+ "</color>");

                    GameObject OBJ = Instantiate(tempobj, value.Position, value.Rotation) as GameObject;
                    OBJ.AddComponent <BOX_co>();
                    BoxCollider box = OBJ.GetComponent <BoxCollider>();
                    box.center = Vector3.zero;
                    box.size   = Vector3.one;
                    SenceGameObject objdate = OBJ.AddComponent <SenceGameObject>();
                    objdate.SenceObject = value;
                    SenceObjects.Add(value.ID, objdate);
                    //OBJ.transform.position = value.Position;
                    //OBJ.transform.rotation = value.Rotation;
                    OBJ.SetActive(true);
                }

                break;

                case ObjectType.UI:
                    UIMenu          ui        = value as UIMenu;
                    SenceGameObject mune_data = Recever.rInstance.DisplayMenu(ui.IsStart);
                    if (ui.IsStart)
                    {
                        GameState = Datas.GameState.Start;
                    }
                    else
                    {
                        GameState = Datas.GameState.End;
                    }
                    mune_data.SenceObject = ui;
                    SenceObjects.Add(mune_data.SenceObject.ID, mune_data);
                    if (ui.PageTab != null && sort.Count <= 10)
                    {
                        sort.Add(ui.PageTab);
                    }
                    else
                    {
                        Debug.Log("<color=red>分数数组长度" + sort.Count + "</color>");
                    }
                    if (ui.Name != null && rankingname.Count <= 10)
                    {
                        rankingname.Add(ui.Name);
                    }
                    else
                    {
                        Debug.Log("<color=red>名字数组长度" + rankingname.Count + "</color>");
                    }
                    break;

                case ObjectType.Ranking:
                    ranking              = value as Ranking;
                    obj                  = new GameObject();
                    obj_data             = obj.AddComponent <SenceGameObject>();
                    obj_data.SenceObject = ranking;
                    SenceObjects.Add(ranking.ID, obj_data);
                    break;

                case ObjectType.GuidedMissile:

                    GuidedMissile gu = value as GuidedMissile;
                    Debug.Log(gu.type);
                    GameObject guided = Instantiate(Bullets["weapon3"]);
                    // guided.AddComponent<Collider_items>();
                    obj_data             = guided.AddComponent <SenceGameObject>();
                    obj_data.SenceObject = value;
                    guided.tag           = SenceGameObject.PLAYER_BULLET_TAG;
                    //if(gu.Name == "right")
                    //{
                    //    guided.GetComponent<Rigidbody>().velocity = PlayerData.RightRein.transform.forward;
                    //}else{
                    //    guided.GetComponent<Rigidbody>().velocity = PlayerData.LeftRein.transform.forward;
                    //}
                    guided.transform.position = gu.Position;
                    Guided guid = guided.AddComponent <Guided>();
                    if (gu.target_id == null ||
                        !SenceObjects.ContainsKey(gu.target_id))
                    {
                        guid.Target = null;
                    }
                    else
                    {
                        //导弹目标为掉落物时没有爆炸效果
                        if (SenceObjects[gu.target_id].type != ObjectType.Weapon)
                        {
                            obj_data.EnemyEffect = guided.transform.FindChild("Enemy Explode").gameObject;
                        }

                        //设置导弹的目标,及与目标对应,一起消失
                        guid.Target = SenceObjects[gu.target_id].transform;
                        if (!guideddestroy.ContainsKey(gu.target_id))
                        {
                            guideddestroy.Add(gu.target_id, guided);
                        }
                    }
                    SenceObjects.Add(gu.ID, obj_data);
                    break;
                }
            }
        }
    }