Я играю в 2D и хочу, чтобы мой игрок мог менять пули при столкновении с объектом (силой) и уничтожать этот объект. У меня есть сценарий, и я подумал, что мне нужно реализовать 2 переменные prefab ON / Off, но теперь гораздо больше думаю, что я хочу изменить с помощью тега (мой игрок имеет в своем сценарии публикацию c Rigidbody2D bullet) и эта функция
void Fire()
{
if (photonView.IsMine)
{
var firedBullet = Instantiate(bullet, barrel.position, barrel.rotation);
firedBullet.AddForce(barrel.up * bulletSpeed);
}
}
это сценарий, над которым я работал для переключения маркеров, но я думаю, что он не будет работать, чтобы изменить маркер, который я добавил в инспекторе для сценария персонажа, чтобы отключить из этого скрипта и добавить другую пулю. Как я могу сделать это по тегу?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WeaponSwitching : MonoBehaviour
{
[SerializeField] private GameObject pickupEffect;
public GameObject[] DisablePrefab;
public GameObject[] EnablePrefab;
public int selectBullet = 0;
// Start is called before the first frame update
// Update is called once per frame
public void Bullet(Character bullet)
{
var effect = Instantiate(pickupEffect, transform.position, transform.rotation);
foreach (GameObject disable in DisablePrefab)
{
disable.SetActive(false);
}
foreach (GameObject enable in EnablePrefab)
{
enable.SetActive(true);
}
Destroy(gameObject);
Destroy(effect, 3.0f);
}
}
и я пытаюсь это сделать с помощью скрипта BulletSwitch для вызова функции из сценария переключения оружия
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletSwitch : MonoBehaviour
{
[SerializeField] private Character bullet;
// Start is called before the first frame update
private void Awake()
{
if (!bullet) bullet = GetComponent<Character>();
}
private void OnTriggerEnter2D(Collider2D other)
{
// or whatever tag your powerups have
if (!other.CompareTag("Bullet"))
{
Debug.LogWarning($"Registered a collision but with wrong tag: {other.tag}", this);
return;
}
var Bullet = other.GetComponent<WeaponSwitching>();
if (!Bullet)
{
Debug.LogError($"Object {other.name} is tagged PowerUp but has no PowerUp component attached", this);
return;
}
Debug.Log("Found powerup, pick it up!", this);
Bullet.Bullet(bullet);
}
}
персонаж-инспектор
после того, как мой игрок столкнулся с объектом, пули исчезают.