C# 使用Unity中的脚本重置相机时出现的问题

C# 使用Unity中的脚本重置相机时出现的问题,c#,unity3d,C#,Unity3d,我想将相机放在物体的中心,然后,如果玩家点击按钮(稍后会添加),或者点击物体触发的弹出窗口外(相机移动只是第一步) 我的想法是存储相机的第一个位置,如果鼠标在任何可单击的对象之外单击,但看起来好像它不工作,则再次将其变换回来 void Update() { Vector3 camoriginposition; if (Input.GetMouseButtonDown(0)) { Camera cam = Camera.main; camor

我想将相机放在物体的中心,然后,如果玩家点击按钮(稍后会添加),或者点击物体触发的弹出窗口外(相机移动只是第一步)

我的想法是存储相机的第一个位置,如果鼠标在任何可单击的对象之外单击,但看起来好像它不工作,则再次将其变换回来

void Update()
{
    Vector3 camoriginposition;
    if (Input.GetMouseButtonDown(0))
    {
        Camera cam = Camera.main;
        camoriginposition = Camera.main.transform.position;
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit))
        {
            Rigidbody rb;
            if (rb = hit.transform.GetComponent<Rigidbody>())
            {
                Vector3 obj = rb.transform.position - new Vector3(0, -3, 2);
                cam.transform.position = obj;
                Debug.Log("curr cam pos" + cam.transform.position);
            }
            else
            {
                cam.transform.position = camoriginposition;
                Debug.Log("It triggers!");
            }
        }
    }
}
void Update()
{
矢量3坐标原点位置;
if(Input.GetMouseButtonDown(0))
{
Camera cam=Camera.main;
camoriginposition=Camera.main.transform.position;
雷卡斯特击中;
Ray-Ray=Camera.main.screenpointoray(输入.鼠标位置);
如果(物理.光线投射(光线,出击))
{
刚体rb;
if(rb=hit.transform.GetComponent())
{
Vector3 obj=rb.transform.position-新的Vector3(0,-3,2);
cam.transform.position=obj;
调试日志(“当前凸轮位置”+凸轮变换位置);
}
其他的
{
cam.transform.position=camoriginposition;
Log(“它触发了!”);
}
}
}
}
我收到Debug.Log输出,但看起来无法处理transform.position


你知道如何修复它吗?

我不知道你说的“不工作”是什么意思,但可能是因为你在每次
更新()
时都声明
camoriginposition
,这肯定不是你想要的行为。每当您试图将cam的原点位置存储到本地变量时,当
Update()
范围结束时,它将消失,并将使用new
Update()
调用再次初始化

您必须将
camoriginposition
Update()
分开,例如:

private Vector3 camoriginposition;
无效更新()
{
if(Input.GetMouseButtonDown(0))
{
...
}
而且,似乎还有另一个问题。每次鼠标单击时,您都在存储
camoriginposition
,但根据您的描述,它似乎应该在光线实际击中游戏对象时存储

您应该移动
camoriginposition=Camera.main.transform.position;

进入

if(rb=hit.transform.GetComponent())
block