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
答案 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之外的某个位置时更改方向,只需更改两行的值,或创建一个公共变量,以便在检查器中执行此操作。希望这有帮助!