【问题标题】:Unity check if collider is type of spawned prefabUnity检查碰撞器是否是生成的预制件的类型
【发布时间】:2021-05-24 04:10:50
【问题描述】:

所以我想检查一个生成的块(预制)是否与我的触发器碰撞器发生碰撞,但我写的似乎不起作用。任何人都知道如何正确检查碰撞的游戏对象是否是块?

提前致谢。 :)

检查:

using System;
using GameOver;
using UnityEngine;

public class gameOver : MonoBehaviour
{
    [SerializeField] public DeathScreen deathScreen;

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.gameObject.GetType() == typeof(Block))
        {
            deathScreen.Setup();
        } 
    }
}

块:

using System;
using TMPro;
using UnityEngine;

public class Block : MonoBehaviour
{

    private int _hitsRemaining = 5;

    private SpriteRenderer _spriteRenderer;
    private TextMeshPro text;

    private void Awake()
    {
        _spriteRenderer = GetComponent<SpriteRenderer>();
        text = GetComponentInChildren<TextMeshPro>();
        UpdateVisualState();
    }

    private void UpdateVisualState()
    {
        text.SetText(_hitsRemaining.ToString());
        _spriteRenderer.color = Color.Lerp(new Color(0.35f, 1f, 0.67f), new Color(0.04f, 1f, 0.96f), _hitsRemaining / 10f);
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        _hitsRemaining--;

        if (_hitsRemaining > 0)
            UpdateVisualState();
        else
            Destroy(gameObject);
    }

    internal void SetHits(int hits)
    {
        _hitsRemaining = hits;
        UpdateVisualState();
    }
}

块预制:

对撞机:

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    要检查碰撞的对象是否是实例化的 Block(或任何 Block),请检查 Block 组件是否存在:

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.GetComponent<Block>() != null)
        {
            deathScreen.Setup();
        } 
    }
    

    此外,如果您的一个碰撞是触发器,则不会调用 OnCollisionEnter2D。如果可以的话,要么切换到非触发器,要么使用 OnTriggerEnter2D - 但是你的一个对象也必须有一个 Rigidbody2D (source),所以这真的取决于你的设计。

    【讨论】:

      猜你喜欢
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多