c# - 将游戏对象缓慢移动到鼠标位置

标签 c# unity3d

我想将对象的位置更改为鼠标的位置,从第一个位置缓慢移动到第二个位置。

我的物体正在缓慢地向随机方向移动,似乎与左下角相连。当我高于角落时,我的物体向上移动,左右相同。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rocket : MonoBehaviour
{
    public float speed = 10f;

    private Vector3 shippos;

    void Start()
    {
        shippos = transform.position;
    }

    void FixedUpdate()
    {
        if (Input.mousePosition.x > shippos.x)
            shippos.x=shippos.x+speed*Time.deltaTime;
        if (Input.mousePosition.x < shippos.x)
            shippos.x=shippos.x-speed*Time.deltaTime;
        if (Input.mousePosition.y > shippos.y)
            shippos.y=shippos.y+speed*Time.deltaTime;
        if (Input.mousePosition.y < shippos.y)
            shippos.y=shippos.y-speed*Time.deltaTime;
        transform.position = shippos;
    }
}

最佳答案

鼠标位置以屏幕空间坐标返回。您需要做的是将其转换为世界坐标,以便在与变换 (shippos) 相同的坐标空间中比较它们。

void FixedUpdate()
{
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).x > shippos.x)
        shippos.x = shippos.x + speed * Time.deltaTime;
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).x < shippos.x)
        shippos.x = shippos.x - speed * Time.deltaTime;
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).y > shippos.y)
        shippos.y = shippos.y + speed * Time.deltaTime;
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).y < shippos.y)
        shippos.y = shippos.y - speed * Time.deltaTime;
    transform.position = shippos;
}

关于c# - 将游戏对象缓慢移动到鼠标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46078829/

相关文章:

C# WinForms TreeView 去除水平滚动条

c# - 如何将 List<string> 字段合并到 GroupBy() 中

c# - UnityWebRequest 和/或 HttpWebRequest 在 Android 上使用 PUT 给出 403

c# - Unity 中的游戏逻辑编程

C# - 我需要 list 文件吗?

c# - 绑定(bind)进度条可见性 mvvm 不起作用

c# - 如何正确关闭在线程中打开的 TcpClient

unity3d - Unity相机不动

c# - Unity 处理多个具有不同目的的碰撞器

c# - 围绕物体旋转到其速度方向