Unity Android 2D运动问题

阿莫斯

我想创建一个游戏,在其中可以左右移动盒子以避免掉落盒子,并且它可以工作,但是问题是当我将手指放在一个位置时,玩家盒子就会左右晃动。您可以在此gif http://gfycat.com/FragrantBrokenEyas上看到它这是C#脚本的代码

using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour {
private Camera m_cam;
private float m_offsetRight = 1.0F;
private float m_offsetLeft = 0.0F;


void Awake() {
    m_cam = Camera.main;
}


void Update () {
    rigidbody2D.velocity = new Vector2(0 * 10, 0);
    Move ();
}


void Move () {
    if (Application.platform == RuntimePlatform.Android) {
        Vector3 player_pos = m_cam.WorldToViewportPoint(rigidbody2D.position);
        Vector3 touch_pos = new Vector3(Input.GetTouch(0).position.x, 0, 0);

        touch_pos = Camera.main.ScreenToViewportPoint(touch_pos);

        if(touch_pos.x > player_pos.x)
            rigidbody2D.velocity = new Vector2(1 * 10, 0);
        else if (touch_pos.x < player_pos.x)
            rigidbody2D.velocity = new Vector2(-1 * 10, 0);
    }
    else{       
        Vector3 player_pos = m_cam.WorldToViewportPoint(rigidbody2D.position);
        float h = Input.GetAxis ("Horizontal");

        if (h > 0 && player_pos.x < m_offsetRight)
            rigidbody2D.velocity = new Vector2(h * 10, 0);
        else if (h < 0 && player_pos.x > m_offsetLeft)
            rigidbody2D.velocity = new Vector2(h * 10, 0);
        else 
            rigidbody2D.velocity = new Vector2(0, rigidbody2D.velocity.y);
    }
}


void OnTriggerEnter2D(Collider2D other) {
    if (other.gameObject.name == "Enemy(Clone)") {
        Destroy(other.gameObject);
        GameSetUp.score -= 2;
    } else if (other.gameObject.name == "Coin(Clone)") {
        GameSetUp.score += 2;
        Destroy(other.gameObject);
    }
}

}

我认为问题出在这里:

touch_pos = Camera.main.ScreenToViewportPoint(touch_pos);

        if(touch_pos.x > player_pos.x)
            rigidbody2D.velocity = new Vector2(1 * 10, 0);
        else if (touch_pos.x < player_pos.x)
            rigidbody2D.velocity = new Vector2(-1 * 10, 0);
马祖

该“一个位置”可能是触摸的x坐标与播放器框的x坐标大致相同的位置。

当手指按下该区域时,在第一帧上touch_pos.x > player_pos.x为真,速度设置为正。在下一帧上,播放器已朝正方向移动,这次touch_pos.x < player_pos.x是真实的,速度设置为负。这导致震动效果。

为了避免这种情况,您可以例如缓慢地增加和减少速度,而不是在一帧中完全将其更改为相反的速度。您可以通过将代码更改为此:

    touch_pos = Camera.main.ScreenToViewportPoint(touch_pos);

    const float acceleration = 60.0f;
    const float maxSpeed = 10.0f;

    if(touch_pos.x > player_pos.x)
        if(rigidbody2D.velocity.x < maxSpeed)
            rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x + acceleration * Time.deltaTime, 0);
        else
            rigidbody2D.velocity = new Vector2(maxSpeed, 0);
    else if (touch_pos.x < player_pos.x)
        if(rigidbody2D.velocity.x > -maxSpeed)
            rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x - acceleration * Time.deltaTime , 0);
        else
            rigidbody2D.velocity = new Vector2(-maxSpeed, 0);

只需将其调整为acceleration看起来正确的值即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Unity 2D Top Down Shooter运动问题C#

来自分类Dev

Unity3D运动问题(基于网格的寻路)

来自分类Dev

android 端口的 Unity 问题

来自分类Dev

Unity 2D可拖动运动控制

来自分类Dev

Unity 2D可拖动运动控制

来自分类Dev

Unity 2D Android Limit GameObject水平转换

来自分类Dev

Unity Android触摸控件不起作用-2D

来自分类Dev

使用 UNITY 游戏引擎开发 Android 2D 游戏

来自分类Dev

如何使用AddForce平滑Unity 4.3 2D中的运动?

来自分类Dev

Unity3D角色连续移动问题

来自分类Dev

Unity3D 中的触摸和滑动问题

来自分类Dev

Unity-Android Java JAR包含问题

来自分类Dev

Android 设备上的 Unity 阴影问题

来自分类Dev

网络问题 Unity 游戏在 Android 9.0 版本

来自分类Dev

Unity3D Fixed TimeStep-Android FPS问题

来自分类Dev

Unity3D Fixed TimeStep-Android FPS问题

来自分类Dev

Unity 2D Android-将对象限制在屏幕内

来自分类Dev

具有触摸位置Android的Unity 2D对象位置

来自分类Dev

Unity 2D重生实例化问题

来自分类Dev

Unity 2D游戏射击目标问题

来自分类Dev

(Unity + 2D)更改UI按钮位置问题

来自分类Dev

不同敌人问题的 Unity 2D 相同状态

来自分类Dev

Unity3D Android开发

来自分类Dev

Unity 2D Physical Material 2D问题反弹

来自分类Dev

指向和点击运动的动画[Unity2D]

来自分类Dev

奇怪的运动行为Unity2D C#

来自分类Dev

从Unity构建Android游戏时遇到问题

来自分类Dev

我正在使用Unity还是Unity 2D?

来自分类Dev

我正在使用Unity还是Unity 2D?