Unity物体沿单一方向进行缩放

物体沿单一方向进行缩放

Unity中,物体默认只能通过设置x、y、z轴scale轴向拉伸,但是很多情况下我们需要延任意方向拉伸,但是直接修改物体的Scale是进行双向的伸缩。
对于这种情况,我们只需要给物体添加一个空的父类,并且将空物体放在不需要拉伸的位置。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如图所示,我需要让Cube向箭头方向进行缩放,只需要给cube添加一个父类,并且将父类位置归好即可(最好是空物体,这次是为了观察直观),同时使用代码对父物体进行缩放操作。

代码(我使用的是Tween动画)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class NewBehaviourScript : MonoBehaviour {

	
	void Start () {
        //this.transform.DOScale(new Vector3(10, 1, 1), 10);
        this.transform.DOScale(10, 10);
    }
}
### 在 Unity 中实现滑动屏幕控制物体旋转和缩放 为了实现在 Unity 中通过滑动屏幕来控制物体的旋转和缩放,可以从以下几个方面入手: #### 设置场景与导入必要资源 确保已经安装并配置好 AR Foundation 插件,这有助于简化交互逻辑处理[^3]。 #### 创建基本UI结构 如果计划在2D界面内操作,则不需要ARFoundation支持。对于简单的触摸事件响应,可直接利用Unity内置的功能完成需求。创建一个Canvas作为容器,在其下添加Image或其他类型的UI元素用于展示目标对象,并为其挂载`EventTrigger`组件以便捕捉触控输入[^1]。 #### 处理触摸手势识别 编写脚本来解析多点触控行为,区分单指平移、双指缩放以及三指以上触发的其他动作模式。下面是一个简易版本的手势管理类示例代码: ```csharp using UnityEngine; public class GestureManager : MonoBehaviour { private Vector2 startTouchPosition; //记录首次接触的位置 private float pinchStartDistance = 0f; void Update() { HandlePinchZoom(); HandleRotateObject(); } /// <summary> /// 双指点捏放大缩小 /// </summary> void HandlePinchZoom(){ if (Input.touchCount == 2){ Touch touchZero = Input.GetTouch(0); Touch touchOne = Input.GetTouch(1); Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition; Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition; float prevMagnitude = (touchZeroPrevPos - touchOnePrevPos).magnitude; float currentMagnitude = (touchZero.position - touchOne.position).magnitude; if(pinchStartDistance==0f)pinchStartDistance=prevMagnitude;//初始化距离 float difference = currentMagnitude - prevMagnitude; Transform targetTransform = transform; Vector3 newScale = targetTransform.localScale + new Vector3(difference*Time.deltaTime,difference*Time.deltaTime,difference*Time.deltaTime)*targetTransform.localScale.magnitude/pinchStartDistance; targetTransform.localScale=newScale.normalized*(newScale.magnitude>0.1?newScale.magnitude:0.1f); pinchStartDistance=currentMagnitude; }else{ pinchStartDistance=0f; } } /// <summary> /// 单指拖拽旋转模型 ///</summary> void HandleRotateObject(){ if(Input.touchCount==1&&Input.GetTouch(0).phase==TouchPhase.Moved){ var deltaAngle=-Input.GetAxis("Mouse X") * Time.deltaTime * 250f; transform.Rotate(Vector3.up, deltaAngle); } } } ``` 此段C#代码展示了如何检测两个手指之间的间距变化来进行缩放调整,同时也包含了基于单一触摸点位移量改变物体朝向的方法[^4]。 #### 调整细节优化体验 针对不同设备特性微调灵敏度参数;考虑加入惯性效果让过渡更加自然流畅;当用户停止互动后缓慢恢复默认状态等措施提升整体质感[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序粉末状在校生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值