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的值