将一个2d对象移向Unity 4.3中的某个位置

时间:2013-12-08 18:31:10

标签: vector position unity3d 2d unityscript

试图让一个物体射向并通过一个给定的位置。就像朝向鼠标位置射击的子弹一样,我不希望它停在鼠标上(这就是现在发生的事情)。

以下是我到目前为止,有没有像lerp这样的函数可供我使用?

var speed:float;
var startPoint:Vector3;
var startTime:float;
var clickedPosition:Vector3;


function Start()
{    
     startPoint = transform.position;
    startTime = Time.time;
    clickedPosition = Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);
    clickedPosition = Camera.main.ScreenToWorldPoint(clickedPosition);  


}

function Update ()
{

 transform.position = Vector3.Lerp(startPoint, clickedPosition, (Time.time-startTime));

}

3 个答案:

答案 0 :(得分:1)

我建议使用刚体组件然后在方向上施加力(同时禁用重力)。

你现在拥有它的方式应该可以让它与

一起使用
var speed : float;

function Start()
{    
    speed = 1000.0f; // experiment with this, might be way too fast;

    ...
}

function Update()
{
    transform.position += (clickedPosition - startPoint) * speed * Time.deltaTime;
}

(clickedPosition - startPoint)应该为您提供移动对象的方向,Time.deltaTime为您提供自上次调用Update函数以来的毫秒数(您希望此处在此处,以便对象移动相同速度在不同的帧速率下)和速度只是调整速度的常数。

答案 1 :(得分:1)

    var speed:float;
var startPoint:Vector3;
var startTime:float;
var clickedPosition:Vector3;


function Start()
{    
     startPoint = transform.position;

}

function Update ()
{

    if(Input.GetKeyDown(KeyCode.Mouse0))
    {
        startTime = Time.time;
        clickedPosition = Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);
        clickedPosition = Camera.main.ScreenToWorldPoint(clickedPosition);  
    }
     transform.position = Vector3.Lerp(startPoint, clickedPosition, (Time.time-startTime));

}

答案 2 :(得分:1)

这很简单。您可以使用Vector3.Lerp函数来实现此目的。使用光线投射获取鼠标单击位置或触摸位置。然后使用lerp函数中的初始和最终位置。初始位置是游戏对象现在的位置,最终位置是点击/触摸位置。 你可以在这里找到相同的文章

Move to Touch / Click Position - The Game Contriver