有没有一种方法可以同时在一个发布的游戏中显示所有对撞机2D?我正在制作一个2D游戏,在团结和必须显示所有对撞机给玩家。我能用小玩意吗?
发布于 2021-10-13 17:22:36
小发明只能在编辑器中看到,所以这不是一个解决方案。
相反,您可以呈现对撞机或(模拟呈现)任意数量的方式。
如果你的2D对撞机是盒子,这很简单--用LineRenderer
渲染对撞机的轮廓。
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:
在行动中:
多边形对撞机只是稍微复杂一点。它们可以由几条路径(允许有漏洞)组成;为了使代码易于遵循和纯粹的方便性,我的示例将做出一个愚蠢的假设,即对撞机中只有一条路径:
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);
}
}
安装程序相同;结果如下:
https://gamedev.stackexchange.com/questions/197313
复制相似问题