Система частиц Unity: изменение скорости эмиттера с помощью скрипта - PullRequest
0 голосов
/ 28 мая 2020

У меня есть система частиц, связанная с объектом, за которым она следует. Скорость эмиттера здесь установлена ​​на Rigidbody. Я хочу, чтобы система частиц следовала за объектом, как и она, но при обнаружении сенсорного ввода частицы должны следовать за сенсорным вводом, изменяя скорость эмиттера на Transform. При запуске кода, который я прикрепил, есть две ошибки компилятора, которые я пытался исправить, но не смог. Был бы признателен, если бы кто-нибудь взглянул на это.

  • «Система частиц» не содержит определения для «emitterVelocity», и никакой доступный метод расширения «emitterVelocity», принимающий первый аргумент типа «ParticleSystem», мог бы быть найденным. строка 28.
  • «Преобразование» - это тип, который недопустим в данном контексте. строка 28.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DragFingerMove : MonoBehaviour
{
    private Vector3 touchPosition;
    private ParticleSystem ps;
    private Vector3 direction;
    private float moveSpeed = 10f;

    // Use this for initialization
    private void Start()
    {
        ps = GetComponent<ParticleSystem>();
    }

    // Update is called once per frame
    private void Update()
    {
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
            touchPosition.z = 0;
            direction = (touchPosition - transform.position);
            ps.emitterVelocity = Transform;
            ps.velocity = new Vector2(direction.x, direction.y) * moveSpeed;

            if (touch.phase == TouchPhase.Ended)
                ps.velocity = Vector2.zero;
        }
    }
}

1 Ответ

0 голосов
/ 28 мая 2020

Во-первых, при попытке получить доступ к Transform, к которому прикреплен компонент Unity, вы хотите использовать transform (обратите внимание на нижний регистр «t» и верхний регистр). Переключите Transform на transform или this.transform.

transform - это свойство, которое есть у всех MonoBehaviours, которое дает то же значение, что и вызов this.GetComponent<Transform>(). Напротив, Transform - это тип UnityEngine.Transform, то есть существует класс с таким именем.

Во-вторых, что касается настройки эмиттера, вы можете установить emitterVelocityMode (помеченный как "Emitter Velocity") в компоненте main системы частиц . Значения для emitterVelocityMode: перечисление с именем "ParticleSystemEmitterVelocityMode" .

Вы можете сказать:

var ps_main = GetComponent<ParticleSystem>().main;
ps_main.emitterVelocityMode = ParticleSystemEmitterVelocityMode.Transform;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...