Answer the question
In order to leave comments, you need to log in
Character customization?
Hello. Decided to learn Unity 3d to create games together with learning C#. still a kettle. so at one of the stages of creating a character in a unit, I downloaded two in the assets store. one gave an error in the script when trying to start and move it with the arrows. Deleted it. The second moves and jumps. but only moving forward. how to make it react to the arrows and move in different directions? I understand that it is necessary to prescribe movements in all directions in the script?
using UnityEngine;
#if UNITY_5_3_OR_NEWER
using UnityEngine.SceneManagement;
#endif
namespace Invector.CharacterController
{
public class vThirdPersonInput : MonoBehaviour
{
#region variables
[Header("Default Inputs")]
public string horizontalInput = "Horizontal";
public string verticallInput = "Vertical";
public KeyCode jumpInput = KeyCode.Space;
public KeyCode strafeInput = KeyCode.Tab;
public KeyCode sprintInput = KeyCode.LeftShift;
[Header("Camera Settings")]
public string rotateCameraXInput ="Mouse X";
public string rotateCameraYInput = "Mouse Y";
protected vThirdPersonCamera tpCamera; // acess camera info
[HideInInspector]
public string customCameraState; // generic string to change the CameraState
[HideInInspector]
public string customlookAtPoint; // generic string to change the CameraPoint of the Fixed Point Mode
[HideInInspector]
public bool changeCameraState; // generic bool to change the CameraState
[HideInInspector]
public bool smoothCameraState; // generic bool to know if the state will change with or without lerp
[HideInInspector]
public bool keepDirection; // keep the current direction in case you change the cameraState
protected vThirdPersonController cc; // access the ThirdPersonController component
#endregion
protected virtual void Start()
{
CharacterInit();
}
protected virtual void CharacterInit()
{
cc = GetComponent<vThirdPersonController>();
if (cc != null)
cc.Init();
tpCamera = FindObjectOfType<vThirdPersonCamera>();
if (tpCamera) tpCamera.SetMainTarget(this.transform);
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
}
protected virtual void LateUpdate()
{
if (cc == null) return; // returns if didn't find the controller
InputHandle(); // update input methods
UpdateCameraStates(); // update camera states
}
protected virtual void FixedUpdate()
{
cc.AirControl();
CameraInput();
}
protected virtual void Update()
{
cc.UpdateMotor(); // call ThirdPersonMotor methods
cc.UpdateAnimator(); // call ThirdPersonAnimator methods
}
protected virtual void InputHandle()
{
ExitGameInput();
CameraInput();
if (!cc.lockMovement)
{
MoveCharacter();
SprintInput();
StrafeInput();
JumpInput();
}
}
#region Basic Locomotion Inputs
protected virtual void MoveCharacter()
{
cc.input.x = Input.GetAxis(horizontalInput);
cc.input.y = Input.GetAxis(verticallInput);
}
protected virtual void StrafeInput()
{
if (Input.GetKeyDown(strafeInput))
cc.Strafe();
}
protected virtual void SprintInput()
{
if (Input.GetKeyDown(sprintInput))
cc.Sprint(true);
else if(Input.GetKeyUp(sprintInput))
cc.Sprint(false);
}
protected virtual void JumpInput()
{
if (Input.GetKeyDown(jumpInput))
cc.Jump();
}
protected virtual void ExitGameInput()
{
// just a example to quit the application
if (Input.GetKeyDown(KeyCode.Escape))
{
if (!Cursor.visible)
Cursor.visible = true;
else
Application.Quit();
}
}
#endregion
#region Camera Methods
protected virtual void CameraInput()
{
if (tpCamera == null)
return;
var Y = Input.GetAxis(rotateCameraYInput);
var X = Input.GetAxis(rotateCameraXInput);
tpCamera.RotateCamera(X, Y);
// tranform Character direction from camera if not KeepDirection
if (!keepDirection)
cc.UpdateTargetDirection(tpCamera != null ? tpCamera.transform : null);
// rotate the character with the camera while strafing
RotateWithCamera(tpCamera != null ? tpCamera.transform : null);
}
protected virtual void UpdateCameraStates()
{
// CAMERA STATE - you can change the CameraState here, the bool means if you want lerp of not, make sure to use the same CameraState String that you named on TPCameraListData
if (tpCamera == null)
{
tpCamera = FindObjectOfType<vThirdPersonCamera>();
if (tpCamera == null)
return;
if (tpCamera)
{
tpCamera.SetMainTarget(this.transform);
tpCamera.Init();
}
}
}
protected virtual void RotateWithCamera(Transform cameraTransform)
{
if (cc.isStrafing && !cc.lockMovement && !cc.lockMovement)
{
cc.RotateWithAnotherTransform(cameraTransform);
}
}
#endregion
}
}
using UnityEngine;
using System.Collections;
namespace Invector.CharacterController
{
public class vThirdPersonController : vThirdPersonAnimator
{
protected virtual void Start()
{
#if !UNITY_EDITOR
Cursor.visible = false;
#endif
}
public virtual void Sprint(bool value)
{
isSprinting = value;
}
public virtual void Strafe()
{
if (locomotionType == LocomotionType.OnlyFree) return;
isStrafing = !isStrafing;
}
public virtual void Jump()
{
// conditions to do this action
bool jumpConditions = isGrounded && !isJumping;
// return if jumpCondigions is false
if (!jumpConditions) return;
// trigger jump behaviour
jumpCounter = jumpTimer;
isJumping = true;
// trigger jump animations
if (_rigidbody.velocity.magnitude < 1)
animator.CrossFadeInFixedTime("Jump", 0.1f);
else
animator.CrossFadeInFixedTime("JumpMove", 0.2f);
}
public virtual void RotateWithAnotherTransform(Transform referenceTransform)
{
var newRotation = new Vector3(transform.eulerAngles.x, referenceTransform.eulerAngles.y, transform.eulerAngles.z);
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(newRotation), strafeRotationSpeed * Time.fixedDeltaTime);
targetRotation = transform.rotation;
}
}
}
using UnityEngine;
using UnityEditor;
using System.Collections;
using Invector;
[CanEditMultipleObjects]
[CustomEditor(typeof(Invector.CharacterController.vThirdPersonInput),true)]
public class vThirdPersonInputEditor : Editor
{
GUISkin skin;
public override void OnInspectorGUI()
{
if (!skin) skin = Resources.Load("skin") as GUISkin;
GUI.skin = skin;
GUILayout.BeginVertical("INPUT MANAGER", "window");
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.BeginVertical();
base.OnInspectorGUI();
GUILayout.Space(10);
GUILayout.EndVertical();
EditorGUILayout.EndVertical();
EditorGUILayout.Space();
EditorGUILayout.Space();
}
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question