unity 移动端 缩放 旋转

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

选中摄像机,给摄像机添加一个脚本名称为Move. 脚本中有一个参数 Target,它的作用是设置摄像头旋转移动参照物,这里把一个箱子赋值给了 Target,那么左右滑动屏幕会发现箱子在旋转,两手缩放屏幕会发现箱子在放大与缩小。

using UnityEngine;
using System.Collections;

public class Move : MonoBehaviour
{
    // 主角  相机围绕其旋转 拉近
    public Transform target;

    // 缩放系数
    private float distance = 10.0f;

    // 左右滑动移动速度
    private float xSpeed = 250.0f;
    private float ySpeed = 120.0f;

    // 缩放限制系数
    private float yMinLimit = -20;
    private float yMaxLimit = 80;

    // 摄像头的位置   //////。。。。。。。。。。。。。。。。。
    private float x = 0.0f;
    private float y = 0.0f;

    // 记录上一次手机触摸位置判断用户是在做放大还是缩小手势
    private Vector2 oldPosition1 = new Vector2(0, 0);
    private Vector2 oldPosition2 = new Vector2(0, 0);

    //初始化游戏信息设置
    void Start()
    {
       // Debug.Log(oldPosition1);
        Vector3 angles = transform.eulerAngles;
        x = angles.y;
        y = angles.x;

      //  GetComponent<Rigidbody>().freezeRotation = true;
    }

    void Update()
    {
        // 判断触摸数量为单点触摸
        if (Input.touchCount == 1)
        {
            // 触摸类型为移动触摸
            if (Input.GetTouch(0).phase == TouchPhase.Moved)
            {
                //根据触摸点计算X与Y位置
                x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
                y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
            }
        }

        // 判断触摸数量为多点触摸
        if (Input.touchCount > 1)
        {
            // 前两只手指触摸类型都为移动触摸
            if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
            {
                // 计算出当前两点触摸点的位置
                var tempPosition1 = Input.GetTouch(0).position;
                var tempPosition2 = Input.GetTouch(1).position;
                // 函数返回真为放大,返回假为缩小
                if (isEnlarge(oldPosition1, oldPosition2, tempPosition1, tempPosition2))
                {
                    // 放大系数超过3以后不允许继续放大
                    // 这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
                    if (distance > 3)
                    {
                        distance -= 0.5f;
                    }
                }
                else
                {
                    // 缩小系数返回18.5后不允许继续缩小
                    // 这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
                    if (distance < 18.5f)
                    {
                        distance += 0.5f;
                    }
                }
                // 备份上一次触摸点的位置,用于对比
                oldPosition1 = tempPosition1;
                oldPosition2 = tempPosition2;

            }
        }
    }

    // 函数返回真为放大,返回假为缩小
    bool isEnlarge(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2)
    {
        // 函数传入上一次触摸两点的位置与本次触摸两点的位置计算出用户的手势
        float leng1 = Mathf.Sqrt((oP1.x - oP2.x) * (oP1.x - oP2.x) + (oP1.y - oP2.y) * (oP1.y - oP2.y));
        float leng2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y));

        if (leng1 < leng2)
        {
            // 放大手势
            return true;
        }
        else
        {
            // 缩小手势
            return false;
        }
    }
//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    // Update方法一旦调用结束以后进入这里算出重置摄像机的位置
    void LateUpdate()
    {

        // target为主角,缩放旋转的参照物
        if (target)
        {
            // 重置摄像机的位置
            y = ClampAngle(y, yMinLimit, yMaxLimit);
            Quaternion rotation = Quaternion.Euler(y, x, 0);
            Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;

            transform.rotation = rotation;
            transform.position = position;
        }
    }

    static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360)
            angle += 360;
        if (angle > 360)
            angle -= 360;
        return Mathf.Clamp(angle, min, max);
    }
}


