1. 代码
using UnityEngine;public class ObjectManipulation : MonoBehaviour
{public float MinScale = 0.2f;public float MaxScale = 3.0f;private float scaleRate = 1f;private float newScale;private Ray ray;private RaycastHit hitInfo;private bool isDragging = false;private Vector3 offset;private float rotationSpeed = 5.0f;private void OnMouseDown(){isDragging = true;offset = gameObject.transform.position - GetMouseWorldPosition();}private void OnMouseUp(){isDragging = false;}private void Update(){if (isDragging){Vector3 newPosition = GetMouseWorldPosition() + offset;transform.position = newPosition;}if (Input.GetMouseButton(1)){float mousX = Input.GetAxis("Mouse X");float mousY = Input.GetAxis("Mouse Y");transform.Rotate(mousY * rotationSpeed, -mousX * rotationSpeed, 0, Space.World);}ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out hitInfo)){if (Input.GetAxis("Mouse ScrollWheel") != 0){newScale = transform.localScale.x + Input.GetAxis("Mouse ScrollWheel") * scaleRate;newScale = Mathf.Clamp(newScale, MinScale, MaxScale);transform.localScale = new Vector3(newScale, newScale, newScale);}}}private Vector3 GetMouseWorldPosition(){Vector3 mousePos = Input.mousePosition;mousePos.z = -Camera.main.transform.position.z;return Camera.main.ScreenToWorldPoint(mousePos);}
}
2. 测试场景
