我正在尝试使用Unity制作一个由键盘上的命令控制的“机器人手臂”。
我的设计非常简单:
我按照文档here中的建议选择在设计中使用“Articulations”。
当我按下播放按钮时,手臂会在重力的作用下下降并反弹:这是相当丑陋的,但这不是我目前关心的问题。
我想做的是**使用键盘上的按钮命令关节Angular **。
我在“手臂”上添加了一个脚本,尝试将手臂围绕肩关节向上移动。
如果我问:那是因为它不起作用。
我试着修改anchorRotation
的值,但似乎没有任何效果。
我甚至还没有尝试编写捕获用户键盘按下的代码,因为显然我还不能通过编程移动发音。
我相信这可能是一些“统一概念”,我没有掌握有关的发音。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shoulder : MonoBehaviour
{
public ArticulationBody shoulder;
// Start is called before the first frame update
void Start()
{
shoulder = GetComponent<ArticulationBody>();
}
// Update is called once per frame
void Update()
{
float tiltAngle = -25.0f;
// float smooth = 30.0f;
float tiltAroundZ = Input.GetAxis("Horizontal") * tiltAngle;
// float tiltAroundX = Input.GetAxis("Vertical") * tiltAngle;
// Rotate the cube by converting the angles into a quaternion.
Quaternion target = Quaternion.Euler(0, 0, tiltAroundZ);
shoulder.anchorRotation = target;
}
}
预先感谢你的帮助。
2条答案
按热度按时间w7t8yxp51#
据我所知,你总是在Update()方法中为你的对象设置相同的旋转,这就是为什么对象不移动的原因。
所以你至少有两个选择:
mwngjboj2#
基于Morion已经尝试解释的内容
当前您正在基于输入硬设置旋转。
因此,只要轴保持相同的值(例如,对于键盘
0
或1
),旋转将根据您的值硬捕捉到0
或25
。你更想做的是从当前旋转开始旋转你的对象,然后向它添加!
您可以使用例如
然而,这仍然旋转太快了!
您将以
25°
每帧的速度旋转对象!你更希望使用每秒旋转的速度
其中,
Time.deltaTime
是自上一帧以来经过的时间(秒),从而将值从value per frame
转换为value per second
。然后,如前所述,您可能会感兴趣的是,不直接应用旋转,但确实跟踪已经旋转的量,以便能够在以后夹紧它,例如。