试图让一个物体射向并通过一个给定的位置。就像朝向鼠标位置射击的子弹一样,我不希望它停在鼠标上(这就是现在发生的事情)。
以下是我到目前为止,有没有像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));
}
答案 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函数中的初始和最终位置。初始位置是游戏对象现在的位置,最终位置是点击/触摸位置。 你可以在这里找到相同的文章