Unity之触屏控制_实现模型旋转和缩放—Touch类的使用
来源:互联网 发布:java记录日志的方式 编辑:程序博客网 时间:2024/06/01 07:45
如果我们在Unity中实现物体的放大和旋转等需要触屏控制的功能,可以使用类Touch,可以理解为屏幕触点。
首先让我们看一看API中的定义:Structure describing the status of a finger touching the screen,大体意思是,描述手指接触屏幕状态的结构体。
它的主要变量有:
Touch.phase:Describes the phase of the touch.,即描述触摸的阶段(阶段主要分分为三种:Began(手指刚接触屏幕),move(手指在屏幕上移动),end(手指离开屏幕))。
Touch.position:当前触点的位置,返回的是一个二维向量。
注1:了解当前屏幕触点数目可以雕用:Input.TouchCount.
注2:获得屏幕的触点可以调用:Input.getTouch(int index);index为接触屏幕的触点编号(从0开始计)
现在让我们实现物体的放大和旋转功能:
using UnityEngine;
using System.Collections;
using System.Collections;
public class rotateand_scale : MonoBehaviour {
private Vector2 oldPo1;
private Vector2 oldPo2;
private Vector2 newPo1;
private Vector2 newPo2;
private Touch touch1;
private Touch touch2;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//单点触碰旋转
if(Input.touchCount==1)
{
touch1 = Input.GetTouch(0);
Vector2 slip = touch1.deltaPosition;
this.transform.Rotate(new Vector3(slip.y, slip.x),Space.World);
}else if(Input.touchCount==2) //多点触碰放大或缩小
{
touch1 = Input.GetTouch(0);
touch2 = Input.GetTouch(1);
//记录两个手指都触屏时的位置
if(touch1.phase == TouchPhase.Began||touch2.phase==TouchPhase.Began)
{
oldPo1 = touch1.position;
oldPo2 = touch2.position;
}
//随手指的移动变换物体的大小
if(touch1.phase==TouchPhase.Moved&&touch2.phase==TouchPhase.Moved)
{
newPo1 = touch1.position;
newPo2 = touch2.position;
float distance1 = Vector2.Distance(oldPo1, oldPo2);
float distance2 = Vector2.Distance(newPo1, newPo2);
float scale = distance2 / distance1;
if(scale<0.3)
{
scale = 0.3f;
} else if(scale>2)
{
scale = 2.0f;
}
this.transform.localScale *= scale;
}
private Vector2 oldPo1;
private Vector2 oldPo2;
private Vector2 newPo1;
private Vector2 newPo2;
private Touch touch1;
private Touch touch2;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//单点触碰旋转
if(Input.touchCount==1)
{
touch1 = Input.GetTouch(0);
Vector2 slip = touch1.deltaPosition;
this.transform.Rotate(new Vector3(slip.y, slip.x),Space.World);
}else if(Input.touchCount==2) //多点触碰放大或缩小
{
touch1 = Input.GetTouch(0);
touch2 = Input.GetTouch(1);
//记录两个手指都触屏时的位置
if(touch1.phase == TouchPhase.Began||touch2.phase==TouchPhase.Began)
{
oldPo1 = touch1.position;
oldPo2 = touch2.position;
}
//随手指的移动变换物体的大小
if(touch1.phase==TouchPhase.Moved&&touch2.phase==TouchPhase.Moved)
{
newPo1 = touch1.position;
newPo2 = touch2.position;
float distance1 = Vector2.Distance(oldPo1, oldPo2);
float distance2 = Vector2.Distance(newPo1, newPo2);
float scale = distance2 / distance1;
if(scale<0.3)
{
scale = 0.3f;
} else if(scale>2)
{
scale = 2.0f;
}
this.transform.localScale *= scale;
}
}
}
}
}
}
注:space类 操作的空间,官方:The coordinate space in which to operate.
space.Word : Applies transformation relative to the world coordinate system.指游戏里面的空间系统
space.self: : Applies transformation relative to the local coordinate system. 本地的空间系统。
0 0
- Unity之触屏控制_实现模型旋转和缩放—Touch类的使用
- 在Unity中通过触摸屏幕实现模型的旋转和缩放
- 在Unity中通过触摸屏幕实现模型的旋转和缩放
- 在Unity中通过触摸屏幕实现模型的旋转和缩放
- unity使用鼠标控制移动、缩放、旋转
- unity 控制摄像机旋转和缩放
- Unity通过射线碰撞选择模型,然后控制模型的移动、旋转、缩放等动作
- 【Unity3D API的学习与使用】Unity实现GUI组件的位移、缩放和旋转
- Unity触摸控制旋转缩放
- 008-实现Unity3d中使用LeanTouch插件进行触屏控制(拖拽、移动、缩放旋转...)
- Android之matrix类控制图片的旋转、缩放、移动
- osg模型的移动,旋转和缩放
- unity模型缩放趋势控制。
- Unity中的旋转和缩放
- Unity通过鼠标实现相机视角旋转和缩放
- Unity 控制物体移动 旋转 缩放
- 002-实现Unity3d中触摸屏幕控制物体的旋转和缩放 代码实现
- 触屏控制物体旋转,缩放
- Java中的Set集合
- hdoj 2285 Switches 高斯消元。。。
- Educational Codeforces Round 11 D 计算几何
- DP训练笔记
- 批处理获取当前时间
- Unity之触屏控制_实现模型旋转和缩放—Touch类的使用
- C中大端小端的问题
- 自定义标题栏,让自己以后不那么累
- 大数据IMF传奇行动绝密课程第25课:Spark Sort-Based Shuffle内幕彻底解密
- WEB前端-HTML-常用标签
- android_assert目录下的文件
- asp HTTP 错误 500.21 - Internal Server Error
- 使用achartengine画图,双Y轴右侧标题文字显示不全
- C# 导出 Excel 封装类 代码