Unity3d 立方体不会在鼠标单击时旋转
这段代码工作并旋转立方体Unity3d 立方体不会在鼠标单击时旋转,unity3d,Unity3d,这段代码工作并旋转立方体 public float Speed; void Update() { transform.Rotate(Vector3.up * Speed * Time.deltaTime); } 但这不起作用: 我试着用鼠标左键向左旋转, 并在鼠标右键单击时向右旋转。仅单击片刻,不按住: public float Speed; void Update() { if (Input.GetMouseButtonDown(0)) // left mouse cli
public float Speed;
void Update()
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
但这不起作用:我试着用鼠标左键向左旋转, 并在鼠标右键单击时向右旋转。仅单击片刻,不按住:
public float Speed;
void Update()
{
if (Input.GetMouseButtonDown(0)) // left mouse clicked.
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
else if (Input.GetMouseButtonDown(1)) // right mouse clicked.
{
transform.Rotate(Vector3.down * Speed * Time.deltaTime);
}
}
我怎样才能解决这个问题
注:我已附上脚本,
它的速度是250。
谢谢。
GetMouseButtonDown
在按下按钮的帧中执行一次。这同样适用于GetMouseButtonUp
,您正在查找Input.GetMouseButton
,当按下按钮时,每个帧返回true
因此,每次按下按钮时都会执行代码,然后需要释放它才能再次工作
public float Speed;
void Update()
{
if (Input.GetMouseButton(0)) // sol mouse tıklandı
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
else if (Input.GetMouseButton(1)) // sağ mouse tıkladı
{
transform.Rotate(Vector3.down * Speed * Time.deltaTime);
}
}
要自己调试这些问题,您可以放置
debug.Log(“Works?”)
来检查代码是否达到给定的点,或者连接调试器使用Input.GetMouseButton(0)
而不是Input.GetMouseButtonDown(0)
。对于你的代码,每次点击它都会旋转,但是如果速度不够快,你甚至不会注意到。使用输入。GetMouseButton(0)
按下按钮时,立方体将旋转。最好的方法是,单击或检查,然后以固定的圈数运行几秒钟/a循环,或者检查是否按住鼠标按钮。好的,我发现了一些问题:
public float Speed;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
else if (Input.GetMouseButtonDown(1))
{
transform.Rotate(Vector3.down * Speed * Time.deltaTime);
}
}
这将以固定的数量旋转对象。当您按下鼠标按钮0或1时
public float Speed;
void Update()
{
if (Input.GetMouseButton(0))
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
else if (Input.GetMouseButton(1))
{
transform.Rotate(Vector3.down * Speed * Time.deltaTime);
}
}
按下鼠标按钮时,这将(如怀疑的那样)旋转对象。我的朋友已经解决了这个问题:
public class Rotator2 : MonoBehaviour
{
bool Forward = true;
public float Speed;
void Start()
{
Forward = true;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Forward = true;
}
if (Input.GetMouseButtonDown(1))
{
Forward = false;
}
transform.Rotate(Vector3.up, (Forward ? 1 : -1) * Speed * Time.deltaTime);
}
}
使用enum而不是bool时的代码相同:
enum Direction
{
None,
Forward,
Backward
}
public class Rotator2 : MonoBehaviour
{
Direction Direction = Direction.Forward;
public float Speed;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Direction = Direction.Forward;
}
if (Input.GetMouseButtonDown(1))
{
Direction = Direction.Backward;
}
transform.Rotate(Vector3.up, (Direction== Direction.Forward ? 1 : -1 ) * Speed * Time.deltaTime);
}
}
你确实意识到你需要在你的代码中进行无数次的点击来旋转它,因为每次点击只旋转1帧,而deltatime的数字就像1个原子?你的速度是多少?还要检查它何时被按下,何时不被按下clicked@Jadon沃尔夫冈250。检查你的速度是否不是0。因为它对我有用!此外,检查您是否正在使用新的Unity输入系统速度为250。我不知道新的统一输入系统是什么。我安装了版本2020.1.3F1,检查该类是否为MonoBehavior,是否连接到cube游戏对象,编辑器中的速度是否为0,是否足够高。例如,速度是250。是的,我已附加。请使用其他输入键而不是鼠标进行检查。发生相同的情况吗?也应该在游戏窗口中单击。我将为您测试代码并返回。因为它应该有效。也许试着重新启动你的编辑器。非常感谢你,但你不必抽出时间,因为我要问我的Unity专家朋友。是的,ofc,我们都在这里学习,所以我可能也会从这次经历中学习!!!我明白了,好的。你重置了对象上的组件了吗?你确定你已经在对象上添加了脚本并且它是活动的吗?Asker不想按住按钮,所以实际上可能只按住按钮一到两帧。我计划只单击一次左键和右键。然后使用OnMouseButtonDown()。但是你是否保存了它,是否重置了它,是否删除并读取了它?试试这些东西,plzz。@JadonWolfgang,我只使用旋转代码时附加的。在那之后没有做任何新的事情。它起作用了。