两个手指缩放物体参考: 缩放物体方法地址
主要用到点击屏幕的方法,然后记录老的位置,当位置发生变化时 进行新老值的计算 然后改变缩放大小或改变旋转角度
public class ChangeObjectSizeAndRotate: MonoBehaviour{
[SerializeField] GameObject changeObject; //你要改变的物体
private Vector2 lastSlidePos; //上一个位置
private Vector2 currentPos; //当前位置
private Touch lastTouch_1; //上一个触摸点1
private Touch lastTouch_2; //上一个触摸点2
private Touch currentTouch_1; //当前触摸点1
private Touch currentTouch_2; //当前触摸点2
float lastDistance; //老的触摸点的距离
float currDistance; //新的触摸点的距离
float offset; //新老位置差 >0 放大 <0 缩小
float scaleCoefficient; //缩放系数,根据求出来的位置差 计算出来
private void Update(){
#if UNITY_ANDROID
if(Input.touchCount > 0)
{
_RotateAndScale ();
}
else
{
//恢复旋转前的位置
changeObject .transform.rotation = Quaternion.Slerp( changeObject .transform.rotation, Quaternion.Euler(0, 0, 0), 0.1f);
}
#endif
}void _RotateAndScale()
{
if (Input.touchCount == 1)
{
if (Input.touches[0].phase == TouchPhase.Began)
{
lastSlidePos = Input.touches[0].position;
currentPos = Input.touches[0].position;
}
if (Input.touches[0].phase == TouchPhase.Moved)
{
currentPos = Input.touches[0].position;
changeObject .transform.rotation *= Quaternion.Euler(0, -(currentPos.x - lastSlidePos.x) * 1f, 0);
lastSlidePos = currentPos;
}
return;
}
currentTouch_1 = Input.GetTouch(0);
currentTouch_2 = Input.GetTouch(1);
if (currentTouch_2.phase == TouchPhase.Began)
{
lastTouch_2 = currentTouch_2;
lastTouch_1 = currentTouch_1;
}
if (Input.touches[0].phase == TouchPhase.Moved && Input.touches[1].phase == TouchPhase.Moved)
{
lastDistance = Vector2.Distance(lastTouch_1.position, lastTouch_2.position);
currDistance = Vector2.Distance(currentTouch_1.position, currentTouch_2.position);
offset = currDistance - lastDistance;
scaleCoefficient = offset / 1000f;
Vector3 gameobjectScale = changeObject .transform.localScale;
Vector3 scale = new Vector3(gameobjectScale.x + scaleCoefficient, gameobjectScale.y + scaleCoefficient, gameobjectScale.z + scaleCoefficient);
//判断可到达的最大值和最小值 因为我xyz三个值相同所以只判断了x
if (scale.x >= 0.2f && scale.x <= 1)
{
changeObject .transform.localScale = scale;
}
lastTouch_1 = currentTouch_1;
lastTouch_2 = currentTouch_2;
}
}}