[ToneTuneToolkit][019]安卓平台下对象的旋转及缩放
作者:互联网
#region Environment </br>
Windows 10 21H1 </br>
Unity 2020.3.16f1 LTS </br>
VSCode 1.60.0 </br>
// ToneTune Toolkit 下载地址 </br>
// https://github.com/MirzkisD1Ex0/ToneTuneToolkit.git </br>
#endregion </br>
Android平台下AR开发可能会用到的功能,
比如说识别到模型后对其进行旋转、缩放用以查看阅览啊……
总之就是这么个功能。
// 需要使用ToneTuneToolkit插件
01.新建场景,然后随便找个模型丢进场景里,对光和相机进行调整。(我用的是自建的康师傅……贴图是从网上找的……已包含在TTT工具包的Models下了,需要的话自取) 02.从TTT插件中,将ObjectRotateAndScale.cs添加至模型上,为模型添加碰撞器,用于射线检测。 03.代码内容如下,tag那里和模型的标签记得根据自己的需求改! /// <summary> /// Copyright (c) 2021 MirzkisD1Ex0 All rights reserved. /// Code Version 1.0 /// </summary>
using System.Collections; using System.Collections.Generic; using UnityEngine;
namespace ToneTuneToolkit.Mobile { public class ObjectRotateAndScale : MonoBehaviour { private Vector2 oldPosA; private Vector2 oldPosB;
private void Update() { if (Input.GetMouseButton(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.tag == "Player") // 如果射线不在Tag为Player的物体上则跳过后续的步骤 { if (Input.touchCount == 1) { ObjectRotate(); } if (Input.touchCount == 2) { ObjectScale(); } } } } }
/// <summary> /// 单指操作 /// 旋转 /// </summary> private void ObjectRotate() { if (Input.GetTouch(0).phase == TouchPhase.Moved) { float offsetX = Input.GetAxis("Mouse X"); float offsetY = Input.GetAxis("Mouse Y"); transform.Rotate(new Vector3(offsetY, -offsetX, 0) * 10f, Space.World); } return; }
/// <summary> /// 双指操作 /// 缩放 /// </summary> private void ObjectScale() { if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved) { Vector2 newPosA = Input.GetTouch(0).position; Vector2 newPosB = Input.GetTouch(1).position; float oldScale; float newScale; oldScale = transform.localScale.x; if (IsEnlarge(oldPosA, oldPosB, newPosA, newPosB)) { newScale = oldScale * 1.02f; } else { newScale = oldScale / 1.02f; } transform.localScale = new Vector3(newScale, newScale, newScale); oldPosA = newPosA; oldPosB = newPosB; } }
/// <summary> /// 双指触点判断 /// 远了就是放大 /// </summary> /// <param name="oldPositionA"></param> /// <param name="oldPositionB"></param> /// <param name="newPositionA"></param> /// <param name="newPositionB"></param> /// <returns></returns> private bool IsEnlarge(Vector2 oldPositionA, Vector2 oldPositionB, Vector2 newPositionA, Vector2 newPositionB) { float oldDistance = Vector2.Distance(oldPositionA, oldPositionB); float newDistance = Vector2.Distance(newPositionA, newPositionB); if (oldDistance < newDistance) { return true; } return false; } } } 04.打包在安卓平台上,安装完毕后就可以看到效果,单指旋转,双指缩放。 嗯……静态图片看不出效果。 #region Introduction
此工程位于Github,遵从GPLv3.0协议,请根据需求使用。Pull完记得点个Star!
文章仅作抛砖引玉之用,希望能够借此给予寻求思路的开发者们一些灵感。
此教程系列曾属于“Unity The Great”,但由于“Tone Tune Tookit”的诞生,开发组决定将两个系列进行合并。
如果内容中出现了语混序乱、错鳖字、缺少标点符号的情况还请见谅
互联网精神永存。
Hooray!!!
#endregion
#region Developer
[团队代言人博客]
// https://www.cnblogs.com/mirzkisd1ex0/
[开发者邮箱]
// dearisaacyang@outlook.com
[开发者微信]
// wxid_63t8w3035kvp22
[开发者企鹅]
// 2957047371
#endregion
01.新建场景,然后随便找个模型丢进场景里,对光和相机进行调整。(我用的是自建的康师傅……贴图是从网上找的……已包含在TTT工具包的Models下了,需要的话自取) 02.从TTT插件中,将ObjectRotateAndScale.cs添加至模型上,为模型添加碰撞器,用于射线检测。 03.代码内容如下,tag那里和模型的标签记得根据自己的需求改! /// <summary> /// Copyright (c) 2021 MirzkisD1Ex0 All rights reserved. /// Code Version 1.0 /// </summary>
using System.Collections; using System.Collections.Generic; using UnityEngine;
namespace ToneTuneToolkit.Mobile { public class ObjectRotateAndScale : MonoBehaviour { private Vector2 oldPosA; private Vector2 oldPosB;
private void Update() { if (Input.GetMouseButton(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.tag == "Player") // 如果射线不在Tag为Player的物体上则跳过后续的步骤 { if (Input.touchCount == 1) { ObjectRotate(); } if (Input.touchCount == 2) { ObjectScale(); } } } } }
/// <summary> /// 单指操作 /// 旋转 /// </summary> private void ObjectRotate() { if (Input.GetTouch(0).phase == TouchPhase.Moved) { float offsetX = Input.GetAxis("Mouse X"); float offsetY = Input.GetAxis("Mouse Y"); transform.Rotate(new Vector3(offsetY, -offsetX, 0) * 10f, Space.World); } return; }
/// <summary> /// 双指操作 /// 缩放 /// </summary> private void ObjectScale() { if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved) { Vector2 newPosA = Input.GetTouch(0).position; Vector2 newPosB = Input.GetTouch(1).position; float oldScale; float newScale; oldScale = transform.localScale.x; if (IsEnlarge(oldPosA, oldPosB, newPosA, newPosB)) { newScale = oldScale * 1.02f; } else { newScale = oldScale / 1.02f; } transform.localScale = new Vector3(newScale, newScale, newScale); oldPosA = newPosA; oldPosB = newPosB; } }
/// <summary> /// 双指触点判断 /// 远了就是放大 /// </summary> /// <param name="oldPositionA"></param> /// <param name="oldPositionB"></param> /// <param name="newPositionA"></param> /// <param name="newPositionB"></param> /// <returns></returns> private bool IsEnlarge(Vector2 oldPositionA, Vector2 oldPositionB, Vector2 newPositionA, Vector2 newPositionB) { float oldDistance = Vector2.Distance(oldPositionA, oldPositionB); float newDistance = Vector2.Distance(newPositionA, newPositionB); if (oldDistance < newDistance) { return true; } return false; } } } 04.打包在安卓平台上,安装完毕后就可以看到效果,单指旋转,双指缩放。 嗯……静态图片看不出效果。 #region Introduction
此工程位于Github,遵从GPLv3.0协议,请根据需求使用。Pull完记得点个Star!
文章仅作抛砖引玉之用,希望能够借此给予寻求思路的开发者们一些灵感。
此教程系列曾属于“Unity The Great”,但由于“Tone Tune Tookit”的诞生,开发组决定将两个系列进行合并。
如果内容中出现了语混序乱、错鳖字、缺少标点符号的情况还请见谅
互联网精神永存。
Hooray!!!
#endregion
#region Developer
[团队代言人博客]
// https://www.cnblogs.com/mirzkisd1ex0/
[开发者邮箱]
// dearisaacyang@outlook.com
[开发者微信]
// wxid_63t8w3035kvp22
[开发者企鹅]
// 2957047371
#endregion
标签:ToneTuneToolkit,缩放,GetTouch,安卓,float,private,Input,newScale,Vector2 来源: https://www.cnblogs.com/mirzkisd1ex0/p/15233204.html