我在Unity中有一个用LineRenderer表示的RayCast,所以它看起来像一个激光。我希望这个激光移动它碰撞的物体,这样物体就会跟随光线投射命中的hit.point
。
我的代码不起作用,因为我将这些GameObjects移动到hit.point
,这会导致对象朝向光线投射的起始点,因为由于对象移动到hit.point
,所以会计算一个新的hit.point
。我理解为什么会发生这种情况,但我不确定如何让对象与光线投射一起移动,但不能影响新的hit.point。
这里是我的更新函数,在我的脚本中附加到我的激光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);
}
发布于 2018-08-31 06:15:06
在Unity Inspector中,您可以选择对象并将图层更改为"2:忽略光线投射“,这将使光线投射忽略该对象并通过它。
发布于 2018-08-31 10:20:51
不知道,但是你的代码应该把椅子移到椅子上,这很可能会让椅子朝你走来。
你必须实现开始和结束光线投射移动,例如使用鼠标点击。下面是示例
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);
}
}
https://stackoverflow.com/questions/52105984
复制相似问题