Пример #1
0
    void Init()
    {
#if UNITY_EDITOR
        X_MouseSensitivity = 3;
        S_MouseSensitivity = 0.05f;
#endif

        AudioListenerTransform = this.transform.parent.GetComponentInChildren <AudioListener>().transform;

        if (lerpState == null)
        {
            lerpState      = new TPCameraState("lerp");
            cacheLerpState = new TPCameraState("lerp");
        }
        if (currentState == null)
        {
            currentState = new TPCameraState("");
        }

        if (CameraStateList == null)
        {
            CameraStateList = Resources.Load <TPCameraListData>("Data/Camera/TPCameraListData");
            if (CameraStateList == null)
            {
                Debug.LogError("TPCameraListData don't exist!!!");
                return;
            }
        }

        mainCamera = this.GetComponentInChildren <Camera>();

        TargetLookAt = new GameObject("targetLookAt").transform;
        //TargetLookAt.hideFlags = HideFlags.HideInHierarchy;
        TargetLookAt.position = Vector3.one;
        TargetLookAt.rotation = Quaternion.identity;
        DontDestroyOnLoad(TargetLookAt);
        DontDestroyOnLoad(this.gameObject);
        ChangeState("Lock2p5", false);
    }
    /// <summary>
    /// Created the Third Person Controller
    /// </summary>
    void Create()
    {
        // base for the character
        var _3rdPerson = GameObject.Instantiate(charObj, Vector3.zero, Quaternion.identity) as GameObject;
        if (!_3rdPerson)
            return;

        _3rdPerson.name = "3rdPersonController";

        _3rdPerson.AddComponent<ThirdPersonController>();
        var footStep = _3rdPerson.AddComponent<FootStepFromTexture>();
        var collider = _3rdPerson.GetComponent<CapsuleCollider>();

        // rigidBody
        var rigidbody = _3rdPerson.GetComponent<Rigidbody>();
        rigidbody.constraints = RigidbodyConstraints.FreezeRotation;
        rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        rigidbody.mass = 80;

        // capsule collider
        collider.height = ColliderHeight(_3rdPerson.GetComponent<Animator>());
        collider.center = new Vector3(0, (float) System.Math.Round(collider.height * 0.5f, 2), 0);
        collider.radius = (float) System.Math.Round(collider.height * 0.15f, 2);

        // animator
        _3rdPerson.GetComponent<Animator>().avatar = _3rdPerson.GetComponent<Animator>().avatar;
        var leftFT = _3rdPerson.GetComponent<Animator>().GetBoneTransform(HumanBodyBones.LeftFoot).gameObject.AddComponent<SphereCollider>();
        var rightFT = _3rdPerson.GetComponent<Animator>().GetBoneTransform(HumanBodyBones.RightFoot).gameObject.AddComponent<SphereCollider>();

        controller = currentTemplate.animatorController;
        if (controller)
            _3rdPerson.GetComponent<Animator>().runtimeAnimatorController = controller;

        // footStep
        var _footStepSouce = new GameObject("footStepSource");
        _footStepSouce.transform.SetParent(_3rdPerson.transform);
        var sourceObj = new GameObject("sourceDefault", typeof(AudioSource));
        sourceObj.transform.SetParent(_footStepSouce.transform);
        sourceObj.GetComponent<AudioSource>().playOnAwake = false;
        footStep.defaultSurface = new AudioSurface();
        footStep.defaultSurface.source = sourceObj.GetComponent<AudioSource>();
        footStep.leftFootTrigger = leftFT;
        footStep.rightFootTrigger = rightFT;

        // camera
        GameObject camera = null;
        if (Camera.main == null)
        {
            var cam = new GameObject("3rdPersonCamera");
            cam.AddComponent<Camera>();
            cam.AddComponent<FlareLayer>();
            cam.AddComponent<GUILayer>();
            cam.AddComponent<AudioListener>();
            camera = cam;
            camera.GetComponent<Camera>().tag = "MainCamera";
            camera.GetComponent<Camera>().nearClipPlane = 0.01f;
        }
        else
        {
            camera = Camera.main.gameObject;
            camera.gameObject.name = "3rdPersonCamera";
        }
        var tpcamera = camera.GetComponent<TPCamera>();

        if (tpcamera == null)
            tpcamera = camera.AddComponent<TPCamera>();

        // define the camera target
        //tpcamera.Player = _3rdPerson.transform;
        var hips = _3rdPerson.GetComponent<Animator>().GetBoneTransform(HumanBodyBones.Hips);
        tpcamera.Player = hips;

        cameraListData = currentTemplate.cameraListData;
        if (cameraListData != null)
        {
            tpcamera.CameraStateList = cameraListData;
        }
        _3rdPerson.GetComponent<ThirdPersonMotor>().tpCamera = tpcamera;
        _3rdPerson.GetComponent<ThirdPersonMotor>().hud = CreateHud();
        _3rdPerson.tag = "Player";
        _3rdPerson.SetLayerRecursively(LayerMask.NameToLayer("Player"));
        this.Close();
    }
    /// Created the Third Person Controller
    void Create()
    {
        // base for the character
        var _3rdPerson = GameObject.Instantiate(charObj, Vector3.zero, Quaternion.identity) as GameObject;

        if (!_3rdPerson)
        {
            return;
        }
        SceneView view = SceneView.lastActiveSceneView;

        if (SceneView.lastActiveSceneView == null)
        {
            throw new UnityException("The Scene View can't be access");
        }

        Vector3 spawnPos = view.camera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 10f));

        _3rdPerson.transform.position = spawnPos;
        var rigidbody = _3rdPerson.AddComponent <Rigidbody>();
        var collider  = _3rdPerson.AddComponent <CapsuleCollider>();

        if (charType == CharacterType.CharacterController)
        {
            _3rdPerson.name = "3rdPersonController";

            if (currentTemplate.templateType == CharacterTemplate.TemplateType.ThirdPerson)
            {
                _3rdPerson.AddComponent <ThirdPersonController>();
            }
            //else
            //    _3rdPerson.AddComponent<TopDownController>();

            // camera
            GameObject camera = null;
            if (Camera.main == null)
            {
                var cam = new GameObject("3rdPersonCamera");
                cam.AddComponent <Camera>();
                cam.AddComponent <FlareLayer>();
                cam.AddComponent <GUILayer>();
                cam.AddComponent <AudioListener>();
                camera = cam;
                camera.GetComponent <Camera>().tag           = "MainCamera";
                camera.GetComponent <Camera>().nearClipPlane = 0.01f;
            }
            else
            {
                camera = Camera.main.gameObject;
                camera.gameObject.name = "3rdPersonCamera";
            }
            var tpcamera = camera.GetComponent <TPCamera>();

            if (tpcamera == null)
            {
                tpcamera = camera.AddComponent <TPCamera>();
            }

            // define the camera cursorObject
            tpcamera.target = _3rdPerson.transform;

            cameraListData = currentTemplate.cameraListData;
            if (cameraListData != null)
            {
                tpcamera.CameraStateList = cameraListData;
            }

            GameObject gC             = null;
            var        gameController = FindObjectOfType <vGameController>();
            if (gameController == null)
            {
                gC = new GameObject("GameController");
                gC.AddComponent <vGameController>();
            }

            _3rdPerson.GetComponent <ThirdPersonMotor>().tpCamera = tpcamera;
            _3rdPerson.GetComponent <ThirdPersonMotor>().hud      = CreateHud();
            _3rdPerson.tag = "Player";
        }
        else
        {
            _3rdPerson.tag  = "Enemy";
            _3rdPerson.name = "EnemyAI";
            _3rdPerson.AddComponent <AIController>();

            var navMesh = _3rdPerson.AddComponent <NavMeshAgent>();
            navMesh.radius                  = 0.3f;
            navMesh.speed                   = 0f;
            navMesh.angularSpeed            = 300f;
            navMesh.acceleration            = 4f;
            navMesh.autoBraking             = false;
            navMesh.autoTraverseOffMeshLink = false;
        }

        // rigidBody
        if (charType == CharacterType.CharacterController)
        {
            rigidbody.useGravity  = true;
            rigidbody.constraints = RigidbodyConstraints.FreezeRotation;
        }
        else
        {
            rigidbody.useGravity  = false;
            rigidbody.constraints = RigidbodyConstraints.FreezeRotation | RigidbodyConstraints.FreezePosition;
        }

        rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        rigidbody.mass = 50;

        // capsule collider
        collider.height = ColliderHeight(_3rdPerson.GetComponent <Animator>());
        collider.center = new Vector3(0, (float)System.Math.Round(collider.height * 0.5f, 2), 0);
        collider.radius = (float)System.Math.Round(collider.height * 0.15f, 2);

        // animator
        _3rdPerson.GetComponent <Animator>().avatar     = _3rdPerson.GetComponent <Animator>().avatar;
        _3rdPerson.GetComponent <Animator>().updateMode = AnimatorUpdateMode.AnimatePhysics;

        controller = currentTemplate.animatorController;
        if (controller)
        {
            _3rdPerson.GetComponent <Animator>().runtimeAnimatorController = controller;
        }

        // footStep
        _3rdPerson.AddComponent <FootStepFromTexture>();
        this.Close();
    }
    /// <summary>
    /// Created the Third Person Controller
    /// </summary>
    void Create()
    {
        // base for the character
        var _3rdPerson = GameObject.Instantiate(charObj, Vector3.zero, Quaternion.identity) as GameObject;

        if (!_3rdPerson)
        {
            return;
        }

        _3rdPerson.name = "3rdPersonController";

        if (currentTemplate.templateType == CharacterTemplate.TemplateType.ThirdPerson)
        {
            _3rdPerson.AddComponent <ThirdPersonController> ();
        }
        else
        {
            _3rdPerson.AddComponent <TopDownController> ();
        }

        var footStep = _3rdPerson.AddComponent <FootStepFromTexture>();
        var collider = _3rdPerson.GetComponent <CapsuleCollider>();

        // rigidBody
        var rigidbody = _3rdPerson.GetComponent <Rigidbody>();

        rigidbody.constraints            = RigidbodyConstraints.FreezeRotation;
        rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        rigidbody.mass = 50;

        // capsule collider
        collider.height = ColliderHeight(_3rdPerson.GetComponent <Animator>());
        collider.center = new Vector3(0, (float)System.Math.Round(collider.height * 0.5f, 2), 0);
        collider.radius = (float)System.Math.Round(collider.height * 0.15f, 2);

        // animator
        _3rdPerson.GetComponent <Animator>().avatar     = _3rdPerson.GetComponent <Animator>().avatar;
        _3rdPerson.GetComponent <Animator>().updateMode = AnimatorUpdateMode.AnimatePhysics;
        var leftFT  = _3rdPerson.GetComponent <Animator>().GetBoneTransform(HumanBodyBones.LeftFoot).gameObject.AddComponent <SphereCollider>();
        var rightFT = _3rdPerson.GetComponent <Animator>().GetBoneTransform(HumanBodyBones.RightFoot).gameObject.AddComponent <SphereCollider>();

        controller = currentTemplate.animatorController;
        if (controller)
        {
            _3rdPerson.GetComponent <Animator>().runtimeAnimatorController = controller;
        }

        // footStep
        var _footStepSouce = new GameObject("footStepSource");

        _footStepSouce.transform.SetParent(_3rdPerson.transform);
        var sourceObj = new GameObject("sourceDefault", typeof(AudioSource));

        sourceObj.transform.SetParent(_footStepSouce.transform);
        sourceObj.GetComponent <AudioSource>().playOnAwake = false;
        footStep.defaultSurface        = new AudioSurface();
        footStep.defaultSurface.source = sourceObj.GetComponent <AudioSource>();
        footStep.leftFootTrigger       = leftFT;
        footStep.rightFootTrigger      = rightFT;

        // camera
        GameObject camera = null;

        if (Camera.main == null)
        {
            var cam = new GameObject("3rdPersonCamera");
            cam.AddComponent <Camera>();
            cam.AddComponent <FlareLayer>();
            // cam.AddComponent<GUILayer>();
            cam.AddComponent <AudioListener>();
            camera = cam;
            camera.GetComponent <Camera>().tag           = "MainCamera";
            camera.GetComponent <Camera>().nearClipPlane = 0.01f;
        }
        else
        {
            camera = Camera.main.gameObject;
            camera.gameObject.name = "3rdPersonCamera";
        }
        var tpcamera = camera.GetComponent <TPCamera>();

        if (tpcamera == null)
        {
            tpcamera = camera.AddComponent <TPCamera>();
        }

        // define the camera cursorObject
        tpcamera.target = _3rdPerson.transform;

        cameraListData = currentTemplate.cameraListData;
        if (cameraListData != null)
        {
            tpcamera.CameraStateList = cameraListData;
        }
        _3rdPerson.GetComponent <ThirdPersonMotor>().tpCamera = tpcamera;
        _3rdPerson.GetComponent <ThirdPersonMotor>().hud      = CreateHud();
        _3rdPerson.tag = "Player";
        this.Close();
    }