c# - 统一二维 : How to collide with side of screen

标签 c# android unity3d collider

我目前在 Android 的 2D 游戏中工作。我的场景中有一个玩家,如果用户倾斜他的设备,玩家对象就会在地面上移动。但他只是从左侧和右侧移出屏幕。我试图做一堵“墙”,但没有成功。在我的玩家游戏对象处有一个边缘碰撞器。现在我的问题是:我的玩家游戏对象如何与屏幕的一侧发生碰撞?

这是我的代码:

public GameObject player;
    
    
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        Vector3 dir = Vector3.zero;
        dir.y = Input.acceleration.x;

        player.transform.Translate(new Vector2(dir.y, 0) * Time.deltaTime * 2000f);  

    }

非常感谢! :)

七月

编辑:

图 1 是我的墙,图 2 是我的播放器。

我试图用屏幕一侧的墙来解决这个问题。这些是 This is the image of my players inspector. Did I add the right things? 的图片

This is the inspector of my player.


已解决

解决方案代码:

Vector3 position = player.transform.position;
        translation = Input.acceleration.x * movementSpeed * 50f;

        if (player.transform.position.x + translation < LeftlimitScreen)
        {
            position.x = -LeftlimitScreen;
        } 
        else if(transform.position.x + translation > RightlimitScreen)
        {
            position.x = RightlimitScreen;
        }
        else
        {
            position.x += translation;
            player.transform.position = position;
        }

这段代码对我有用! :)

最佳答案

这将在屏幕周围生成边缘碰撞器(对于 2d):

void GenerateCollidersAcrossScreen()
    {
     Vector2 lDCorner = camera.ViewportToWorldPoint(new Vector3(0, 0f, camera.nearClipPlane));
     Vector2 rUCorner = camera.ViewportToWorldPoint(new Vector3(1f, 1f, camera.nearClipPlane));
     Vector2[] colliderpoints;

    EdgeCollider2D upperEdge = new GameObject("upperEdge").AddComponent<EdgeCollider2D>();
    colliderpoints = upperEdge.points;
    colliderpoints[0] = new Vector2(lDCorner.x, rUCorner.y);
    colliderpoints[1] = new Vector2(rUCorner.x, rUCorner.y);
    upperEdge.points = colliderpoints;

    EdgeCollider2D lowerEdge = new GameObject("lowerEdge").AddComponent<EdgeCollider2D>();
    colliderpoints = lowerEdge.points;
    colliderpoints[0] = new Vector2(lDCorner.x, lDCorner.y);
    colliderpoints[1] = new Vector2(rUCorner.x, lDCorner.y);
    lowerEdge.points = colliderpoints;

    EdgeCollider2D leftEdge = new GameObject("leftEdge").AddComponent<EdgeCollider2D>();
    colliderpoints = leftEdge.points;
    colliderpoints[0] = new Vector2(lDCorner.x, lDCorner.y);
    colliderpoints[1] = new Vector2(lDCorner.x, rUCorner.y);
    leftEdge.points = colliderpoints;

    EdgeCollider2D rightEdge = new GameObject("rightEdge").AddComponent<EdgeCollider2D>();

    colliderpoints = rightEdge.points;
    colliderpoints[0] = new Vector2(rUCorner.x, rUCorner.y);
    colliderpoints[1] = new Vector2(rUCorner.x, lDCorner.y);
    rightEdge.points = colliderpoints;
}

关于c# - 统一二维 : How to collide with side of screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50445982/

相关文章:

c# - 如何存储和序列化列表以避免长字符串

animation - 在不重置 Animator 的情况下设置 Unity3D AnimationClip 属性

c# - 将字符串转换为可为空的日期时间

c# - 可空属性与可空局部变量

c# - 在服务器上读写excel文件

c# - WPF View-ModelView 绑定(bind)需要帮助请

android - Flutter 如何平滑地为标记设置动画?

java - 将 Android 应用程序从我的手机复制到我的电脑

javascript - 反转状态栏cordova的图标颜色

c# - 当我在 Unity 中输入立方体时尝试加载新场景