C# 将对象从屏幕的一侧移动到另一侧#

C# 将对象从屏幕的一侧移动到另一侧#,c#,unity3d,2d,sprite,C#,Unity3d,2d,Sprite,我有一个精灵播放器,它按照下面的代码移动 using UnityEngine; public class MovePlayer : MonoBehaviour { public Transform player; [SerializeField] private float speed = 10f; void OnMouseDrag() { if (!Player.lose) { Vector3 mousePos = Camera.main.ScreenToWorl

我有一个精灵播放器,它按照下面的代码移动

using UnityEngine;

public class MovePlayer : MonoBehaviour
{
public Transform player;
[SerializeField]
private float speed = 10f;

void OnMouseDrag()
{
    if (!Player.lose) { 
        Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        mousePos.x = mousePos.x > 4.0f ? 4.0f : mousePos.x;
        mousePos.x = mousePos.x < -0.38f ? -0.38f : mousePos.x;
        player.position = Vector2.MoveTowards(player.position, 
            new Vector2(mousePos.x, player.position.y),
            speed * Time.deltaTime);
}
}
}
使用UnityEngine;
公共类移动玩家:单一行为
{
公共转换播放器;
[序列化字段]
私人浮动速度=10f;
void OnMouseDrag()
{
如果(!Player.lose){
Vector3 mousePos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePos.x=mousePos.x>4.0f?4.0f:mousePos.x;
mousePos.x=mousePos.x<-0.38f?-0.38f:mousePos.x;
player.position=Vector2.向(player.position,
新矢量2(mousePos.x,player.position.y),
速度*Time.deltaTime);
}
}
}
这两排用于将玩家的移动锁定到两侧

mousePos.x = mousePos.x > 4.0f ? 4.0f : mousePos.x;
mousePos.x = mousePos.x < -0.38f ? -0.38f : mousePos.x;
mousePos.x=mousePos.x>4.0f?4.0f:mousePos.x;
mousePos.x=mousePos.x<-0.38f-0.38f:mousePos.x;

如果玩家的精灵出现在屏幕的左边,它会从右边出现,反之,我该怎么做呢

private bool mouseInScreenX { get =>
    Input.mousePosition.x < Screen.width &&
    Input.mousePosition.x > 0; 
}

private bool mouseInScreenY { get =>
    Input.mousePosition.y < Screen.height &&
    Input.mousePosition.y > 0; 
}

private void Update() {
    if (!mouseInScreenX) 
        Input.mousePosition.x = 0;
        
    if (!mouseInScreenY)
        Input.mousePosition.y = 0;
}
private bool鼠标屏幕{get=>
Input.mousePosition.x0;
}
私有布尔鼠标屏幕{get=>
Input.mousePosition.y0;
}
私有void更新(){
如果(!鼠标屏幕)
Input.mousePosition.x=0;
如果(!鼠标屏幕)
Input.mousePosition.y=0;
}
不是调试过的代码,但我认为它足够准确,可以给你一个想法。 您可以使用Screen静态类而不是硬编码值来检查您是否在屏幕内部。
如果需要维护拖动,可以将鼠标位置拖动到要拖动的实体。

我刚刚添加了以下代码:

if (player.position.x < -1)
            player.position = new Vector3(player.position.x + 10f, player.position.y, player.position.z);
        else if (player.position.x > 5)
            player.position = new Vector3(player.position.x - 10f, player.position.y, player.position.z);
if(player.position.x<-1)
player.position=新矢量3(player.position.x+10f,player.position.y,player.position.z);
否则如果(玩家位置x>5)
player.position=新矢量3(player.position.x-10f,player.position.y,player.position.z);
而不是这两行,它可以工作:

mousePos.x = mousePos.x > 4.0f ? 4.0f : mousePos.x;
mousePos.x = mousePos.x < -0.38f ? -0.38f : mousePos.x;
mousePos.x=mousePos.x>4.0f?4.0f:mousePos.x;
mousePos.x=mousePos.x<-0.38f-0.38f:mousePos.x;

谢谢,它真的很有效!