我试图让LineRender与GameObject一起旋转。我希望它从它的父GameObject的中心开始并延伸直到它遇到另一个GameObject。就像你站在一个房间里四处转动时激光指示器的工作原理非常相似。
下面的代码半工作,因为它在旋转时向LineRenderer
的任何GameObject
的中心发射RayCast2D
。所以它跳了起来。这是上图中的示例C红线。
此外,我的“墙”位于Unity tilemap中,标签为“block”,因此唯一有效返回TileMap Collider 2D
的对象是tile图块之外的对象。墙上附有private LineRenderer lineRenderer;
private int xRot = 0;
private void Awake() {
lineRenderer = GetComponent<LineRenderer>();
if (lineRenderer != null) {
lineRenderer.transform.position = new Vector3(transform.position.x, transform.position.y, -3); // Put this higher up so the camera can see
lineRenderer.startWidth = 0.2f;
lineRenderer.endWidth = 0.2f;
lineRenderer.useWorldSpace = true;
lineRenderer.SetPosition(0, transform.position);
}
}
private void void Update() {
transform.rotation = Quaternion.Euler(0, 0, xRot);
xRot++;
xRot = (int)Mathf.Repeat(xRot, 360);
Debug.DrawRay(transform.position, transform.up * 10, Color.red);
RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.TransformPoint(Vector2.up));
var distance = GetDistance(transform.position, hit.collider.transform.position);
Vector3 endPos = transform.position + (hit.collider.transform.position.normalized * distance);
lineRenderer.SetPosition(1, endPos);
}
个。
A行和B行代表了我想要发生的事情。但是,没有出现在墙上的那些都在瓷砖地图中。
有任何帮助吗?
NaN
答案 0 :(得分:1)
要固定激光跳跃,而不是使用对撞机的位置,您可以使用光线投射击中对撞机的point
。
RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.TransformPoint(Vector2.up));
if (hit.collider != null && hit.collider.tag == "block")
{
Vector3 endPos = hit.point;
lineRenderer.SetPosition(1, endPos);
}
我还没有使用过瓷砖地图,但根据unity documentation,TileMap对撞机应该和普通对撞机一样工作。