unity 3d物体缩放旋转教程

2015年03月04日 09:34 0 点赞 0 评论 更新于 2025-11-21 16:39

在本教程中,我们将详细介绍如何使用 Unity 3D 实现物体的缩放和旋转功能。以下是具体的实现代码,适合新手朋友学习参考。

using UnityEngine;
using System.Collections;

public class ThisRotate : MonoBehaviour
{
// 定义所需的向量变量
private Vector3 startPosition;
private Vector3 previousPosition;
private Vector3 offset;
private Vector3 finalOffset;
private Vector3 eulerAngle;

// 定义布尔变量用于标记滑动状态
private bool isSlide;

// 定义角度变量
private float angle;

// 定义缩放比例,默认为 1
public float scale = 1;

// 定义射线投射结果变量
private RaycastHit hit;

void 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 += 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);

// 逐渐减小角度
if (angle > 0)
{
angle -= 5;
}
else
{
// 角度小于等于 0 时,将其置为 0
angle = 0;
}
}
}
}

代码解释

变量定义

  • startPositionpreviousPositionoffsetfinalOffseteulerAngle:这些向量变量用于记录鼠标的位置和偏移量,以及物体的欧拉角。
  • isSlide:布尔变量,用于标记物体是否处于滑动旋转状态。
  • angle:记录旋转的角度。
  • scale:物体的缩放比例,可通过鼠标滚轮进行调整。
  • hit:用于存储射线投射的结果。

Start 方法

Start 方法中,可以进行一些初始化操作,当前该方法为空。

OnGUI 方法

该方法用于处理鼠标滚轮的缩放操作。通过发射射线检测鼠标是否悬停在当前物体上,如果是且鼠标滚轮有滚动操作,则根据滚动值更新物体的缩放比例。

Update 方法

  • 鼠标左键按下:记录鼠标的起始位置。
  • 鼠标左键持续按下:计算鼠标的偏移量,并根据偏移量旋转物体。
  • 鼠标左键释放:计算最终的鼠标偏移量,标记为滑动状态,并记录旋转角度。
  • 滑动状态:在滑动状态下,继续根据最终偏移量旋转物体,并逐渐减小旋转角度,直到角度为 0。

通过以上代码和解释,你可以在 Unity 3D 中实现物体的缩放和旋转功能。希望本教程对你有所帮助!

作者信息

boke

boke

共发布了 3994 篇文章