我在Unity中有一个LineRenderer代表RayCast,所以它看起来像激光。我希望该激光器移动与之碰撞的对象,以便该对象遵循Raycast命中的hit.point
。
我的代码不起作用,因为我将这些GameObjects移到了hit.point
上,这导致该对象趋向于Raycast的起点,因为自从该对象开始计算了一个新的hit.point
正在移至hit.point
。我知道为什么会发生这种情况,但是我不确定如何使对象随Raycast一起移动,但不会影响新的hit.point。
这是我附加在Laser GameObject上的脚本中的更新功能。 有人知道我该如何修复我的代码,以使对象随hit.point移动?
void Update()
{
Vector3 target = calculateDeltaVector();
lr.SetPosition(0, palm.transform.position);
RaycastHit hit;
if (Physics.Raycast(palm.transform.position, target , out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
if (hit.transform.gameObject.tag == "Chair")
{
GameObject chair = hit.transform.gameObject;
// !!! move object to hit point, problem HERE
chair.transform.position = hit.point;
hitLock = false;
}
}
}
else lr.SetPosition(1, target * 50);
}
答案 0 :(得分:3)
在Unity Inspector中,您可以选择对象并将图层更改为“ 2:忽略射线广播”。这将使射线广播忽略该对象并对其进行检查。
答案 1 :(得分:0)
不知道,但是您的代码应该将椅子移到椅子上,这很可能会使椅子朝您走去。
您必须执行“开始和结束”光线投射移动,例如使用鼠标单击。 下面是示例
public class Mover : MonoBehaviour
{
public Collider selectedChair;
void Update ()
{
Vector3 target = calculateDeltaVector();
lr.SetPosition(0, palm.transform.position);
RaycastHit hit;
if (Physics.Raycast(palm.transform.position, target , out hit))
{
if (hit.collider)
{
lr.SetPosition(1, hit.point);
if (hit.transform.gameObject.tag == "Chair" && Input.GetMouseButton(0)) //if you want to move it you have to click mouse button first
{
selectedChair = hit.collider;
hit.collider.enabled = false; //disable the collider of currently selected chair so it won't go towards you
}
if (selectedChair)
{
// !!! move object to hit point, problem HERE
selectedChair.transform.position = hit.point;
hitLock = false;
}
if (Input.GetMouseButton(0))
{
selectedChair.enabled true;
selectedChair = null; //release it
}
}
}
else lr.SetPosition(1, target * 50);
}
}