c# - 如何用捏缩放游戏对象?
问题描述
如何在 Android/iOS 中用捏(2 根手指)缩放游戏对象(立方体)?如果捏在扩大,那么立方体的比例(x,y,z)会变大,如果捏在缩小,那么立方体的比例会变小。
我有一个用于鼠标拖动的脚本,但只能缩放 2 轴(x,y)。
public class Drag : MonoBehaviour
{
Vector3 lastMousePosition;
float scaleSensitivity = 2f;
void Update()
{
if (Input.GetMouseButtonDown(0)) {
lastMousePosition = Input.mousePosition;
}
if (Input.GetMouseButton(0)) {
transform.localScale += ((Input.mousePosition - lastMousePosition) * Time.deltaTime * scaleSensitivity);
lastMousePosition = Input.mousePosition;
}
}
}
解决方案
看看 Input.Touches : Input.Touches 并使用差异(Input.Touches[0] - Input.Touches[1]).magnitude
,修复每一帧的差异。如果每帧都变大,则意味着用户正在放大,否则如果它变小,则意味着用户正在缩小
float? _prevFrameDiff;
void Update()
{
if (Input.touches.Length < 2)
{
_prevFrameDiff = null;
return;
}
var diff = (Input.touches[0].position - Input.touches[1].position).magnitude;
if (!_prevFrameDiff.HasValue)
{
_prevFrameDiff = diff;
return;
}
else
{
var scaleFactor = diff / _prevFrameDiff.Value;
this.transform.localScale = Vector3.one * scaleFactor;
}
}
推荐阅读
- html - 如何从属性绑定到组件角度获取值
- c# - 泛型类,使用类型作为参数
- logging - Kubernetes (GKE) 的日志记录解决方案
- angular - 在服务中使用 ngx-translate (TranslateService) 时出现“无法读取未定义的属性‘即时’”
- html - 语义标记:结合描述列表和手风琴的详细信息/摘要标签
- python - 代码在 Python 文件中工作,而不是在 Jupyter Notebook 中
- java - 无法将文件保存到android中的外部存储目录
- angular - 在量角器中调用 getText() 时,ElementFinder 正在记录
- android - 如何在操作系统默认查看器中的 React Native 应用程序中显示图像?
- debugging - 为什么在 64 位 Windows 下使用 ApplicationVerifier 进行堆调试时,会将 32 位进程限制为 2 GiB 的虚拟内存?