【发布时间】:2019-12-27 11:24:15
【问题描述】:
该脚本运行良好,完全符合其应有的效果,除非缩放过多并且 SphereCast 与网格发生碰撞。当它碰到网格时,我希望相机停下来,而不是试图穿过网格。
if(Input.touchCount == 2)
{
Touch first = Input.GetTouch(0);
Touch second = Input.GetTouch(1);
origin = mainCamera.transform.position;
direction = mainCamera.transform.forward;
RaycastHit hit;
if(Physics.SphereCast(origin, sphereRadius, direction, out hit, maxDistance))
{
inCollision = true;
}
else
{
inCollision = false;
}
if(first.phase == TouchPhase.Began || second.phase == TouchPhase.Began)
{
initialDistance = Vector3.Distance(first.position, second.position);
}
if(first.phase == TouchPhase.Moved || second.phase == TouchPhase.Moved)
{
movedDistance = Vector3.Distance(first.position, second.position) - initialDistance;
if(inCollision)
{
movedDistance = -Mathf.Abs(movedDistance);
}
mainCamera.transform.localPosition = new Vector3(0, 0, mainCamera.transform.localPosition.z + movedDistance * zoomSensitivity * Time.deltaTime);
initialDistance = Vector3.Distance(first.position, second.position);
}
}
我尝试过:
- 当 SphereCast 击中网格时,将
movedDistance设置为0; - 将
mainCamera.transform.localPosition.z钳制到mainCamera.transform.localPosition.z,但仅当 SphereCast 撞击网格时,z 的缩放不会超过其当前值。
【问题讨论】:
-
它可能会“颤抖”,因为如果它发生碰撞,你将它向后移动,但在下一帧中它允许再次向前移动