首页 > 解决方案 > transform.LookAt(targetarget); 怎么不是看,而是照镜子?镜子

问题描述

试图表现出来。我用相机创建了一面镜子,并在纹理上输出了图像。我用 transform.LookAt(target); 删除脚本 它工作正常。但我想让它像镜子一样工作。我的意思是当玩家看相机时,玩家在镜子上看的角度必须与玩家不同。我正在尝试创建目标(转换)的副本并更改其属性。但它没有成功。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MirroringAngle : MonoBehaviour
{
public Transform target;
public Transform mirror;
private Transform reflectedObject;
// Start is called before the first frame update
void Start()
{
    
    
    
}

// Update is called once per frame
void Update()
{
    Vector3 inDirection = target.transform.position;
    Vector3 inNormal = new Vector3(0,0,0);
    Vector3 reflectedDir = Vector3.Reflect( inDirection, inNormal);
    mirror.transform.rotation = Quaternion.LookRotation(reflectedDir, 
    Vector3.right);
    transform.LookAt(reflectedDir);
}
}

还是看播放器

标签: c#unity3d

解决方案


我认为要实现您的方向,您需要将玩家的方向反映到镜子中。

Vector3 inDirection = targer.transform.position;
Vector3 inNormal = mirror.Transform.forward;
Vector3 reflectedDir = Vector3 Reflect(Vector3 inDirection, Vector3 inNormal);

然后你可以使用Quaternion.LookRotation让镜像相机或游戏对象朝那个方向看。

mirror.transform.rotation = Quaternion.LookRotation(reflectedDir, Vector3.up)

编辑:找到完整的脚本工作:

using UnityEngine;

public class LookAtReflectedDir : MonoBehaviour
{

    public Transform source;
    public Transform mirror;
    //private Transform reflectedObject;
    // Start is called before the first frame update
    void Start()
    {
        Vector3 inDirection = mirror.transform.position - source.transform.position;
        Vector3 inNormal = mirror.forward;
        Vector3 reflectedDir = Vector3.Reflect(inDirection, inNormal);
        mirror.transform.rotation = Quaternion.LookRotation(reflectedDir, Vector3.up);
    }
}

正常位置的镜子: 在此处输入图像描述

镜子看着反射的目录:

在此处输入图像描述


推荐阅读