Итак, я пытался заставить своего персонажа двигаться и вращаться, как это обычно бывает в играх. Это: движение вперед с определенной скоростью и возможность поворачивать направление персонажа, чтобы двигаться в других направлениях.
Я использую контроллер персонажа и пока все наладилось. Однако, как только мне пришлось повернуть персонажа в другом направлении, это выдало мне ошибку.
Ошибка: ошибка CS0029: невозможно неявно преобразовать тип void' to
UnityEngine.Vector3 '
Когда я удаляю левую линию Vector3, она снова работает. Так что я считаю, что это связано с тем, что единство не хочет, чтобы я использовал преобразование.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class basicmove : MonoBehaviour {
public float walkSpeed;
public float turnSpeed;
void FixedUpdate() {
CharacterController controller = GetComponent<CharacterController>();
Vector3 forward = transform.TransformDirection(Vector3.forward);
Vector3 left = transform.Rotate(Vector3.left*Time.deltaTime);
if (Input.GetKey(KeyCode.W)){
controller.SimpleMove(forward * walkSpeed);
}
if (Input.GetKey(KeyCode.A)){
controller.SimpleMove(left * turnSpeed);
}
}
}
Чтобы одновременно поворачиваться и двигаться, вы можете сделать несколько вещей, самый простой из которых:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class basicmove : MonoBehaviour
{
public float walkSpeed;
public float turnSpeed;
private CharacterController controller;
void Start()
{
// Set here, so we don't have to constantly call getComponent.
controller = getComponent<CharacterController>();
}
void FixedUpdate()
{
if (controller != null)
{
if (Input.GetKey(KeyCode.W))
{
// transform.forward is the forward direction of your object
controller.SimpleMove(transform.forward * walkSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A))
{
// transform.Rotate will rotate the transform using the information passed in.
transform.Rotate(0, turnSpeed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.D))
{
// transform.Rotate will rotate the transform using the information passed in.
transform.Rotate(0, -turnSpeed * Time.deltaTime, 0);
}
}
}
}
Спасибо, но в нем говорится, что контроллер не существует в текущем контексте. Итак, я считаю, что он не видит, что контроллер создается в Start?
@Redshade Я просто запускаю его. Я обновил код, чтобы исправить эту ошибку.
Transform.Rotate
возвращаетvoid
: docs.unity3d.com/ScriptReference/Transform.Rotate.html, поэтому вы получаете эту ошибку.