C# 放大一定距离

C# 放大一定距离,c#,unity3d,math,C#,Unity3d,Math,我有下面的统一脚本 void Update() { Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit = new RaycastHit(); if(Physics.Raycast(mouseRay, out hit)) { if (Input.GetMouseButtonDown(0)) { Ca

我有下面的统一脚本

void Update()
{
    Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit = new RaycastHit();

    if(Physics.Raycast(mouseRay, out hit))
    {
        if (Input.GetMouseButtonDown(0))
        {
            Camera.main.GetComponent<CameraController>().ZoomIn(hit.transform.position);
        }
    }
}
void Update()
{
Ray mouseRay=Camera.main.ScreenPointToRay(输入.mousePosition);
RaycastHit=新的RaycastHit();
如果(物理,光线投射(捕鼠器,命中)
{
if(Input.GetMouseButtonDown(0))
{
Camera.main.GetComponent().ZoomIn(hit.transform.position);
}
}
}
那么在照相机里我有

public void ZoomIn(Vector3 target)
{
    zoomSavePosition = camera.transform.position;
    StartCoroutine(Zoom(zoomSavePosition, target, zoomDuration));
}


// ZoomRoutine
IEnumerator Zoom(Vector3 from, Vector3 to, float duration)
{
    float time = 0;
    Quaternion rotation = camera.transform.rotation;
    Quaternion targetRotation = Quaternion.LookRotation(to - camera.transform.position);
    while (time < zoomDuration)
    {
        camera.transform.position = Vector3.Lerp(from, to, time / zoomDuration);
        camera.transform.rotation = Quaternion.Slerp(rotation, targetRotation, time / zoomDuration);

        time += TimeManager.instance.deltaTime;
        yield return null;
    }

    camera.transform.position = to;
    camera.transform.rotation = targetRotation;
}
公共无效缩放(矢量3目标)
{
zoomSavePosition=camera.transform.position;
开始例行程序(缩放(zoomSavePosition、target、zoomDuration));
}
//动物路线
IEnumerator缩放(矢量3从、矢量3到、浮动持续时间)
{
浮动时间=0;
四元数旋转=camera.transform.rotation;
四元数targetRotation=Quaternion.LookRotation(to-camera.transform.position);
while(时间
这非常有效,但它可以放大对象内部。我想,无论从哪里到什么地方,我总是缩放,并最终在目标相同的距离

我本来想用
MoveTowards
,但在协同程序中,这会使移动停止,但旋转会继续进行(这是一个很大的问题)


>给出一个点A和点B,我如何计算在中间的距离,它总是设置为与B?

距离缩放到目标物体的特定距离。你需要计算目标物体在摄像机方向上的距离,然后将其减去目标位置。

var heading = to - from;
var dist = heading.magnitude;
var direction = heading / dist;

Vector3 newTargetPosition = to - (direction * distance);
参考:

通过此调整,您可以停止缩放到任何提供的距离。 以下是调整后的代码的外观:

public void ZoomIn(Vector3 target)
{
    float targetDistance = 2f;
    zoomSavePosition = camera.transform.position;
    StartCoroutine(Zoom(zoomSavePosition, target, zoomDuration, targetDistance));
}


// ZoomRoutine
IEnumerator Zoom(Vector3 from, Vector3 to, float duration, float distance)
{
    float time = 0;
    Quaternion rotation = camera.transform.rotation;
    Quaternion targetRotation = Quaternion.LookRotation(to - camera.transform.position);

    var heading = to - from;
    var dist = heading.magnitude;
    var direction = heading / dist;

    Vector3 newTargetPosition = to - (direction * distance);

    while (time < zoomDuration)
    {
        camera.transform.position = Vector3.Lerp(from, newTargetPosition, time / zoomDuration);
        camera.transform.rotation = Quaternion.Slerp(rotation, targetRotation, time / zoomDuration);

        time += Time.deltaTime;
        yield return null;
    }

    camera.transform.position = newTargetPosition;
    camera.transform.rotation = targetRotation;
}
公共无效缩放(矢量3目标)
{
浮动目标距离=2f;
zoomSavePosition=camera.transform.position;
开始例行程序(缩放(zoomSavePosition、target、zoomDuration、targetDistance));
}
//动物路线
IEnumerator缩放(矢量3从、矢量3到、浮动持续时间、浮动距离)
{
浮动时间=0;
四元数旋转=camera.transform.rotation;
四元数targetRotation=Quaternion.LookRotation(to-camera.transform.position);
var标题=到-从;
var dist=航向。震级;
var方向=航向/距离;
矢量3新目标位置=至-(方向*距离);
while(时间
可以在要停止缩放的位置设置targetDistance的值