Проблема Unity при активации функции с параметрами в камере из другого скрипта в GameObject Enemy - PullRequest
0 голосов
/ 15 января 2020

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

Код дрожания в камере:

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

public class ScreenShaker : MonoBehaviour {

    private float shakeAmount = 0.5f;

    private float shakeTime = 0.0f;
    private Vector3 initialPosition;
    private bool isScreenShaking = false;

    void Update () {
        if(shakeTime > 0)
        {
            this.transform.position = Random.insideUnitSphere * shakeAmount + initialPosition;
            shakeTime -= Time.deltaTime;
        }
        else if(isScreenShaking)
        {
            isScreenShaking = false;
            shakeTime = 0.0f;
            this.transform.position = initialPosition;
        }
    }

    public void ScreenShakeForTime(float time)
    {
        initialPosition = this.transform.position;
        shakeTime = time;
        isScreenShaking = true;
    }
}

Код врага:

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

    public class ControladorEnemigoCirculoMediano : MonoBehaviour
    {
        void OnTriggerEnter2D(Collider2D other)
        {
            if (other.tag == "Player") 
            {
            Here I don't know what to call the public void function ScreenShakeForTime (float time); 
            I already tried many things online but when my character comes into contact with the character, I don't do the shake in the camera.
            }
        }
    }

Ответы [ 2 ]

1 голос
/ 15 января 2020

Вы можете создать Unity-singleton в своем классе ScreenShaker, например:

class ScreenShaker
{
  public static ScreenShaker Instance {private set; get;};

  void Awake() {
    Instance = this;
  }
}

И чем из любого места позвонить, например:

ScreenShaker.Instance.ScreenShakeForTime(2f);

Это самый простой способ, но, возможно, лучше создать стандартный синглетон (решать только вам). А также не забудьте уничтожить его на OnDestroy ()

0 голосов
/ 15 января 2020

можете ли вы сказать мне во вражеском игровом объекте коллайдер isTrigger включен или нет, если он не включен, тогда используйте OnColliderEnter2D (Collision2D other) {} для обнаружения столкновения

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