Unity3d 为什么每当我停止单击时,我的计时器就不能在Unity上工作?
我正在进行一个Unity项目,我需要计算用户采取下一步行动所需的时间 游戏中的每个对象都是通过使用鼠标移动并拖动来移动的,因此每当用户停止拖动主要对象时,计时器就会启动,当用户再次拖动对象时,计时器就会停止 这是我的拖动和计时器脚本:Unity3d 为什么每当我停止单击时,我的计时器就不能在Unity上工作?,unity3d,Unity3d,我正在进行一个Unity项目,我需要计算用户采取下一步行动所需的时间 游戏中的每个对象都是通过使用鼠标移动并拖动来移动的,因此每当用户停止拖动主要对象时,计时器就会启动,当用户再次拖动对象时,计时器就会停止 这是我的拖动和计时器脚本: private float startPosX; private float startPosY; public bool isHeld; //private float distance = 10; private float s
private float startPosX;
private float startPosY;
public bool isHeld;
//private float distance = 10;
private float stopTime;
private void OnMouseDrag()
{
Vector2 mousePos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
Vector2 objectPos = Camera.main.ScreenToWorldPoint(mousePos);
transform.position = objectPos;
}
void Update()
{
if (isHeld) {
OnMouseDrag();
}
if (Input.GetMouseButtonUp(0))
{
isHeld = false;
Debug.Log(isHeld);
stopTime += Time.deltaTime;
string minutes = Mathf.Floor((stopTime % 3600) / 60).ToString("00");
string seconds = (stopTime % 60).ToString("00");
Debug.Log(minutes + ":" + seconds);
}
}
private void OnMouseOver()
{
if (Input.GetMouseButtonDown(0)) {
isHeld = true;
Debug.Log(isHeld);
}
}
}
My onMouseDrag()是用于拖动对象的实际函数,onMouseOver会检测鼠标是否确实在对象上方。
计时器由deltaTime给出,然后我使用字符串分和秒以更好的方式显示它,并查看它是否正常工作,但实际情况并非如此。我不知道为什么这不起作用,我需要一些帮助,因为我是unity和Codeing的新手。这里有一些事情会给您带来问题,或者会给您带来问题
Input.GetMouseButtonUp(0)
在Update()
中检测到按钮释放的帧上准确返回true
。也就是说,if(Input.GetMouseButtonUp(0))
中的代码只会在释放鼠标按钮的帧上执行一次。这就是为什么您没有看到从Debug.Log
打印的任何内容,或者当您看到时,它是不正确的分钟部分,使用模运算符%
在数学上是不正确的<代码>数学楼层(stopTime/60)。ToString(“00”)
将为您提供正确的分钟数
void Update()
{
if (Input.GetMouseButton(0)) {
isHeld = true;
}
else
{
isHeld = false;
Debug.Log(isHeld);
stopTime += Time.deltaTime;
string minutes = Mathf.Floor(stopTime / 60).ToString("00");
string seconds = (stopTime % 60).ToString("00");
Debug.Log(minutes + ":" + seconds);
}
}
private void OnMouseOver()
{
if (isHeld) {
Debug.Log(isHeld);
OnMouseDrag();
}
}
这里有几件事会给你带来麻烦,或者会给你带来麻烦
Input.GetMouseButtonUp(0)
在Update()
中检测到按钮释放的帧上准确返回true
。也就是说,if(Input.GetMouseButtonUp(0))
中的代码只会在释放鼠标按钮的帧上执行一次。这就是为什么您没有看到从Debug.Log
打印的任何内容,或者当您看到时,它是不正确的分钟部分,使用模运算符%
在数学上是不正确的<代码>数学楼层(stopTime/60)。ToString(“00”)
将为您提供正确的分钟数
void Update()
{
if (Input.GetMouseButton(0)) {
isHeld = true;
}
else
{
isHeld = false;
Debug.Log(isHeld);
stopTime += Time.deltaTime;
string minutes = Mathf.Floor(stopTime / 60).ToString("00");
string seconds = (stopTime % 60).ToString("00");
Debug.Log(minutes + ":" + seconds);
}
}
private void OnMouseOver()
{
if (isHeld) {
Debug.Log(isHeld);
OnMouseDrag();
}
}
您需要阅读
Input
类的文档,特别是您正在检查的GetMouseButtonUp
函数:
在用户释放给定鼠标的帧期间返回true
按钮
您需要从Update
函数调用此函数,因为
每帧重置一个状态。只有在用户
已按下鼠标按钮并再次将其释放。按钮值为
0
用于左按钮,1
用于右按钮,2
用于中间按钮
您可能误解了该函数的作用
这会在每次单击或发布时记录一条消息:
void Update() {
if (Input.GetMouseButtonDown(0)) {
Debug.Log("once per click: mouse button clicked");
}
if (Input.GetMouseButtonUp(0)) {
Debug.Log("once per click: mouse button released");
}
}
每帧记录一条消息:
void Update() {
if (Input.GetMouseButton(0)) {
Debug.Log("once per frame: mouse button held");
} else {
Debug.Log("once per frame: mouse button NOT held");
}
}
这取决于您是希望每次单击/释放一次还是每帧发生一次。您需要阅读
输入类的文档,特别是您正在检查的GetMouseButtonUp
函数:
在用户释放给定鼠标的帧期间返回true
按钮
您需要从Update
函数调用此函数,因为
每帧重置一个状态。只有在用户
已按下鼠标按钮并再次将其释放。按钮值为
0
用于左按钮,1
用于右按钮,2
用于中间按钮
您可能误解了该函数的作用
这会在每次单击或发布时记录一条消息:
void Update() {
if (Input.GetMouseButtonDown(0)) {
Debug.Log("once per click: mouse button clicked");
}
if (Input.GetMouseButtonUp(0)) {
Debug.Log("once per click: mouse button released");
}
}
每帧记录一条消息:
void Update() {
if (Input.GetMouseButton(0)) {
Debug.Log("once per frame: mouse button held");
} else {
Debug.Log("once per frame: mouse button NOT held");
}
}
这取决于您是希望每次单击/发布一次,还是每帧发生一次。谢谢,这对我帮助很大!!谢谢,这对我帮助很大!!非常感谢这真的帮助我改进了我的代码并解决了我的问题!非常感谢这真的帮助我改进了我的代码并解决了我的问题!