【问题标题】:How to touch to move with finger in Unity3DUnity3D中如何用手指触摸移动
【发布时间】:2016-10-04 22:32:03
【问题描述】:

我想通过移动设备的触摸来移动我的游戏对象,就像玩家可以触摸屏幕上的任何位置并移动他/她的手指,游戏对象将随之移动,而不是移动触摸位置。

这是我目前的脚本

void Update () {

    if (Input.touchCount > 0)
    {
        Touch _touch = Input.GetTouch(0); // screen has been touched, store the touch 

        if( _touch.phase == TouchPhase.Moved) // finger moved 
        {
            //offset = Camera.main.ScreenToWorldPoint(new Vector3(_touch.position.x, _touch.position.y, theplayer.transform.position.z)) - theplayer.transform.position; 

            touchPos = Camera.main.ScreenToWorldPoint(new Vector3(_touch.position.x, _touch.position.y, theplayer.transform.position.z));

            theplayer.transform.position = Vector2.Lerp(theplayer.transform.position, touchPos, Time.deltaTime*5f);

        }
        else if(_touch.phase == TouchPhase.Ended){
            touchPos = Vector3.zero;
            offset = Vector3.zero;
        }

    }

} // end

脚本几乎可以运行,但问题是当我触摸屏幕时,游戏对象会移动到手指下方,所以我看不到游戏对象。我不想要这个我想触摸屏幕上的任何地方并用手指移动而不是移动到手指位置。

谢谢。

【问题讨论】:

    标签: unity3d unityscript unity5


    【解决方案1】:

    我自己解决了问题,这里是解决方案代码。

    // Update is called once per frame
        void Update () {
    
            if (Input.touchCount > 0)
            {
                 _touch = Input.GetTouch(0); // screen has been touched, store the touch 
    
                if(_touch.phase == TouchPhase.Began){
                    isDragging = true;
    
                    offset = Camera.main.ScreenToWorldPoint(new Vector2(_touch.position.x, _touch.position.y)) - theplayer.transform.position;
    
                }
                else if(_touch.phase == TouchPhase.Ended){
                    offset = Vector2.zero;
                    isDragging = false;
                }
    
            }
    
            if(isDragging){
                Vector2 _dir = Camera.main.ScreenToWorldPoint(new Vector2(_touch.position.x, _touch.position.y));
                _dir = _dir - offset;
    
                theplayer.transform.position = Vector2.Lerp(theplayer.transform.position, _dir, Time.deltaTime * speed);
    
            }
    
    
        } // end 
    

    【讨论】:

    • 这不是完整的脚本,你必须声明一些变量,比如速度,isDragging (bool 类型)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多