unityでのタッチによる物体の移動スケールの変更

2460 ワード

以前のunityの中で物体の移動のスケールの過程の中で、往々にして1つの問題が現れて、カメラが従って、物体の変形を招いて、だから自分で物体の変形を要らないと思って、物体はまた移動してスケールすることができて、ネット上で多く調べて、具体的なコードがなくて、自分で前人の経験に基づいて、このいくつかのコードを書いて、もし間違いがあれば、みんなは訂正してください、私はもうテストしました.問題はありません.AndroidやWebglにコンパイルして携帯電話を開くことができますが、このコードはタッチするしかありません.
ダウンロード接続:http://download.csdn.net/download/xuxinqingjiao1/10178507
 
  
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Move : MonoBehaviour
{
    private Touch oldTouch1;  //     1
    private Touch oldTouch2;  //     2
    public float speed = 0.005F;

    void Update()
    {
        if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
        {
            Vector3 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
            transform.Translate(touchDeltaPosition.x * speed, -touchDeltaPosition.y * speed, 0);
        }

        if (Input.touchCount > 1)
        {
            ////    ,       
            Touch newTouch1 = Input.GetTouch(0);
            Touch newTouch2 = Input.GetTouch(1);

            // 2        ,    ,      
            if (newTouch2.phase == TouchPhase.Began)
            {
                oldTouch2 = newTouch2;
                oldTouch1 = newTouch1;
                return;
            }
            //                ,       ,         
            float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
            float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);

            //      ,        ,           
            float offset = newDistance - oldDistance;
            //    ,       0.01   (200   )  
            float scaleFactor = offset / 200f;
            Vector3 localScale = transform.localScale;
            Vector3 scale = new Vector3(localScale.x + scaleFactor,
                localScale.y + scaleFactor,
                localScale.z + scaleFactor);

            //      0.3    
            if (scale.x > 0.3f && scale.y > 0.3f && scale.z > 0.3f)
            {
                transform.localScale = scale;
            }

            //        ,      
            oldTouch1 = newTouch1;
            oldTouch2 = newTouch2;
        }
    }
}