Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一对象位置_C#_Android_Visual Studio_Unity3d_Touch - Fatal编程技术网

C# 统一对象位置

C# 统一对象位置,c#,android,visual-studio,unity3d,touch,C#,Android,Visual Studio,Unity3d,Touch,我在我的代码中发现了一个缺陷,我发现只有我的第一个球位置被监控,当我再次刷球时,我需要从球的起始位置刷球。我如何修复它,以便在球移动后可以从球所在的位置滑动?非常感谢。代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; public class SwipeUnlimited : MonoBehaviour { Rigidbody2D rbody; Vector

我在我的代码中发现了一个缺陷,我发现只有我的第一个球位置被监控,当我再次刷球时,我需要从球的起始位置刷球。我如何修复它,以便在球移动后可以从球所在的位置滑动?非常感谢。代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SwipeUnlimited : MonoBehaviour 
{
    Rigidbody2D rbody;
    Vector2 startpos;
    Vector2 endpos;
    float power = 5f; // power of shot


    // Use this for initialization
    void Start() 
    {    
        rbody = GetComponent<Rigidbody2D>();    
    }

    // Update is called once per frame
    void Update() 
    {                
        if (Input.GetMouseButtonUp(0))
        {
            endpos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            LaunchBall();
        }
    }

    void OnMouseDown()
    {
        startpos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }

    void LaunchBall()
    {
        Vector2 direction = (startpos - endpos); // swap subtraction to switch direction of launch
        rbody.AddForce(direction * power, ForceMode2D.Impulse);
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类SwipeUnlimited:单行为
{
刚体2d-rbody;
Vector2 startpos;
向量2末端位置;
浮动功率=5f;//放炮功率
//用于初始化
void Start()
{    
rbody=GetComponent();
}
//每帧调用一次更新
无效更新()
{                
if(Input.GetMouseButtonUp(0))
{
endpos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
发射球();
}
}
void OnMouseDown()
{
startpos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
无效启动球()
{
Vector2方向=(startpos-endpos);//交换减法以切换启动方向
rbody.AddForce(方向*功率,力模式2D.脉冲);
}
}
仅在指针位于碰撞器上方时调用,而
GetMouseButtonUp
被称为全局独立于碰撞器。这意味着您可能使用错误的坐标调用
LaunchBall()
,因为
startpos
可能设置不正确

只是一个怀疑,但您甚至可能根本没有调用碰撞器和
OnMouseDown
,而是从
0,0,0
开始,如果未设置为其他值,这是
startpos
的默认值

因此,在您看来,您必须始终从第一个
startpose
开始刷卡,但是
startpose
实际上可能永远不会更改

为了避免这种情况,我将使用一个简单的标志
isLaunching

另外,我不会使用
Update
,而是使用。与
OnMouseDown
不同,即使鼠标不在碰撞器上,也会调用
onmousedup
,因此基本上它会执行相同的操作,但不会重复运行
Update
方法

bool-isLaunching;
//而不是你的更新
void OnMouseUp()
{
//确保您只能在更新startpos后启动
如果(!isLaunching)返回;
endpos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
发射球();
isLaunching=false;
}
void OnMouseDown()
{
startpos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
isLaunching=true;
}
如果现在什么也没有发生,那么您就知道根本不会调用
OnMouseDown
,您可能缺少一个碰撞器。

仅当指针位于碰撞器上时才会调用,而
GetMouseButtonUp
则从碰撞器全局独立调用。这意味着您可能使用错误的坐标调用
LaunchBall()
,因为
startpos
可能设置不正确

只是一个怀疑,但您甚至可能根本没有调用碰撞器和
OnMouseDown
,而是从
0,0,0
开始,如果未设置为其他值,这是
startpos
的默认值

因此,在您看来,您必须始终从第一个
startpose
开始刷卡,但是
startpose
实际上可能永远不会更改

为了避免这种情况,我将使用一个简单的标志
isLaunching

另外,我不会使用
Update
,而是使用。与
OnMouseDown
不同,即使鼠标不在碰撞器上,也会调用
onmousedup
,因此基本上它会执行相同的操作,但不会重复运行
Update
方法

bool-isLaunching;
//而不是你的更新
void OnMouseUp()
{
//确保您只能在更新startpos后启动
如果(!isLaunching)返回;
endpos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
发射球();
isLaunching=false;
}
void OnMouseDown()
{
startpos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
isLaunching=true;
}

如果现在什么也没有发生,您就会知道,
OnMouseDown
根本没有被调用,您可能缺少一个碰撞器。

能否在
LaunchBall
方法中设置一个断点,以查看第二次刷卡时
startpos
endpos
的值是多少?当你从另一个位置刷卡时,会发生什么情况?@MartinZikmund我会说,如果他从另一个位置刷卡,那么不会调用
OnMouseDown
,因此
startpos
不会更新,但仍然是第一个位置的刷卡。由于
OnMouseDown
仅在指针位于碰撞器上方时调用,而
GetMouseButtonUp
被全局独立于碰撞调用,因此您是否可以在
LaunchBall
方法中设置断点,以查看第二次滑动期间
startpos
endpos
的值?当你从另一个位置刷卡时,会发生什么情况?@MartinZikmund我会说,如果他从另一个位置刷卡,那么不会调用
OnMouseDown
,因此
startpos
不会更新,但仍然是第一个位置的刷卡。因为只有当指针位于碰撞器上方时才会调用
OnMouseDown
,而
GetMouseButtonUp
被称为全局独立于碰撞器