Unity按键控制(移动、旋转、相机角度控制)

更新时间:2023-05-14 13:50:04 阅读: 评论:0

Unity按键控制(移动、旋转、相机⾓度控制)
通过按键控制物体的位置及姿态
1、移动:物体xyz轴分别有对应的按键控制。
有道英语
加速度控制:长按键会使加速度变⼤,同时加速度值有范围限制。
移动范围也有限制,都是通过函数 Mathf.Clamp 计算。
初值设置:
private Vector3 m_camRot;
private Transform m_camTransform;//摄像机Transform
private Transform m_transform;//摄像机⽗物体Transform
west coastpublic float m_movSpeed =1;//移动系数
public float m_rotateSpeed =1;//旋转系数
public float m_objRotateSpeed=0.5f;//物体旋转速度
public float horizontalRotate=5;
//速度初值
private float xm =0, ym =0, zm =0;
//最⼤加速度,反向时加负号
private float xmMax =10, ymMax =10, zmMax =10;
private float posX, posY, posZ;
//位置范围,反向时加负号
public float posXRange, posYRange, posZRange;
private void Start()
{
m_camTransform = ansform;
m_transform =GetComponent<Transform>();
xm =0;
ym =0;
混淆英语zm =0;
}
language是什么意思按键移动代码块:
加速度要注意,按键抬起时要归零。
#region按键控制移动
void KeyToMove()
{
//按键盘W向上移动
if(Input.GetKey(KeyCode.W))
{
//加速度计算
ym += m_movSpeed * Time.deltaTime;
//限制速度范围
ym = Mathf.Clamp(ym,0, ymMax);
PosYRange();
}
if(Input.GetKeyUp(KeyCode.W))
{
//按键抬起时,加速度归零
ym =0;
}
if(Input.GetKey(KeyCode.S)/*&& m_transform.position.y >= 1*/)//按键盘S向下移动
{
ym -= m_movSpeed * Time.deltaTime;
ym = Mathf.Clamp(ym,-ymMax,0);
PosYRange();
}
if(Input.GetKeyUp(KeyCode.S))
if(Input.GetKeyUp(KeyCode.S))
{
ym =0;
}
if(Input.GetKey(KeyCode.J))//向左移动
{
xm -= m_movSpeed * Time.deltaTime;
xm = Mathf.Clamp(xm,-xmMax,0);
PosXRange();
一对一少儿英语}
el if(Input.GetKey(KeyCode.L))//向右移动
{
xm += m_movSpeed * Time.deltaTime;
xm = Mathf.Clamp(xm,0, xmMax);
PosXRange();
}
if(Input.GetKey(KeyCode.I))//向前移动
{
zm -= m_movSpeed * Time.deltaTime;
zm = Mathf.Clamp(zm,-zmMax,0);
PosZRange();
}
el if(Input.GetKey(KeyCode.K))//向后移动
{modesty
zm += m_movSpeed * Time.deltaTime;
zm = Mathf.Clamp(zm,0, zmMax);
PosZRange();
}
}
void PosXRange()
{
posX = m_transform.position.x + xm;
posX = Mathf.Clamp(posX,-posXRange, posXRange);
m_transform.position =new Vector3(posX,m_transform.position.y, m_transform.position.z); }
void PosYRange()
{
//当前位置
posY = m_transform.position.y + ym;
//限制移动范围
posY = Mathf.Clamp(posY,-posYRange, posYRange);
//移动位置赋值
经典英语签名
m_transform.position =new Vector3(m_transform.position.x, posY, m_transform.position.z); }
void PosZRange()
{
posZ = m_transform.position.z + zm;
posZ = Mathf.Clamp(posZ,-posZRange, posZRange);
m_transform.position =new Vector3(m_transform.position.x, m_transform.position.y,posZ); }
#endregion
2、旋转:
82届奥斯卡
** 为避免⽅向键的Horizontal和AD、Vertical和WS冲突,在Edit-Input中取消关联**
#region按键控制旋转
void KeyToRotate()
{
//⽅向键左右,控制左右旋转
//if (Input.GetAxis("Horizontal") != 0)
/
/{
//    m_transform.Rotate(0,Input.GetAxis("Horizontal")*m_objRotateSpeed*Time.deltaTime,0);
//}
if(Input.GetKey(KeyCode.A))
{
m_transform.Rotate(Vector3.up,-horizontalRotate);
}
if(Input.GetKey(KeyCode.D))
{
m_transform.Rotate(Vector3.up, horizontalRotate);
}
/
/⽅向键上下,控制上下的旋转(俯仰)
//if (Input.GetAxis("Vertical") != 0)
//{
//    m_transform.Rotate(Input.GetAxis("Vertical") * m_objRotateSpeed, 0, 0);
//}
}
#endregion
3、相机跟随⿏标旋转 :
#region相机跟随⿏标旋转
void CameraRotate_Mou()
{
留学diy
if(Input.GetMouButton(0))
{
//获取⿏标移动距离
float rh = Input.GetAxis("Mou X");
float rv = Input.GetAxis("Mou Y");
// 旋转摄像机
m_camRot.x -= rv * m_rotateSpeed;
m_camRot.y += rh * m_rotateSpeed;
}
m_camTransform.eulerAngles = m_camRot;
// 使主⾓的⾯向⽅向与摄像机⼀致
/
/Vector3 camrot = m_camTransform.eulerAngles;
//camrot.x = 0; camrot.z = 0;
//m_transform.eulerAngles = camrot;
}
#endregion
4、因为属于按键实时操作,所有在Update函数中调⽤。
private void Update()
{
KeyToMove();
KeyToRotate();jellybelly
CameraRotate_Mou();
}

本文发布于:2023-05-14 13:50:04,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/627952.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:按键   移动   控制   旋转
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图