首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用RayCast命中位置移动GameObject会导致对象向光线投射开始位置移动

使用RayCast命中位置移动GameObject会导致对象向光线投射开始位置移动
EN

Stack Overflow用户
提问于 2018-08-31 06:06:24
回答 2查看 2.4K关注 0票数 3

我在Unity中有一个用LineRenderer表示的RayCast,所以它看起来像一个激光。我希望这个激光移动它碰撞的物体,这样物体就会跟随光线投射命中的hit.point

我的代码不起作用,因为我将这些GameObjects移动到hit.point,这会导致对象朝向光线投射的起始点,因为由于对象移动到hit.point,所以会计算一个新的hit.point。我理解为什么会发生这种情况,但我不确定如何让对象与光线投射一起移动,但不能影响新的hit.point。

这里是我的更新函数,在我的脚本中附加到我的激光GameObject。有人知道如何修复代码以使对象随hit.point一起移动吗?

代码语言:javascript
复制
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);
    }
EN

回答 2

Stack Overflow用户

发布于 2018-08-31 06:15:06

在Unity Inspector中,您可以选择对象并将图层更改为"2:忽略光线投射“,这将使光线投射忽略该对象并通过它。

票数 4
EN

Stack Overflow用户

发布于 2018-08-31 10:20:51

不知道,但是你的代码应该把椅子移到椅子上,这很可能会让椅子朝你走来。

你必须实现开始和结束光线投射移动,例如使用鼠标点击。下面是示例

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52105984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档