慢慢将游戏对象移动到鼠标位置

时间:2017-09-06 15:12:46

标签: 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;
    }
}

4 个答案:

答案 0 :(得分:3)

鼠标位置以屏幕空间坐标返回。你需要做的是将它转换为世界坐标,以便在与变换(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;
}

答案 1 :(得分:0)

如果我没有误解,你想把你的玩家的位置直接改变到鼠标的位置并朝向鼠标。

void Update() {
    Transform target = mousePosition; //get your mouse position per frame
    Vector3 relativePos = target.position - transform.position; //create a vector3 between them
    Quaternion rotation = Quaternion.LookRotation(relativePos); //then give a rotation your player towards this vector.
    transform.rotation = rotation; //and apply it.
}

答案 2 :(得分:0)

从这里采取:http://answers.unity3d.com/questions/633873/how-to-make-an-object-move-towards-the-mouse-point.html

    <bean id="date" class="java.util.Date"  scope="prototype"/>  

可能不准确C#,但你明白了。

答案 3 :(得分:0)

我猜你做错了,因为你有 Mathf.Lerp 你不需要像那种笨拙的方式去做 以下是youtube上针对 mathf.lerp

的视频教程


这是基本代码:

someValue = Mathf.Lerp(initialValue , finalValue , Time.deltaTime * smoothness);

只需看看youtube链接,您一定会明白这一点!

作为侧面说明
你不需要做很多东西来减少你的游戏性能!小心这种编码!