Как я могу активировать \ включить объект после того, как мой тег столкнется с определенной силой или скоростью (игра VR - UNITY 3D) - PullRequest
1 голос
/ 03 октября 2019

Я занимаюсь разработкой VR-игры. В файтинге игрок сможет наносить удары по врагам (на его кулаке будет коллайдер и отключенный объект со скриптом урона). Мне нужен сценарий, который активирует другой объект (тот, у которого есть сценарий повреждения) - (помещенный на его кулак), но только на определенной скорости или силе (вы знаете, как в реальной жизни), если противника коснется рука, которую он долженне быть поврежденным, просто на большой силе или скорости) Какое решение лучше? спасибо!

1 Ответ

0 голосов
/ 03 октября 2019

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

Вот пример:

[RequireComponent(typeof(DamageScript))]
public class HandSpeedMonitor : Monobehaviour
{
    public float threshold;
    DamageScript damageScript;
    Vector3 lastPos;

    public void Awake()
    {
        damageScript = this.GetComponent<DamageScript>();
    }

    public void Start()
    {
        lastPos = this.transform.position;
    }

    public void Update()
    {
        float velocity = (lastPos - this.transform.position).magnitude / Time.deltaTime;
        if(!damageScript.enabled && velocity > threshold)
            damageScript.enabled = true;
        else if(damageScript.enabled)
            damageScript.enabled = false;
    }
}

Однако, поскольку. Magnitude является дорогимДля вызова, возможно, вы захотите сохранить свой «порог» в квадрате скорости «sqrThreshold» и использовать .sqrMagnitude, так как он удаляет компонент квадратного корня из векторной математики (экономия на обработке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...