Как изменить направление и вращение космического корабля в Unity3d - PullRequest
0 голосов
/ 19 января 2019

Я задал один вопрос несколько часов назад, но я думаю, что этот вопрос не совсем ясно определяет для вас то, что я хочу.пожалуйста, внимательно смотрите фотографии. изображение космического корабля с поворотом и положением

Так что мой вопрос таков.[Вопрос 1]: когда я нажимаю кнопку со стрелкой влево, вращение и направление корабля должны быть изменены, как показано на рисунке в виде круга (3), а когда я отпустил кнопку со стрелкой влево, оно должно вернуться к своему вращению, которое отображается по кругу (1).

[Вопрос 2]: когда я нажимаю кнопку со стрелкой вправо, поворот и направление корабля должны быть изменены, как показано на рисунке в виде круга (2), а когда я отпустил кнопку со стрелкой вправо, он должен вернуться назадк его вращению, которые показывают в кругу (1).

transform.position += transform.forward * Time.deltaTime * 10f;
if(Input.GetKey(KeyCode.LeftArrow))
{
//code
}

if(Input.GetKey(KeyCode.RightArrow))
{
//code
}

пожалуйста, помогите мне, я застрял там: (

1 Ответ

0 голосов
/ 19 января 2019

Вы ознакомились с руководством по космическим шутерам от Unity? https://unity3d.com/learn/tutorials/projects/space-shooter-tutorial/moving-player?playlist=17147

Это кодируется в более старой версии Unity (Unity версия 4), но они проверяют, чтобы убедиться, что это совместимо с более новыми версиями (на сегодняшний день Unity версия 5.1). Я скопировал код, который они используют в видео, если ссылка изменится.

using UnityEngine;
using System.Collections;

[System.Serializable]
public class Boundary
{
    public float xMin, xMax, zMin, zMax;
}

public class PlayerController : MonoBehaviour
{
    public float speed;
    public float tilt;
    public Boundary boundary;

    void FixedUpdate ()
    {
        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
        rigidbody.velocity = movement * speed;

        rigidbody.position = new Vector3 
        (
            Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax), 
            0.0f, 
            Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax)
        );

        rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt);
    }
}

rigidBody.rotation будет для наклона / крена, показанного на картинке, которую вы назначили, но в настоящее время не изменит направление вращения корабля вперед. нажатие клавиш со стрелками влево и вправо повлияет на скорость движения твердого тела и вызовет наклон, а после отпускания вернется в центральное положение корабля.

...