Присвоение игровому объекту скорости / скорости и конвертация векторов очков - PullRequest
0 голосов
/ 30 января 2019

В настоящее время я разрабатываю игру в единстве с использованием сценариев c #, и у меня возникла небольшая проблема.Я пытаюсь дать одному из моих игровых объектов постоянную скорость / скорость без влияния других факторов гравитации, сопротивления или каких-либо других физических характеристик, кроме скорости.Я просмотрел руководство по Unity, чтобы найти какие-либо классы, которые могли бы помочь мне в этом, и мне показалось, что я нашел один класс, который справился бы с работой: https://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html

Я отредактировал его, чтобы сделать егоподходит для моей игры, так как это игровой объект, скорость которого не зависит от игрока, но каждый раз, когда я запускаю игру на тестовом экране, ничего не происходит (объект остается статичным).Мне было интересно, если кто-нибудь знает класс в Unity или C #, который занимается этой проблемой или вообще знает, как я могу это сделать.И то, и другое одновременно влияет на все игровые объекты, появляющиеся на экране, или только на несколько избранных?А во-вторых, мне также было интересно, как я могу преобразовать вектор скорости твердого тела2 из мировой точки в точку экрана?

Большое спасибо.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallSpeed : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        rb.velocity = new Vector2(0, 100);

    }
}

Expected result: The game object moves upwards with a speed of 100.
Actual result: Nothing happens.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Обязательно убедитесь, что ваш Rigidbody2D установлен в Инспекторе как динамический, поскольку кинематические и статические твердотельные тела не имеют физики.Если вы не хотите, чтобы он был динамическим, просто используйте rb.Translate().Однако НИКОГДА не переводит статическое твердое тело, так как оно путается с оптимизацией, которую двигатель делает с ними, вместо этого используют кинематические твердые тела для преобразования.

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

Если вы пытаетесь заставить ваш объект двигаться с постоянной скоростью, вам не нужно указывать жесткое тело.

public float upSpeedPerSecond = 100f;

void Update() {
    transform.translate(new Vector3(0, upSpeedPerSecond*time.deltaTime, 0));
}
...