Добрый вечер. Долгое время бьюсь над управлением. Нашел управление готовое, поставил - работает отлично, пытался прикрепить его к ГУИ, вообще никак.. В импут менеджере выставил управление и отлично все работает. Пытался описать функцию и сделать в ней нажатие - не помогало, пытался просто нажимать клавишу с помощью GetKeyDown, не сработало.. В Horizontal сидят кнопки a,d и соответствующие им аналоговые стрелки.
Код
// This makes the character turn to face the current movement speed per default. var autoRotate : boolean = true; var maxRotationSpeed : float = 360;
private var motor : CharacterMotor;
// Use this for initialization function Awake () { motor = GetComponent(CharacterMotor); }
// Update is called once per frame function Update () { // Get the input vector from kayboard or analog stick var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, 0);
if (directionVector != Vector3.zero) { // Get the length of the directon vector and then normalize it // Dividing by the length is cheaper than normalizing when we already have the length anyway var directionLength = directionVector.magnitude; directionVector = directionVector / directionLength;
// Make sure the length is no bigger than 1 directionLength = Mathf.Min(1, directionLength);
// Make the input vector more sensitive towards the extremes and less sensitive in the middle // This makes it easier to control slow speeds when using analog sticks directionLength = directionLength * directionLength;
// Multiply the normalized direction vector by the modified length directionVector = directionVector * directionLength; }
// Rotate the input vector into camera space so up is camera's up and right is camera's right directionVector = Camera.main.transform.rotation * directionVector;
// Rotate input vector to be perpendicular to character's up vector var camToCharacterSpace = Quaternion.FromToRotation(-Camera.main.transform.forward, transform.up); directionVector = (camToCharacterSpace * directionVector);
// Apply the direction to the CharacterMotor motor.inputMoveDirection = directionVector; motor.inputJump = Input.GetButton("Jump");
// Set rotation to the move direction if (autoRotate && directionVector.sqrMagnitude > 0.01) { var newForward : Vector3 = ConstantSlerp( transform.forward, directionVector, maxRotationSpeed * Time.deltaTime ); newForward = ProjectOntoPlane(newForward, transform.up); transform.rotation = Quaternion.LookRotation(newForward, transform.up); } }
function ProjectOntoPlane (v : Vector3, normal : Vector3) { return v - Vector3.Project(v, normal); }
function ConstantSlerp (from : Vector3, to : Vector3, angle : float) { var value : float = Mathf.Min(1, angle / Vector3.Angle(from, to)); return Vector3.Slerp(from, to, value); }
// Require a cracter controller to be attached to the same game object @script RequireComponent (CharacterMotor) @script AddComponentMenu ("Character/Platform Input Controller")
Не обнаружил в этом коде никакого прикрепления и вообще гуи...
Я все ненужное стер что-бы не мозолило глаза, описать функцию OnGui и вставить GUI.Button элементарно же. Просо откройте мне глаза, куда конкретно смотреть надо.
var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, 0);
в этой строчке как понимаешь и есть инпуты для управления характер мотором. Так вот если ты хочешь к примеру сделать через гуи ,то это так же очень легко) Можно делать 2 способами к примеру.1 это просто GUI.Button-> Тоесть
Так же и с вертикальными кнопками.Ты можешь ещё переписать их в флоат что бы потом добавить сглаживание.
а потом просто
Код
var directionVector = new Vector3(vactorH, 0, vactorV);
2 cпособ .Можно сделать через джостик,это тебе надо в стандарт ассетс (Mobile) найти примеры,там есть джостик скрипт.Там смотришь какие и где он получает кординаты положения джостика на экране(гуи джостика) и потом просто их присваиваешь так же как и выше).