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# - 如何根据另一个列表的元素和条件从一个列表中删除元素?

c# - (Unity) 使用 BuildPipeline 构建时启用 App Bundle (Google Play) 选项?

c# - Linq-按自定义顺序发出

c# - 尝试从字符串创建 Material - 不再支持

c# - 当我想更新值时拒绝访问注册表项

c# - 如何在统一C#中永远使当前场景静音

unity3d - 查找区域中的空白的函数,如果未找到任何错误,如何返回错误?

c# - 使用 C# 和 Unity 的字符串读取和解析性能

c# - 在 Unity 3D 中模拟 "Swipe to Unlock"

c# - VS 2015已导入具有相同标识的多个程序集