Здравствуйте. Решил изучать Unity 3d по созданию игр совместно с изучением C#. пока еще чайник. так вот на одном из этапов создания персонажа в юнити, я скачал двух в assets store. один выдавал ошибку в скрипте при попытке запуска и подвигать его стрелками. Удалил его. Второй двигает и прыгает. но двигается только вперед. как сделать чтобы реагировал на стрелки и двигался в разные стороны? я так понял это надо в скрипте прописывать движения во все направления?
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();
}
}