Exemplo n.º 1
0
    public void SetCharacter(GameObject obj)
    {
        CharacterController cc = obj.GetComponent <CharacterController>();

        cc_slopeLimit      = cc.slopeLimit;
        cc_stepOffset      = cc.stepOffset;
        cc_skinWidth       = cc.skinWidth;
        cc_minMoveDistance = cc.minMoveDistance;
        cc_center          = cc.center;
        cc_radius          = cc.radius;
        cc_height          = cc.height;

        Player_Movement player = obj.GetComponent <Player_Movement>();

        p_smooth = player.smooth;
        //p_isDead = player.isDead;
        p_onGravityField = player.onGravityField;
        //p_isSwap = player.isSwap;
        p_rollDistance    = player.rollDistance;
        p_rollReduction   = player.rollReduction;
        p_jumpPower       = player.JumpPower;
        p_swapDelay       = player.SwapDelay;
        p_walkSpeed       = player.walkSpeed;
        p_jogSpeed        = player.jogSpeed;
        p_runSpeed        = player.runSpeed;
        p_meleeDistance   = player.MeleeDistance;
        p_rotateTurnSpeed = player.RotateturnSpeed;

        Player_IK handIK = obj.GetComponent <Player_IK>();

        ik_smoothDamp = handIK.smoothDamp;

        CharacterAttributes attribute = obj.GetComponent <CharacterAttributes>();

        c_name                  = attribute.name;
        c_maxHealth             = attribute.maxHealth;
        c_health                = attribute.health;
        c_maxShield             = attribute.maxShield;
        c_shield                = attribute.shield;
        c_shieldRecoverValue    = attribute.shieldRecoverValue;
        c_shieldRecoverStart    = attribute.shieldRecoverStartTime;
        c_shieldRecoverInterval = attribute.shieldRecoverIntervalTime;
        c_faceSprite            = attribute.faceSprite.name;

        WeaponManager weapon = obj.GetComponent <WeaponManager>();

        w_mainWeapon    = weapon.m_MainWeapon;
        w_subWeapon     = weapon.m_SubWeapon;
        w_specialWeapon = new string[weapon.m_SpecialWeapon.Count];

        for (int i = 0; i < weapon.m_SpecialWeapon.Count; i++)
        {
            w_specialWeapon[i] = weapon.m_SpecialWeapon[i];
        }
    }
    GameObject CreateCharacter(Vector3 Spawnpos)
    {
        GameObject obj = Instantiate(Resources.Load("Models/Character/Character") as GameObject);

        switch (SettingManager.instance.stageName)
        {
        case "Varba":
            obj.transform.position = new Vector3(80f, -13.4f, 243f);
            //obj.transform.rotation = Quaternion.Euler(new Vector3(0f, 155f, 0f));
            break;

        case "Dungeon":
            obj.transform.position = new Vector3(-1.5f, 1f, 2.3f);
            //obj.transform.rotation = Quaternion.Euler(new Vector3(0f, -180f, 0f));
            break;
        }

        // 1번 오디오 소스
        AudioSource objAudio = obj.AddComponent <AudioSource>();

        objAudio.playOnAwake  = false;
        objAudio.spatialBlend = 1f;
        objAudio.dopplerLevel = 1f;
        objAudio.rolloffMode  = AudioRolloffMode.Linear;
        objAudio.minDistance  = 3f;
        objAudio.maxDistance  = 40f;

        // 2번 애니메이터
        Avatar objAvatar = Resources.Load("Character/CharactersAvatar") as Avatar;
        RuntimeAnimatorController objController = Resources.Load("Character/PlayerAnimator_Male") as RuntimeAnimatorController;
        Animator objAnim = obj.AddComponent <Animator>();

        objAnim.avatar = objAvatar;
        obj.GetComponent <Animator>().runtimeAnimatorController = objController;
        objAnim.updateMode      = AnimatorUpdateMode.UnscaledTime;
        objAnim.applyRootMotion = true;
        objAnim.cullingMode     = AnimatorCullingMode.CullUpdateTransforms;

        // 3번 캐릭터 컨트롤러
        CharacterController objcon = obj.AddComponent <CharacterController>();

        objcon.slopeLimit      = JsonManager.instance.characterInfo.cc_slopeLimit;
        objcon.stepOffset      = JsonManager.instance.characterInfo.cc_stepOffset;
        objcon.skinWidth       = JsonManager.instance.characterInfo.cc_skinWidth;
        objcon.minMoveDistance = JsonManager.instance.characterInfo.cc_minMoveDistance;
        objcon.center          = JsonManager.instance.characterInfo.cc_center;
        objcon.radius          = JsonManager.instance.characterInfo.cc_radius;
        objcon.height          = JsonManager.instance.characterInfo.cc_height;

        // 4번 스크립트 Player_Movement
        Player_Movement objMove = obj.AddComponent <Player_Movement>();

        objMove.smooth          = JsonManager.instance.characterInfo.p_smooth;
        objMove.onGravityField  = JsonManager.instance.characterInfo.p_onGravityField;
        objMove.rollDistance    = JsonManager.instance.characterInfo.p_rollDistance;
        objMove.rollReduction   = JsonManager.instance.characterInfo.p_rollReduction;
        objMove.JumpPower       = JsonManager.instance.characterInfo.p_jumpPower;
        objMove.SwapDelay       = JsonManager.instance.characterInfo.p_swapDelay;
        objMove.walkSpeed       = JsonManager.instance.characterInfo.p_walkSpeed;
        objMove.jogSpeed        = JsonManager.instance.characterInfo.p_jogSpeed;
        objMove.runSpeed        = JsonManager.instance.characterInfo.p_runSpeed;
        objMove.MeleeDistance   = JsonManager.instance.characterInfo.p_meleeDistance;
        objMove.RotateturnSpeed = JsonManager.instance.characterInfo.p_rotateTurnSpeed;
        objMove.SpineBody       = obj.transform.GetChild(0).GetChild(0).gameObject;
        playerMovement          = objMove;

        GameObject objManager = new GameObject("PlayerManager");

        objManager.transform.SetParent(obj.transform);
        objManager.transform.localPosition = Vector3.zero;

        objMove.fallDirection = objManager.transform;
        objMove.headPivot     = obj.GetComponent <BodyInfomation>().Head.transform;
        objMove.LeftHand      = obj.GetComponent <BodyInfomation>().Hand1.transform.GetChild(0).gameObject;
        objMove.RightHand     = obj.GetComponent <BodyInfomation>().Hand2.transform.GetChild(4).gameObject;

        GameObject CameraPivot = new GameObject("CameraPivot");

        CameraPivot.transform.SetParent(obj.transform);
        CameraPivot.transform.localPosition = JsonManager.instance.characterInfo.p_pivot;

        GameObject CameraTarget = new GameObject("CameraTarget");

        CameraTarget.transform.SetParent(CameraPivot.transform);
        CameraTarget.transform.localPosition = JsonManager.instance.characterInfo.p_target;

        GameObject Grenade = new GameObject("Grenade");

        Grenade.transform.SetParent(obj.transform);
        Grenade.transform.localPosition = Vector3.zero;

        GameObject fixedGrenade = new GameObject("FixedAngle");

        fixedGrenade.transform.SetParent(Grenade.transform);
        fixedGrenade.transform.localPosition = Vector3.zero;

        //Player_Manager objPlayerManager = objManager.AddComponent<Player_Manager>();
        //objPlayerManager.Character = obj;

        // 6번 스크립트 WeaponManager
        WeaponManager objWeapon = obj.AddComponent <WeaponManager>();

        objWeapon.m_MainWeapon = JsonManager.instance.characterInfo.w_mainWeapon;
        objWeapon.m_SubWeapon  = JsonManager.instance.characterInfo.w_subWeapon;

        objWeapon.m_WeaponObject = obj.GetComponent <BodyInfomation>().Hand2.transform.GetChild(0).gameObject;
        objWeapon.m_AudioSource  = objAudio;
        objWeapon.playerMovement = objMove;
        objWeapon.anim           = obj.GetComponent <Animator>();
        objWeapon.m_Attacker     = obj;
        objWeapon.species        = JWeaponOffset.SPECIES.HUMAN;

        // 7번 스크립트 Weapon_Animation
        Player_WeaponAnimation objWanim = obj.AddComponent <Player_WeaponAnimation>();

        objWanim.Pose_MainWeapon = obj.GetComponent <BodyInfomation>().Body.transform.GetChild(0).gameObject;
        objWanim.Pose_SubWeapon  = obj.transform.GetChild(0).GetChild(0).GetChild(2).GetChild(0).gameObject;
        objWanim.type1           = obj.GetComponent <BodyInfomation>().Hand2.transform.GetChild(0).GetChild(0).gameObject;
        objWanim.type2           = obj.GetComponent <BodyInfomation>().Hand2.transform.GetChild(0).GetChild(1).gameObject;

        // 8번 스크립트 player_IK
        Player_IK objHand = obj.AddComponent <Player_IK>();

        objHand.smoothDamp    = JsonManager.instance.characterInfo.ik_smoothDamp;
        objHand.weaponManager = objWeapon;
        objHand.First_Weapon  = objWanim.type1;
        objHand.Second_Weapon = objWanim.type2;
        objHand.Third_Weapon  = obj.GetComponent <BodyInfomation>().Hand2.transform.GetChild(0).GetChild(2).gameObject;

        obj.GetComponent <HumanoidVerticalLegPlacement>().CameraPivot = CameraPivot.transform;
        obj.GetComponent <HumanoidVerticalLegPlacement>().LayerMask   = LayerMask.GetMask("Map");

        // 10번 스크립트 Granade
        Grenade objG = Grenade.AddComponent <Grenade>();

        objG.m_CurrentClip        = JsonManager.instance.characterInfo.g_currentClip;
        objG.m_ThrowPower         = JsonManager.instance.characterInfo.g_throwPower;
        objG.m_Explosion_Time     = JsonManager.instance.characterInfo.g_explosionTime;
        objG.m_Explosion_Distance = JsonManager.instance.characterInfo.g_explosionDistance;
        objG.m_ThrowRate          = JsonManager.instance.characterInfo.g_throwRate;
        objG.m_Damage             = JsonManager.instance.characterInfo.g_damage;
        objG.m_Bounce_Count       = JsonManager.instance.characterInfo.g_bounceCount;
        objG.isThrow      = JsonManager.instance.characterInfo.g_isThrow;
        objG.isSticky     = JsonManager.instance.characterInfo.g_isSticky;
        objG.isAir        = JsonManager.instance.characterInfo.g_isAir;
        objG.isPenetrate  = JsonManager.instance.characterInfo.g_isPenetrate;
        objG.isStun       = JsonManager.instance.characterInfo.g_isStun;
        objG.isRadiation  = JsonManager.instance.characterInfo.g_isRadiation;
        objG.isSlow       = JsonManager.instance.characterInfo.g_isSlow;
        objG.isDouble     = JsonManager.instance.characterInfo.g_isDouble;
        objG.isAttraction = JsonManager.instance.characterInfo.g_isAttraction;
        objG.isWeakness   = JsonManager.instance.characterInfo.g_isWeakness;
        objG.isAi         = JsonManager.instance.characterInfo.g_isAI;
        objG.FixedAngle   = fixedGrenade;
        objG.m_Muzzle     = obj.GetComponent <BodyInfomation>().Hand1;

        // 11번 GrenadeManager
        GrenadeManager objGM = Grenade.AddComponent <GrenadeManager>();

        objGM.grenade  = objG;
        objGM.isEnemy  = JsonManager.instance.characterInfo.gm_isEnemy;
        objGM.isFriend = JsonManager.instance.characterInfo.gm_isFriend;

        // 12번 스크립트 CharacterAttribute
        CharacterAttributes objAtt = obj.AddComponent <CharacterAttributes>();

        objAtt.name                      = JsonManager.instance.characterInfo.c_name;
        objAtt.maxHealth                 = JsonManager.instance.characterInfo.c_maxHealth;
        objAtt.health                    = JsonManager.instance.characterInfo.c_health;
        objAtt.maxShield                 = JsonManager.instance.characterInfo.c_maxShield;
        objAtt.shield                    = JsonManager.instance.characterInfo.c_shield;
        objAtt.shieldRecoverValue        = JsonManager.instance.characterInfo.c_shieldRecoverValue;
        objAtt.shieldRecoverStartTime    = JsonManager.instance.characterInfo.c_shieldRecoverStart;
        objAtt.shieldRecoverIntervalTime = JsonManager.instance.characterInfo.c_shieldRecoverInterval;
        objAtt.faceSprite                = Resources.Load("Images/CharacterFace/" + JsonManager.instance.characterInfo.c_faceSprite, typeof(Sprite)) as Sprite;
        objAtt.animator                  = obj.GetComponent <Animator>();
        objAtt.weaponManager             = objWeapon;
        objAtt.playerMovement            = objMove;
        objAtt.grenade                   = objG;
        objAtt.characterIK               = objHand;

        // 13번 CameraFollow
        GameObject   CameraParent = new GameObject("cameraParent");
        CameraFollow camfol       = CameraParent.AddComponent <CameraFollow>();

        camfol.Sensitivity = JsonManager.instance.characterInfo.cf_Sensitivity;
        camfol.clampAngle  = JsonManager.instance.characterInfo.cf_ClampAngle;
        camfol.CameraPivot = CameraPivot.transform;
        camfol.Character   = obj.transform;
        camfol.anim        = objAnim;

        GameObject camera = new GameObject("Main Camera");

        camera.transform.SetParent(CameraParent.transform);
        camera.transform.localPosition = Vector3.zero;
        camera.tag = "MainCamera";
        var cameraComponent = camera.AddComponent <Camera>();

        cameraComponent.cullingMask = ~(1 << HidePos);
        camera.AddComponent <AudioListener>();
        camera.AddComponent <VolumetricFogAndMist.VolumetricFog>().density = 0;

        GameObject targetLook = new GameObject("targetLook");

        targetLook.transform.SetParent(camera.transform);
        targetLook.transform.localPosition = new Vector3(0, 0, 30);

        CameraCollision camcol = camera.AddComponent <CameraCollision>();

        camcol.Target = CameraTarget.transform;

        GameObject dummy = new GameObject("Dummy");

        dummy.transform.SetParent(CameraParent.transform);
        dummy.transform.localPosition = Vector3.zero;

        camcol.CameraTransform = dummy.transform;
        camcol.Character       = obj;
        camcol.smooth          = JsonManager.instance.characterInfo.cc_smooth;
        camcol.offset          = new CameraCollision.Offset();
        camcol.offset.idle     = JsonManager.instance.characterInfo.cc_idle;
        camcol.offset.Zoom     = JsonManager.instance.characterInfo.cc_zoom;
        camcol.offset.Aiming   = JsonManager.instance.characterInfo.cc_aiming;

        // 15번 스크립트 Player_Manager
        Player_Manager objM = objManager.AddComponent <Player_Manager>();

        objM.Character       = obj;
        objM.camerafollow    = camfol;
        objM.collisionCamera = camcol;

        // 카메라 생기고
        objHand.targetLook = camera.transform.GetChild(0);

        GameObject SubPos = new GameObject("SubCameraPosition");

        SubPos.transform.SetParent(obj.transform);
        SubPos.transform.localPosition = JsonManager.instance.characterInfo.sc_pos;

        // 매니저에 넣는작업
        player = obj;
        cameraTopView.TpsCamera         = camera;
        cameraTopView.SubCameraposition = SubPos;
        cameraTopView.Character         = obj;

        cameraManager.arrCam[0] = camera.GetComponent <Camera>();

        keyManager.weaponManager       = objWeapon;
        keyManager.grenadeManager      = objGM;
        keyManager.playerMovement      = objMove;
        keyManager.characterAttributes = objAtt;

        uiManager.player_Attributes = objAtt;
        uiManager.playerWeapon      = obj;

        // 파티클 생성
        GameObject particleObj = new GameObject("Particle");

        particleObj.transform.SetParent(obj.transform);
        particleObj.transform.localPosition = Vector3.zero;

        GameObject bleedingObj = Instantiate(Resources.Load("Prefabs/Particle/" + JsonManager.instance.characterInfo.bleeding) as GameObject, particleObj.transform);

        bleedingObj.transform.localPosition = JsonManager.instance.characterInfo.bleeding_pos;
        objAtt.bleeding = bleedingObj.GetComponent <ParticleSystem>();

        GameObject stunObj = Instantiate(Resources.Load("Prefabs/Particle/" + JsonManager.instance.characterInfo.stun) as GameObject, particleObj.transform);

        stunObj.transform.localPosition = JsonManager.instance.characterInfo.stun_pos;
        objAtt.stun = stunObj.GetComponent <ParticleSystem>();

        GameObject radiationObj = Instantiate(Resources.Load("Prefabs/Particle/" + JsonManager.instance.characterInfo.radiation) as GameObject, particleObj.transform);

        radiationObj.transform.localPosition = JsonManager.instance.characterInfo.radiation_pos;
        objAtt.radiation = radiationObj.GetComponent <ParticleSystem>();

        GameObject burnObj = Instantiate(Resources.Load("Prefabs/Particle/" + JsonManager.instance.characterInfo.burn) as GameObject, particleObj.transform);

        burnObj.transform.localPosition = JsonManager.instance.characterInfo.burn_pos;
        objAtt.burn = burnObj.GetComponent <ParticleSystem>();

        GameObject strenuousObj = Instantiate(Resources.Load("Prefabs/Particle/FX_Strenuous") as GameObject, particleObj.transform);

        strenuousObj.transform.localPosition = new Vector3(0f, 1f, 0f);
        objAtt.strenuous = strenuousObj.GetComponent <ParticleSystem>();

        GameObject drainHealthObj = Instantiate(Resources.Load("Prefabs/Particle/FX_DrainHealth") as GameObject, particleObj.transform);

        drainHealthObj.transform.localPosition = new Vector3(0f, 1f, 0f);
        objAtt.drainHealth = drainHealthObj.GetComponent <ParticleSystem>();

        GameObject healObj = Instantiate(Resources.Load("Prefabs/Particle/FX_Heal_02") as GameObject, particleObj.transform);

        healObj.transform.localPosition = Vector3.zero;
        objAtt.heal = healObj.GetComponent <ParticleSystem>();

        GameObject electricObj = Instantiate(Resources.Load("Prefabs/Particle/FX_Electricity_gun") as GameObject, particleObj.transform);

        electricObj.transform.localPosition = new Vector3(0f, 1f, 0f);
        objAtt.electric = electricObj.GetComponent <ParticleSystem>();

        GameObject poisonObj = Instantiate(Resources.Load("Prefabs/Particle/FX_Poison_Purple") as GameObject, particleObj.transform);

        poisonObj.transform.localPosition = JsonManager.instance.characterInfo.radiation_pos;
        objAtt.poison = poisonObj.GetComponent <ParticleSystem>();

        // Character Addforce
        obj.AddComponent <CharacterAddforce>();

        // WeaponManager 생성 후 생성.
        GameObject a = new GameObject("MagazinePool");

        a.transform.SetParent(this.transform.parent);
        a.AddComponent <MagazinePool>();
        a.transform.localPosition = Vector3.zero;

        return(obj);
    }