首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在“团结”构建游戏中显示对撞机

在“团结”构建游戏中显示对撞机
EN

Game Development用户
提问于 2021-10-13 15:47:48
回答 1查看 3.3K关注 0票数 1

有没有一种方法可以同时在一个发布的游戏中显示所有对撞机2D?我正在制作一个2D游戏,在团结和必须显示所有对撞机给玩家。我能用小玩意吗?

EN

回答 1

Game Development用户

回答已采纳

发布于 2021-10-13 17:22:36

小发明只能在编辑器中看到,所以这不是一个解决方案。

相反,您可以呈现对撞机或(模拟呈现)任意数量的方式。

BoxCollider2D

如果你的2D对撞机是盒子,这很简单--用LineRenderer渲染对撞机的轮廓。

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(BoxCollider2D))]

public class DrawBoxCollider2D : MonoBehaviour
{
    [SerializeField] private GameObject linePrefab;
    LineRenderer lineRenderer;
    BoxCollider2D boxCollider2D;

    void Start()
    {
        lineRenderer = Instantiate(linePrefab).GetComponent<LineRenderer>();
        lineRenderer.transform.SetParent(transform);
        lineRenderer.transform.localPosition = Vector3.zero;
        boxCollider2D = GetComponent<BoxCollider2D>();
       
    }

    void Update()
    {
        HiliteBox();
    }

    void HiliteBox()
    {
        Vector3[] positions = new Vector3[4];
        positions[0] = transform.TransformPoint( new Vector3(boxCollider2D.size.x / 2.0f, boxCollider2D.size.y / 2.0f,0));
        positions[1] = transform.TransformPoint(new Vector3(-boxCollider2D.size.x / 2.0f, boxCollider2D.size.y / 2.0f,0));
        positions[2] = transform.TransformPoint(new Vector3(-boxCollider2D.size.x / 2.0f, -boxCollider2D.size.y / 2.0f,0));
        positions[3] = transform.TransformPoint(new Vector3(boxCollider2D.size.x / 2.0f, -boxCollider2D.size.y / 2.0f,0));
        lineRenderer.SetPositions(positions);
    }
}

这是让这件事起作用的条件:

雪碧设置:

行Rendererer Prefab:

在行动中:

PolygonCollider 2D

多边形对撞机只是稍微复杂一点。它们可以由几条路径(允许有漏洞)组成;为了使代码易于遵循和纯粹的方便性,我的示例将做出一个愚蠢的假设,即对撞机中只有一条路径:

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


[RequireComponent (typeof(PolygonCollider2D))]
public class DrawPolygonCollider2D : MonoBehaviour
{
    [SerializeField] private GameObject linePrefab;
    LineRenderer lineRenderer;
    PolygonCollider2D polygonCollider2D;

    void Start()
    {
        lineRenderer = Instantiate(linePrefab).GetComponent<LineRenderer>();
        lineRenderer.transform.SetParent(transform);
        lineRenderer.transform.localPosition = Vector3.zero;
        polygonCollider2D = GetComponent<PolygonCollider2D>();

    }

    void Update()
    {
        HiliteCollider();
    }

    void HiliteCollider()
    {

        var points = polygonCollider2D.GetPath(0); // dumb assumption for demo -- only one path

        Vector3[] positions = new Vector3[points.Length];
        for(int i = 0; i < points.Length; i++)
        {
            positions[i] = transform.TransformPoint(points[i]);
        }
        lineRenderer.positionCount = points.Length;
        lineRenderer.SetPositions(positions);
    }
}

关于PolygonCollider2D的更多信息

安装程序相同;结果如下:

票数 4
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/197313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档