Unity3D中二维自上而下的点和点击移动和旋转
2D top-down point and click movement and rotation in Unity3D
我正在研究指向并点击汽车的移动,但我只能按住点击汽车才能移动。我想在单击任意点时移动汽车。我写了这段代码。也可以顺利旋转吗?因为车有打滑,转弯的时候突然转了,你能帮帮我吗?
void Update()
{
mousePosition = Input.mousePosition;
mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
marker.position = mousePosition;
if (Input.GetMouseButton(0))
{
moveToPosition = true;
}
else if (Input.GetMouseButtonUp(0))
{
moveToPosition = false;
SoundManagerScript.stopCarAudioSource.Play();
SoundManagerScript.loopEngineAudioSource.Stop();
}
if (moveToPosition)
{
direction = new Vector2(mousePosition.x - transform.position.x, mousePosition.y - transform.position.y);
transform.position = Vector2.Lerp(transform.position, mousePosition, moveSpeed);
if (Vector3.Distance(transform.position, mousePosition) < 100f)
{
moveToPosition = false;
}
transform.up = direction * moveSpeed;
}
}
目前您只有进入 OnMouseDrag
函数的代码,您使用的 Vector.Lerp
不正确。看起来 here 但长话短说,lerp 需要通过 Update
或 IEnumerable
.
不断更新
举一个非常简单的例子,我建议尝试这样的事情;
//get your click to register to this function
void OnMouseClick()
{
moveToPosition = true;
mousePosition = Input.mousePosition;
mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
}
void Update()
{
if(moveToPosition)
{
increase += Time.deltaTime;
direction = new Vector2(mousePosition.x - transform.position.x, mousePosition.y - transform.position.y);
transform.position = Vector2.Lerp(transform.position, mousePosition, moveSpeed);
Vector3 newDir = Vector3.RotateTowards(transform.forward, direction, step, 0.0F);
transform.rotation = Quaternion.LookRotation(newDir);
if(Vector3.Distance(transform.position, mousePosition) < 5f)
{
moveToPosition = false;
}
}
}
它未经测试,但足够基本,可以让您继续看到移动的东西。
我正在研究指向并点击汽车的移动,但我只能按住点击汽车才能移动。我想在单击任意点时移动汽车。我写了这段代码。也可以顺利旋转吗?因为车有打滑,转弯的时候突然转了,你能帮帮我吗?
void Update()
{
mousePosition = Input.mousePosition;
mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
marker.position = mousePosition;
if (Input.GetMouseButton(0))
{
moveToPosition = true;
}
else if (Input.GetMouseButtonUp(0))
{
moveToPosition = false;
SoundManagerScript.stopCarAudioSource.Play();
SoundManagerScript.loopEngineAudioSource.Stop();
}
if (moveToPosition)
{
direction = new Vector2(mousePosition.x - transform.position.x, mousePosition.y - transform.position.y);
transform.position = Vector2.Lerp(transform.position, mousePosition, moveSpeed);
if (Vector3.Distance(transform.position, mousePosition) < 100f)
{
moveToPosition = false;
}
transform.up = direction * moveSpeed;
}
}
目前您只有进入 OnMouseDrag
函数的代码,您使用的 Vector.Lerp
不正确。看起来 here 但长话短说,lerp 需要通过 Update
或 IEnumerable
.
举一个非常简单的例子,我建议尝试这样的事情;
//get your click to register to this function
void OnMouseClick()
{
moveToPosition = true;
mousePosition = Input.mousePosition;
mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
}
void Update()
{
if(moveToPosition)
{
increase += Time.deltaTime;
direction = new Vector2(mousePosition.x - transform.position.x, mousePosition.y - transform.position.y);
transform.position = Vector2.Lerp(transform.position, mousePosition, moveSpeed);
Vector3 newDir = Vector3.RotateTowards(transform.forward, direction, step, 0.0F);
transform.rotation = Quaternion.LookRotation(newDir);
if(Vector3.Distance(transform.position, mousePosition) < 5f)
{
moveToPosition = false;
}
}
}
它未经测试,但足够基本,可以让您继续看到移动的东西。