Unity中的物体缩放-Android和PC平台 在本文中缩放的是NGUI的Texture对象: 在一个有Collider的可以控制Texture的对象上添加如下脚本即可: using UnityEngine; public class ScaleDragTexture : MonoBehaviour { public Transform uitexture; //当触屏点超过1个时,对图片进行放大缩小,最小缩放比例为图片 阅读详情

相关推荐

Unity 模型在移动端进行移动旋转放大缩小

using System.Collections; using System.Collections.Generic; using UnityEngine; public class RotateControl : MonoBehaviour { //float xSpeed = 100f; //float ySpeed = 100f; float x = 0f; ...

Until 7176

Unity 单指移动 地图两指缩放

Unity 单指移动 地图两指缩放

unity移动端触摸旋转移动缩放

using UnityEngine; using System.Collections; public class xuanzhuan : MonoBehaviour { public float yMin = 200;//y最小角度     public float yMax = -200; //用于绑定参照物对象 public Transform target; //缩...

qq_43273818的博客 1166

Unity手势,单指移动,双指旋转缩放

Unity手势,单指移动,双指旋转缩放 今天记录一份代码,unity自带的手势做一点简单的入门级的操作 上代码 using UnityEngine; using UnityEngine.UI; /// /// 点击屏幕实现缩放旋转移动 /// public class EasyTouchManager5_Demo : MonoBehaviour { private Touch oldT...

梦想是世界和平 9839

Unity Camera围绕物体旋转缩放简单实现

想实现Camera围绕物体旋转缩放这个功能,我们第一时间想到的就是RotateAround()方法但是使用该方法就面临着一个问题,当你鼠标横着拖动屏幕使相机围绕物体旋转90度后,在竖着拖动时会发现相机旋转的角度和方位就乱套了。如果被围绕物体是在特定条件下(比如可移动状态下),就要考虑x轴的因素,从而增加代码和工作量。 当被围绕物体是静止状态下时就可以使用下面的思路和方法。首先创建一个空物体(cube),把摄像机作为该空物体的子物体,此处注意相机和cube的轴向必须一致,具体的思路是,我们鼠标在屏幕上滑动

qq_59943770的博客 6739

unity围绕物体旋转缩放移动

unity围绕物体旋转缩放移动

w091253的博客 815

Unity_移动端实现(多个)物体拖拽、旋转缩放

目录一、说明二、实现三、注意四、使用思路 重要是做一个记录,思路不是太好,也不一定符合其他应用场景,应用不建议参考。 一、说明 场景: 有多个物体(模型) 目的: 平移模型、旋转模型、缩放模型 要求: 可单独操作某一个模型,而且不影响其他模型的操作(平移单独平移,旋转单独旋转) 点击在物体上操作的是平移,点击在物体外操作的是旋转(前提是要确定点击物体) 二、实现 平移代码 using System.Collections; using System.Collections.Generic; using

ssc_zcys的博客 3101

Unity可以在移动端设备上实现相机的绕着目标点旋转,平移,缩放脚本

分享一个Unity可以在移动端设备上实现相机的绕着目标点旋转,平移,缩放脚本,经测试可用。 using UnityEngine; using UnityEditor; using System.Collections; using System.Collections.Generic; using UnityEngine; [AddComponentMenu("Camera-Control/MobilemaxCamera")] public class MobilemaxCamera : M.

1304

Unity Input System实现移动端手势交互:单指旋转与双指缩放

Unity移动开发中,输入处理是交互设计的核心。传统的Input Manager通过直接读取原始触摸数据,要求开发者手动处理复杂的位移计算和状态管理,代码冗长且难以维护。其原理是基于每帧轮询触摸点,需要开发者自行实现手势识别算法,技术价值有限。而Unity全新的Input System采用基于动作的架构,将原始输入与高层交互逻辑解耦,通过可视化配置定义手势行为,极大提升了代码的可读性和可维护性。这一技术特别适用于需要复杂手势组合的移动应用,如3D模型查看器、地图导航和AR交互场景。本文聚焦于利用Input

weixin_31032799的博客 326

unity移动端操作方式(旋转缩放手势)总结

这几天一直在做移动端手势方面的项目,现在把几种常见的方法总结一下。 1.通过手势控制物体大小进行缩放,这种实际上就是改变了物体的localScale 。这种方式常用于AR里面对物体的操作。 float distance = 30f; float xSpeed = 50f; float ySpeed = 50f; float x = 0f; float y = 0f;

elineSea的博客 5182

unity移动端操作物体旋转缩放手势

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class SetRoaAndScal : MonoBehaviour { public Transform TargetTransform;//要操作的物体 public bool flag_Roable = true;//自动旋转标志 publi

红叶 867

Unity移动端触控交互实战:从Input System到双指缩放旋转

移动应用与游戏开发中,流畅自然的触控交互是提升用户体验的关键。其核心在于对底层输入事件流的精准管理与手势识别算法的有效实现。通过合理运用事件驱动模型与状态机,开发者可以构建出响应迅速、直觉易用的交互方案,这对于AR应用、移动游戏等需要精细操作的产品尤为重要。Unity引擎为此提供了两套主要方案:传统的Input类适合快速原型开发,而新的Input System包则通过事件驱动与可配置的动作映射,为复杂手势(如双指缩放旋转)提供了更强大、可维护的解决方案。理解触摸事件的生命周期、掌握基于时间与位移阈值的手

weixin_29628635的博客 300

Unity pc和移动端控制摄像机旋转缩放

using UnityEngine; using System; using System.Collections; public class CameraController : MonoBehaviour { // Text m_debugTip; public bool canRotation_X = true; public bool canRotation_Y =...

lizhenxiqnmlgb的博客 7913

Unity 移动端简单手势控制(移动旋转缩放

using UnityEngine; using System.Collections; using System.IO; /// <summary> /// 点击屏幕实现缩放旋转移动 /// </summary> public class FingerTouch : MonoBehaviour { private Touch oldTouch1; //上次触摸点1(手指1)

Elvira_Z的专栏 1万+

Unity移动端3D物体手指旋转缩放交互实现详解

移动应用开发中,3D交互是提升用户体验的关键技术。其核心原理是通过处理触摸屏的多点输入数据,将用户手势映射为三维空间中的变换操作。从技术实现层面,这涉及对Unity输入系统的深度理解、向量数学计算以及四元数旋转的应用。这项技术的工程价值在于能够为AR产品展示、3D模型查看器等应用提供流畅、稳定的基础交互能力。通过状态机模式精准判别旋转缩放意图,并利用平滑阻尼算法优化操作手感,开发者可以构建出符合直觉的**手指交互**系统。本文以**Unity移动端**开发为背景,详细拆解了从触摸数据处理到完整组件实现的

weixin_29967445的博客 281

告别Input.GetTouch!Unity Input System实现移动端手势交互(单指旋转+双指缩放

本文详细介绍了如何使用Unity Input System实现移动端手势交互,包括单指旋转和双指缩放功能。通过对比传统Input.GetTouch的局限性,展示了Input System在代码解耦、多点触摸处理和跨平台适配方面的优势,并提供了完整的实现代码和性能优化策略。

weixin_29016833的博客 233

Unity移动端Input触控和Window触摸屏电脑 控制相机旋转缩放

using UnityEngine; using System; using System.Collections; public class CameraController : MonoBehaviour { /// <summary> /// 是否能旋转X轴 /// </summary> public bool canRotation_X = true; /// <summary> /// 是否能旋转Y轴 /

BBoyLXiang的博客 3359

Unity 移动端Touch Camera旋转+缩放(FOV)+Lerp插值平滑实现

声明解释:target为围绕目标点(实现自身旋转挂自身即可),xSpeed,ySpeed.为旋转速度.yMinLimit,yMaxLimit,为上下旋转限制._lerpspeed,为插值速度(可理解为:值越大 延迟越小) 直接上代码.代码为本人项目需求实现: 有具体需求请适当修改 using UnityEngine; using System.Collections; using Syste...

Frant_Wng的博客 2516
上一篇: 我的第一个博客
sm618
博客等级 码龄13年 0粉丝 1原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值