Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- using UnityStandardAssets.CrossPlatformInput;
- namespace UnityStandardAssets.Characters.ThirdPerson
- {
- [RequireComponent(typeof(ThirdPersonCharacter))]
- public class ThirdPersonUserControl : MonoBehaviour
- {
- private ThirdPersonCharacter m_Character; // A reference to the ThirdPersonCharacter on the object
- private Transform m_Cam; // A reference to the main camera in the scenes transform
- private Vector3 m_CamForward; // The current forward direction of the camera
- private Vector3 m_Move;
- private bool m_Jump; // the world-relative desired move direction, calculated from the camForward and user input.
- public bool canMove=true;
- public int direct = 1;
- Vector3 pastcamf;
- float pastv;
- private void Start()
- {
- // get the transform of the main camera
- if (Camera.main != null)
- {
- m_Cam = Camera.main.transform;
- }
- else
- {
- Debug.LogWarning(
- "Warning: no main camera found. Third person character needs a Camera tagged \"MainCamera\", for camera-relative controls.", gameObject);
- // we use self-relative controls in this case, which probably isn't what the user wants, but hey, we warned them!
- }
- // get the third person character ( this should never be null due to require component )
- m_Character = GetComponent<ThirdPersonCharacter>();
- }
- private void Update()
- {
- if (!m_Jump)
- {
- m_Jump = CrossPlatformInputManager.GetButtonDown("Jump");
- }
- }
- bool camflip(int angle) {
- int shit = (int) Vector3.SignedAngle(m_CamForward, pastcamf, Vector3.up);
- return (shit > angle || shit < -angle);
- }
- // Fixed update is called in sync with physics
- private void FixedUpdate()
- {
- // read inputs
- float h = CrossPlatformInputManager.GetAxis("Horizontal");
- float v = CrossPlatformInputManager.GetAxis("Vertical");
- bool crouch = Input.GetKey(KeyCode.C);
- // calculate move direction to pass to character
- if (m_Cam != null)
- {
- // calculate camera relative direction to move:
- m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized;
- if (camflip(40)) { direct = -1;}
- m_Move = direct * v * m_CamForward + h * m_Cam.right;
- if (v < pastv || v == 0) { direct = 1; }
- pastcamf = m_CamForward;
- pastv = v;
- }
- else
- {
- // we use world-relative directions in the case of no main camera
- m_Move = v * Vector3.forward + h * Vector3.right;
- }
- // pass all parameters to the character control script
- if (canMove)
- {
- m_Character.Move(m_Move, crouch, m_Jump);
- }
- m_Jump = false;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement