我有一個帶有盒子對撞機的空游戲物件。當我選擇空的游戲物件時,它會在編輯器場景視圖視窗中顯示對撞機。但是有沒有辦法在不選擇游戲物件的情況下在編輯器/運行時對碰撞器大小線進行著色或標記?
我想以某種方式查看并知道玩家何時離開/進入碰撞區域。問題是您在運行時看不到它。

我有兩個事件,ontriggerenter 和 ontriggerexit,但我希望在玩家離開/進入該區域時看到一些視覺效果。
private void OnTriggerExit(Collider other)
{
if (other.name == "Colliding Area")
{
GameObject go = Instantiate(positionMarkerPrefab);
Renderer rend = go.GetComponent<Renderer>();
rend.material.color = Color.red;
StartCoroutine(SlowDown());
}
}
private void OnTriggerEnter(Collider other)
{
if (other.name == "Colliding Area")
{
GameObject go = Instantiate(positionMarkerPrefab);
Renderer rend = go.GetComponent<Renderer>();
rend.material.color = Color.black;
if (increaseSpeed == false)
{
enteredPositionBack = transform.position;
}
}
}
uj5u.com熱心網友回復:
您可以使用OnDrawGizmos在運行時繪制盒子碰撞器的邊界。但是這些線條只會在編輯器場景視圖中可見。這是一個例子:
private BoxCollider boxCollider = null;
private void Start()
{
boxCollider = GetComponent<BoxCollider>();
}
private void OnDrawGizmos()
{
if (boxCollider)
{
Matrix4x4 rotationMatrix = Matrix4x4.TRS(boxCollider.transform.position, boxCollider.transform.rotation, boxCollider.transform.lossyScale);
Gizmos.matrix = rotationMatrix;
Gizmos.DrawWireCube(boxCollider.center, boxCollider.size);
}
}
但是,您可以使用線渲染器在游戲視圖中可視化盒子碰撞器邊界。這是一個例子,它并不漂亮,但它完成了作業:
private List<LineRenderer> lines = new List<LineRenderer>();
private void Start()
{
BoxCollider boxCollider = GetComponent<BoxCollider>();
if (boxCollider != null)
{
Material material = new Material(Shader.Find("Unlit/Color"));
Color color = Color.green;
material.color = color;
float width = 0.01f;
Vector3 rightDir = boxCollider.transform.right.normalized;
Vector3 forwardDir = boxCollider.transform.forward.normalized;
Vector3 upDir = boxCollider.transform.up.normalized;
Vector3 center = boxCollider.transform.position boxCollider.center;
Vector3 size = boxCollider.size;
size.x *= boxCollider.transform.lossyScale.x;
size.y *= boxCollider.transform.lossyScale.y;
size.z *= boxCollider.transform.lossyScale.z;
DrawLine(center upDir * size.y / 2f rightDir * size.x / 2f forwardDir * size.z / 2f, center upDir * size.y / 2f - rightDir * size.x / 2f forwardDir * size.z / 2f, color, material, width);
DrawLine(center - upDir * size.y / 2f rightDir * size.x / 2f forwardDir * size.z / 2f, center - upDir * size.y / 2f - rightDir * size.x / 2f forwardDir * size.z / 2f, color, material, width);
DrawLine(center upDir * size.y / 2f rightDir * size.x / 2f forwardDir * size.z / 2f, center - upDir * size.y / 2f rightDir * size.x / 2f forwardDir * size.z / 2f, color, material, width);
DrawLine(center upDir * size.y / 2f - rightDir * size.x / 2f forwardDir * size.z / 2f, center - upDir * size.y / 2f - rightDir * size.x / 2f forwardDir * size.z / 2f, color, material, width);
DrawLine(center upDir * size.y / 2f rightDir * size.x / 2f - forwardDir * size.z / 2f, center upDir * size.y / 2f - rightDir * size.x / 2f - forwardDir * size.z / 2f, color, material, width);
DrawLine(center - upDir * size.y / 2f rightDir * size.x / 2f - forwardDir * size.z / 2f, center - upDir * size.y / 2f - rightDir * size.x / 2f - forwardDir * size.z / 2f, color, material, width);
DrawLine(center upDir * size.y / 2f rightDir * size.x / 2f - forwardDir * size.z / 2f, center - upDir * size.y / 2f rightDir * size.x / 2f - forwardDir * size.z / 2f, color, material, width);
DrawLine(center upDir * size.y / 2f - rightDir * size.x / 2f - forwardDir * size.z / 2f, center - upDir * size.y / 2f - rightDir * size.x / 2f - forwardDir * size.z / 2f, color, material, width);
DrawLine(center upDir * size.y / 2f rightDir * size.x / 2f forwardDir * size.z / 2f, center upDir * size.y / 2f rightDir * size.x / 2f - forwardDir * size.z / 2f, color, material, width);
DrawLine(center - upDir * size.y / 2f rightDir * size.x / 2f forwardDir * size.z / 2f, center - upDir * size.y / 2f rightDir * size.x / 2f - forwardDir * size.z / 2f, color, material, width);
DrawLine(center upDir * size.y / 2f - rightDir * size.x / 2f forwardDir * size.z / 2f, center upDir * size.y / 2f - rightDir * size.x / 2f - forwardDir * size.z / 2f, color, material, width);
DrawLine(center - upDir * size.y / 2f - rightDir * size.x / 2f forwardDir * size.z / 2f, center - upDir * size.y / 2f - rightDir * size.x / 2f - forwardDir * size.z / 2f, color, material, width);
}
}
private void DrawLine(Vector3 start, Vector3 end, Color color, Material material, float width = 0.01f)
{
LineRenderer line = new GameObject("Line_" start.ToString() "_" end.ToString()).AddComponent<LineRenderer>();
line.material = material;
line.startColor = color;
line.endColor = color;
line.startWidth = width;
line.endWidth = width;
line.positionCount = 2;
line.useWorldSpace = true;
line.SetPosition(0, start);
line.SetPosition(1, end);
line.transform.SetParent(transform);
lines.Add(line);
}
public void SetLinesColor(Color color)
{
for (int i = 0; i < lines.Count; i )
{
lines[i].material.color = color;
lines[i].startColor = color;
lines[i].endColor = color;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/483830.html
上一篇:'●測驗套件未能運行'
