unity3d 单个物体缩放旋转

2015年01月23日 11:57 0 点赞 0 评论 更新于 2025-11-21 15:11

本文将详细介绍 Unity3D 中单个物体的旋转与缩放问题,并提供相应的源代码供大家参考。

以下是实现单个物体缩放旋转功能的完整代码:

using UnityEngine;
using System.Collections;

public class ThisRotate : MonoBehaviour
{
// 定义相关向量变量
Vector3 StartPosition;
Vector3 previousPosition;
Vector3 offset;
Vector3 finalOffset;
Vector3 eulerAngle;

// 定义布尔变量用于标记是否滑动
bool isSlide;
// 定义旋转角度变量
float angle;

// 定义缩放比例,初始值为 1
public float scale = 1;

// 定义射线投射命中信息变量
RaycastHit hit;

void Start()
{
// Start 方法可用于初始化操作,这里暂时为空
}

void OnGUI()
{
// 从主相机向鼠标位置发射一条射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

// 进行射线投射,如果命中物体
if (Physics.Raycast(ray, out hit))
{
// 检查命中的物体是否为当前脚本所挂载的物体
if (hit.transform == transform)
{
// 检查鼠标滚轮是否有滚动操作
if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
// 打印鼠标滚轮滚动的值
Debug.Log(Input.GetAxis("Mouse ScrollWheel"));
// 根据鼠标滚轮滚动值更新缩放比例
scale = scale + Input.GetAxis("Mouse ScrollWheel");
// 更新物体的局部缩放
transform.localScale = new Vector3(1 + scale, 1 + scale, 1 + scale);
}
}
}
}

void Update()
{
// 检查鼠标左键是否按下
if (Input.GetMouseButtonDown(0))
{
// 记录鼠标按下时的初始位置
StartPosition = Input.mousePosition;
// 记录鼠标按下时的上一位置
previousPosition = Input.mousePosition;
}

// 检查鼠标左键是否持续按下
if (Input.GetMouseButton(0))
{
// 计算鼠标当前位置与上一位置的偏移量
offset = Input.mousePosition - previousPosition;
// 更新上一位置为当前位置
previousPosition = Input.mousePosition;
// 绕垂直于偏移向量和向前向量的轴旋转物体
transform.Rotate(Vector3.Cross(offset, Vector3.forward).normalized, offset.magnitude, Space.World);
}

// 检查鼠标左键是否释放
if (Input.GetMouseButtonUp(0))
{
// 计算鼠标释放时的最终偏移量
finalOffset = Input.mousePosition - StartPosition;
// 标记为滑动状态
isSlide = true;
// 记录最终偏移量的大小作为旋转角度
angle = finalOffset.magnitude;
}

// 如果处于滑动状态
if (isSlide)
{
// 继续旋转物体
transform.Rotate(Vector3.Cross(finalOffset, Vector3.forward).normalized, angle * 2 * Time.deltaTime, Space.World);

// 如果旋转角度大于 0
if (angle > 0)
{
// 减小旋转角度
angle -= 5;
}
else
{
// 旋转角度归零
angle = 0;
}
}
}
}

代码解释

  1. 变量定义:在类中定义了多个向量变量用于记录鼠标位置和偏移量,布尔变量 isSlide 用于标记是否处于滑动状态,angle 用于记录旋转角度,scale 用于控制物体的缩放比例,hit 用于存储射线投射的命中信息。
  2. Start 方法:在游戏开始时调用,可用于初始化操作,这里暂时为空。
  3. OnGUI 方法:每帧都会调用,用于处理 GUI 相关的操作。在该方法中,从主相机向鼠标位置发射一条射线,如果命中当前脚本所挂载的物体,并且鼠标滚轮有滚动操作,则根据滚动值更新物体的缩放比例。
  4. Update 方法:每帧都会调用,用于处理物体的旋转操作。当鼠标左键按下时,记录初始位置和上一位置;当鼠标左键持续按下时,计算偏移量并旋转物体;当鼠标左键释放时,计算最终偏移量并标记为滑动状态;在滑动状态下,继续旋转物体并逐渐减小旋转角度。

通过以上代码和解释,你可以在 Unity3D 中实现单个物体的缩放和旋转功能。