Unity对象位置

时间:2018-10-13 09:37:20

标签: c# android visual-studio unity3d touch

我在代码中发现了一个缺陷,我看到只有第一个球的位置受到监视,再次滑动时,我需要从球的起始位置滑动。我该如何修理它,以便在球移动后能从其所在位置刷卡?谢谢!代码在这里:

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);
    }
}

1 个答案:

答案 0 :(得分:2)

OnMouseDown仅在指针位于碰撞体上方时被调用,而GetMouseButtonUp被全局地从碰撞体中独立调用。这意味着您可能使用错误的坐标来调用LaunchBall(),因为startpos可能设置不正确。

只是一个怀疑,但您甚至可能根本没有碰到对撞机和OnMouseDown,而是从0,0,0开始,startposstartpose的默认值(如果未设置为其他值)

在您看来,您总是必须从头一个startpose开始刷卡,但是isLaunching实际上可能根本不会被更改。

为避免这种情况,我将使用简单的标志Update

此外,我不会使用OnMouseDown,而是使用OnMouseUp。与OnMouseUp不同,Update会被调用,即使鼠标不在对撞机上也是如此,基本上它会执行相同的操作,但是不会重复运行bool isLaunching; // instead of your Update void OnMouseUp() { // makes sure you can only launch after updating startpos if(!isLaunching) return; endpos = Camera.main.ScreenToWorldPoint(Input.mousePosition); LaunchBall(); isLaunching = false; } void OnMouseDown() { startpos = Camera.main.ScreenToWorldPoint(Input.mousePosition); isLaunching = true; } 方法。

OnMouseDown

如果现在什么也没发生,那么您根本不知道startActivity(new Intent(this, Class.forName(getPackageManager().getApplicationInfo(getPackageName(), 128).metaData.getString("com.sadaf.javafiles.MAIN_ACTIVITY_CLASS_NAME")))); ,您可能会错过对撞机。