Making a lineRenderer component move in Unity

时间:2015-05-24 21:51:45

标签: c# unity3d

I'm trying to have this line here move along an axis each time I click it. This component is being generated with lineRenderer.

Extra: I need the line to move to the opposite side of where I clicked.

Can anyone help?

Best, IC

1 个答案:

答案 0 :(得分:0)

这是一个实现你想要的基础的例子(点击线和重新定位),但它需要3D对撞机,所以将它添加到GameObject,适当调整大小,确保关闭使用世界空间在行渲染器组件中,然后添加此脚本。

using UnityEngine;
using System.Collections;

public class MoveLine : MonoBehaviour {

private LineRenderer line;
private Camera thisCamera;
private Ray ray;
private RaycastHit hit;

void Awake () {
    line = GetComponent<LineRenderer>();
    thisCamera = FindObjectOfType<Camera>().GetComponent<Camera>();
}

public void OnMouseDown () {
    Vector3 mousePos = Input.mousePosition;
    ray = thisCamera.ScreenPointToRay(mousePos);

    if(Physics.Raycast(ray, out hit))
    {
        print (hit.collider.name);
        line.transform.position = new Vector3(5, 5, 5); //Change to whatever position you need
    }
}
}

更新

好的,你想要的功能可以通过几种不同的方式实现。以下是对上述脚本进行最少代码更改的方法:

首先移除盒子对撞机和&#39; MoveLine&#39;你的linerenderer gameobject中的脚本,然后添加两个空的子对象。调用一个LeftSide和另一个RightSide。为每个子对象(侧面)添加一个3D boxcollider,正如您可能已经猜到的那样,右侧的盒子对撞机应该被定位,使其覆盖渲染器的右侧和渲染器左侧的左侧(不要尝试)让它们重叠,但尽可能接近)。

现在将MoveLine脚本重命名为MoveLineLeft,复制它并将另一个重命名为MoveLineRight。 不要忘记更改班级名称。添加&#39; MoveLineRight&#39;到了左边&#39; gameobject(正如你所说,你想要点击左侧将其向右移动)并添加&#39; MoveLineLeft&#39;到了#RightSide&#39;游戏对象。

打开两个脚本;在&#39; MoveLineLeft&#39;在line.transform.position等等的行上。删除并添加此项:

line.transform.position = new Vector3(transform.position.x - 1, 0, 0); 

MoveLineRight&#39;在同一行再次删除它并添加以下内容:

line.transform.position = new Vector3(transform.position.x + 1, 0, 0);

额外更新 同时在两个脚本的Awake函数中将GetComponent更改为GetComponentInParent,以确保您的对象知道从哪里获取线条渲染器。

这应该可以为您提供所需的效果。当您单击该行的左侧时,它将向右移动,反之亦然。现在,如果要在单击+ / - 1之外的某个位置时更改方向,只需更改两行的值,或创建一个公共变量,以便在检查器中执行此操作。希望这有帮助!