using UnityEngine;
/// <summary>
/// 旋转物体
/// </summary>
public class RotateObject : MonoBehaviour
{
#region 缩放数据
[Header("是否需要缩放")]
public bool m_IsScale;
[Header("缩放速度")]
public float m_ScaleSpeed = 10f;
public float m_MinScale = 0.5f;
public float m_MaxScale = 5f;
private Vector3 m_LocalScale;
/// <summary>
/// 恢复原本大小
/// </summary>
public float m_RevertScale = 1f;
/// <summary>
/// 临时缩放大小
/// </summary>
private float m_TempScale = 1f;
#endregion
#region 旋转数据
public float m_MinX = -360.0f;
public float m_MaxX = 360.0f;
public float m_MinY = -45.0f;
public float m_MaxY = 45.0f;
/// <summary>
/// 左右旋转的速度
/// </summary>
[Header("左右旋转的速度")]
public float m_SensX = 500.0f;
/// <summary>
/// 上下旋转的速度
/// </summary>
[Header("上下旋转的速度")]
public float m_SensY = 500.0f;
private float m_RotationY = 0.0f;
private float m_RotationX = 0.0f;
private float m_MouseX;
private float m_MouseY;
#endregion
// Start is called before the first frame update
void Start()
{
InitData();
}
// Update is called once per frame
void Update()
{
RotateObj();
if (m_IsScale)
{
ScaleObj();
}
}
private void InitData()
{
m_RotationX = transform.rotation.eulerAngles.y;
m_LocalScale = transform.localScale;
m_TempScale = m_RevertScale;
}
/// <summary>
/// 旋转物体
/// </summary>
private void RotateObj()
{
if (Input.GetMouseButton(0))
{
var x = Input.GetAxis("Mouse X");
var y = Input.GetAxis("Mouse Y");
if (x != m_MouseX || y != m_MouseY)
{
m_RotationX -= x * m_SensX * Time.deltaTime;
m_RotationY -= y * m_SensY * Time.deltaTime;
m_RotationY = Mathf.Clamp(m_RotationY, m_MinY, m_MaxY);
m_MouseX = x;
m_MouseY = y;
transform.localEulerAngles = new Vector3(-m_RotationY, m_RotationX, 0);
}
}
}
/// <summary>
/// 缩放物体
/// </summary>
private void ScaleObj()
{
float wheel = Input.GetAxis("Mouse ScrollWheel");
if (wheel > 0)
{
if (m_TempScale < m_MaxScale)
{
m_TempScale += Time.deltaTime * m_ScaleSpeed;
}
transform.localScale = new Vector3(m_LocalScale.x* m_TempScale, m_LocalScale.y * m_TempScale, m_LocalScale.z * m_TempScale);
}
else if (wheel < 0)
{
if (m_TempScale > m_MinScale)
{
m_TempScale -= Time.deltaTime * m_ScaleSpeed;
}
transform.localScale = new Vector3(m_LocalScale.x * m_TempScale, m_LocalScale.y * m_TempScale, m_LocalScale.z * m_TempScale);
}
//恢复默认大小
if (Input.GetKeyDown(KeyCode.Space))
{
transform.localScale = m_LocalScale;
m_TempScale = m_RevertScale;
}
}
}
unity控制物体旋转和缩放
最新推荐文章于 2024-05-07 17:01:26 发布