Unity Android端操作-显示/影藏+旋转+放大缩小+截图的脚步代码

显示/影藏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//获取操作对象
   public GameObject text;  
   //初始旋转角度
   public float xspeed = 120;
   void Start()
   {
      
   }
 
   // Update is called once per frame
   void Update()
   {
       MySetActive();
   }
   //手指点击关闭显示
   void MySetActive()
   {
       //点击
       if (Input.GetMouseButton(0))
       {
           //一个手指点击
           if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began)
           {
               text.SetActive(false);
               //2个点击
               if (Input.GetTouch(0).tapCount == 2)
               {
                   text.SetActive(true);//显示
               }
           }
       }
   }

旋转+放大缩小

复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnLargeLogic : MonoBehaviour
{
    //初始操作手指位置
    Vector2 oldPos1;
    Vector2 oldPos2;

    //文字对象
    private TextMesh textMesh;
    //初始旋转角度
    public float xspeed = 120;
    void Start()
    {
        this.textMesh = this.GetComponentInParent<TextMesh>();
    }

    // Update is called once per frame
    void Update()
    {
        //2根手指触摸
        if (Input.touchCount == 2)
        {
            //判断手指移动  Moved==移动
            if (Input.GetTouch(0).phase==TouchPhase.Moved|| Input.GetTouch(1).phase == TouchPhase.Moved)
            {
                //第一个手指位置
                Vector2 temPos1 = Input.GetTouch(0).position;
                //第二个手指位置
                Vector2 temPos2 = Input.GetTouch(1).position;
                //获取xyz坐标值
                float this_x = this.transform.localScale.x;
                float this_y = this.transform.localScale.y;
                float this_z = this.transform.localScale.z;
                if (isEnLarge(oldPos1,oldPos2,temPos1,temPos2))
                {
                    this.transform.localScale = new Vector3(this_x * 1.025f, this_y * 1.025f, this_z * 1.025f);
                }
                else
                {
                    this.transform.localScale = new Vector3(this_x / 1.025f, this_y / 1.025f, this_z / 1.025f);
                }
                //更新操作后的值
                oldPos1 = temPos1;
                oldPos2 = temPos2;
            }
        }
        //单击旋转执行
        MyRotate();
    }
    //判断手势是否是方大
    bool isEnLarge(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2) 
    {
        //x差值平方+y差值平方
        float length1 = Mathf.Sqrt((oP1.x-oP2.x)* (oP1.x - oP2.x)+ (oP1.y - oP2.y) * (oP1.y - oP2.y));
        float length2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y));
        //判断oP1平方根是否大于nP1
        if (length1 < length2)
        {
            return true;
        }
        else
        { 
            return false;
        }
    }
    //旋转
    void MyRotate()
    {
        //按下
        if (Input.GetMouseButton(0))
        {
            //单击
            if (Input.touchCount == 1)
            {
                //滑动
                if (Input.GetTouch(0).phase == TouchPhase.Moved)
                {
                    //旋转(以Y轴)
                    this.textMesh.transform.Rotate(Vector3.up * Input.GetAxis("Mouse X") * xspeed * Time.deltaTime, Space.Self);
                }
            }
        }
    }
}
复制代码

截图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.UI;
 
public class ScreenshotLogic : MonoBehaviour
{
    //截屏
    //主相机对象
    private Camera arCamera;
    void Start()
    {
        //获取主相机对象
        arCamera = GameObject.Find("ARCamera").GetComponent<Camera>();
    }
    void Update()
    {
         
    }
    //截屏保存 --不包含UI的
    public void OnScreenshotClick()
    {
        //获取系统当前时间  编辑成字符串形式
        System.DateTime now = System.DateTime.Now;
        //转字符串类型
        string time = now.ToString();
        //去掉空格
        time = time.Trim();
        //替换符号
        time = time.Replace("/", "-");
        //拼接成完整图片名称
        string fileName = "ARScreenShot" + time + ".png";
 
        //判断是否是Android手机操作
        if (Application.platform == RuntimePlatform.Android)
        {
            //只获取主相机的画面
            //新建截屏对象赋值给主相机操作
            RenderTexture rt = new RenderTexture(Screen.width,Screen.height,1);
            arCamera.targetTexture = rt;
            //渲染
            arCamera.Render();
            //渲染纹理
            RenderTexture.active = rt;
 
            //保存截图到填图上  材质:TextureFormat.RGB24,是否映射:false
            Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
            //读取填图   Rect:坐标
            texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
            //应用保存
            texture.Apply();
 
            //关闭截屏
            arCamera.targetTexture = null;
            RenderTexture.active = null;
            Destroy(rt);
 
 
            //将填图转换为数组
            byte[] bytes = texture.EncodeToPNG();
            //保存路径   手机相册截图地址
            string destination = "/sdcard/DCIM/Camera";
            //判断地址是否存在
            if (!Directory.Exists(destination))
            {
                //创建地址
                Directory.CreateDirectory(destination);
            }
            //拼接保存地址
            string pathSave = destination + "/" + fileName;
 
            Debug.Log(pathSave);
 
            //文件写入==保存
            File.WriteAllBytes(pathSave, bytes);
        }
    }
}

  

posted @   打工仔-也想飞  阅读(248)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示