#c# #unity3d
#c# #unity-игровой движок
Вопрос:
Я довольно новичок в Unity и C # и изо всех сил пытался разобраться в этом!
Я хочу, чтобы мой корабль постепенно набирал скорость, а затем медленно останавливался, как будто гравитации не было, поскольку это будет космическая игра!
Если кто-нибудь может мне помочь или даже направить меня к руководству по этому предмету, я буду благодарен! 🙂
Вот мой код для моего космического корабля на данный момент…
using UnityEngine;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;
public class PlayerMovement : MonoBehaviour {
public float maxSpeed = 6f;
public float rotSpeed = 180f;
void Start ()
{
}
void Update () {
Quaternion rot = transform.rotation;
float z = rot.eulerAngles.z;
z -= CrossPlatformInputManager.GetAxis ("Horizontal") * rotSpeed * Time.deltaTime;
rot = Quaternion.Euler (0, 0, z);
transform.rotation = rot;
Vector3 pos = transform.position;
Vector3 velocity = new Vector3 (0, CrossPlatformInputManager.GetAxis("Vertical") * maxSpeed * Time.deltaTime, 0);
pos = rot * velocity;
transform.position = pos;
}
}
Как это можно сделать?
Комментарии:
1. итак, вы хотите создать что-то вроде «easeInOutCubic»? (взято из CSS)
2. Возможно, это могло бы помочь вам достичь того, чего вы хотите, без использования физического движка (даже если, я думаю, в вашем случае использовать физику проще).
Ответ №1:
Как и во всем, что есть в Unity, потенциально вы могли бы сделать это сотней способов, но я думаю, что использование физики было бы самым простым.
Прямо сейчас вы непосредственно управляете преобразованием. Это прекрасно, но на самом деле гораздо сложнее, чем просто позволить физике Unity делать математику за вас.
Все, что вам нужно будет сделать, это прикрепить компонент Rigidbody (или Rigidbody2D для 2D-игры) к вашему кораблю.
Затем, добавляя усилие к жесткому телу, вы получите приятное постепенное ускорение, а настраивая линейное и угловое сопротивление жесткого тела в инспекторе, вы получите очень плавное и естественное ощущение замедления.
Вот официальная документация по использованию физики: https://docs.unity3d.com/Manual/class-Rigidbody.html
Использование физики — очень увлекательная и важная часть разработки Unity, поэтому, если вы только начинаете, я настоятельно рекомендую изучить ее сейчас, и это идеальная проблема для решения с ее помощью.
Ответ №2:
Вы можете попробовать это:
Vector3 velocity = transform.forward * CrossPlatformInputManager.GetAxis("Vertical") * maxSpeed * Time.deltaTime;
pos = velocity;
transform.position = pos;
Я надеюсь, что это полезно.