Unity中的游戏对象(卡在屏幕边缘)

Posted

技术标签:

【中文标题】Unity中的游戏对象(卡在屏幕边缘)【英文标题】:GameObject (Stuck At Screen Edge) In Unity 【发布时间】:2021-10-12 08:27:22 【问题描述】:

经典的 Stacker 游戏,冰淇淋应该穿过屏幕。 它可以工作并移动对象,但有时它会像这样卡在屏幕的两侧

这里是代码

private float min_X = -2.48f, max_X = 2.48f;
private float move_Speed = 60f;
  void Start()
    
        GamePlayController.instance.currentBox = this;
        canMove =true;

        if (Random.Range(0, 2) > 0)
            move_Speed *= -1f;
        
       
    

 void MoveBox()

        if (canMove)
        
            Vector3 temp = transform.position;
            if (temp.x > max_X)
            
                move_Speed *= -1f;
            
            else if (temp.x < min_X)
            
                move_Speed *= -1f;
            

            temp.x += move_Speed * Time.deltaTime;

   


            transform.position = temp;
        
    

【问题讨论】:

【参考方案1】:

当它到达边缘时,您只需要翻转一次方向。目前,一旦它高于或低于最大值,您可以每帧来回翻转它,它永远不会回到范围内

这样的东西应该可以工作

private float min_X = -2.48f, max_X = 2.48f;
private float move_Speed = 60f;
private int direction = 1;
  void Start()
    
        GamePlayController.instance.currentBox = this;
        canMove =true;

        if (Random.Range(0, 2) > 0)
            direction *= -1f;
        
       
    
void MoveBox()

        if (canMove)
        
            Vector3 temp = transform.position;


            if (temp.x > max_X)
            
                direction = -1f;
            
            else if (temp.x < min_X)
            
                direction = 1f;
            

            temp.x += move_Speed * Time.deltaTime * direction;  


            transform.position = temp;
        
    

【讨论】:

只是累了,冰淇淋就呆在一个地方稍微动一下。我拥有的代码移动了我想要的方式,只是有时会卡在边缘 这就是我凌晨 1 点用手机接听的结果 :)。只需要将方向变量移动到类变量而不是本地变量,并使用您的随机值对其进行初始化。【参考方案2】:

好吧,我休息了一下,以你的方向想法作为思考点,并尝试了这个:

让它发出信号,它是否达到了最小或最大点,并使用该逻辑来决定移动的方式,它看起来就像一个魅力。

bool hitMax = true;
bool hitMin = true;
void MoveBox()

    if (canMove)
    
        Vector3 temp = transform.position;
        if (temp.x > max_X && hitMin == true)
        

            hitMax = true;
            hitMin = false;
            move_Speed *= -1f;
        
        else if (temp.x < min_X && hitMax == true)
        

            hitMin = true;
            hitMax = false;
            move_Speed *= -1f;
        

        temp.x += move_Speed * Time.deltaTime;

        print("++++++++++++++++++++++++++++++++++++");
        print("MAX" + hitMax);
        print("Min" + hitMin);


        transform.position = temp;
    

【讨论】:

以上是关于Unity中的游戏对象(卡在屏幕边缘)的主要内容,如果未能解决你的问题,请参考以下文章

为什么Unity中的滑块变为非交互式

游戏开发实战2D游戏摄像机镜头跟随,屏幕边缘限制镜头移动(使用Cinemachine组件)

游戏开发实战2D游戏摄像机镜头跟随,屏幕边缘限制镜头移动(使用Cinemachine组件)

Unity 中的移动世界规模?

出现Android键盘时Unity调整屏幕大小

100个 Unity实用技能 | Scene视图选择对象是否边缘高亮显示网格线