2017-09-06 117 views
1

我想將對象的位置更改爲鼠標的位置,從第一個位置緩慢移動到第二個位置。慢慢地將遊戲對象移動到鼠標位置

我的對象正在緩慢移動到隨機方向,該方向似乎與左下角相連。當我高於角落時,我的物體向上移動,與左側和右側相同。

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; 
    } 
} 
+2

你似乎在問3個不同的問題。它也不完全清楚你在這三個中想要達到的目標。你能否編輯你的問題,以清楚你需要什麼幫助完成。 – ryeMoss

+0

@ryemoss編輯,也許現在更清楚? – sswwqqaa

回答

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; 
} 
+0

它工作正常!感謝有關屏幕空間到世界座標轉換的解釋。 – sswwqqaa

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. 
} 
+0

問題或OP的代碼沒有提及任何有關旋轉的東西(並且您的代碼不會移動任何遊戲對象) – UnholySheep

+0

我想慢慢移動它,而不是通過傳送到其他位置(我想要連續移動到鼠標方向) – sswwqqaa

0

我猜你是做錯了,因爲欺騙你們有Mathf.Lerp你不需要去爲笨拙的方式
下面是來自YouTube的視頻教程mathf.lerp


這裏是基本代碼:

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

只是來看看的Youtube鏈接,你會defini切實瞭解主意!

作爲一個側面說明
你不需要做的東西很多,以減少你的遊戲性能要小心這種編碼!

+0

Lerp會平滑移動物體,但會改變移動速度。 (對於小動作,速度會很小,對於更大的動作我們會看到巨大的變化)MoveTowards對我來說更好。但我的主要問題是關於ScreenToWorldPoint(Input.mousePosition.x)。那是我陷入困境的一點。 – sswwqqaa