增刊按下C按钮时,我的精灵过快。它是一只狼,会像攻击一样刺痛。但它只是从一个地方到下一个地方,我认为我只是完全使用了错误的代码。我猜它必须用Rigidbody2D = new Vector2
做更多事情....但我不知道从那里去哪里。这就是我目前正在使用的内容。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class tulMoveMount : MonoBehaviour {
private Animator anim;
private Rigidbody2D rb;
private bool goRight = true;
private bool jump = false;
private bool idle = true;
public float lungeDistance;
public float lungeSpeed;
public float lungeHeight;
void Start ()
{
anim = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
}
void Update ()
{
HandleCommands ();
}
void HandleCommands()
{
if (!jump && goRight && Input.GetKeyDown (KeyCode.C)) {
idle = false;
jump = true;
anim.SetTrigger ("jump");
rb = transform.Translate (lungeSpeed + lungeDistance, lungeHeight, 0); // HERE
idle = true;
jump = false;
anim.SetTrigger ("idle");
}
if (!jump && !goRight && Input.GetKeyDown (KeyCode.C)) {
idle = false;
jump = true;
anim.SetTrigger ("jump");
rb = transform.Translate (lungeSpeed + -lungeDistance, lungeHeight, 0); // HERE
idle = true;
jump = false;
anim.SetTrigger ("idle");
}
}
}
答案 0 :(得分:1)
将翻译乘以Time.DeltaTime可以平滑多帧的移动,然后您只需调整Array 1
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Array 2
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
)
Arrays Difference
Array
(
[3] => 4
)
Arrays intersect
Array
(
[0] => 1
[1] => 2
[2] => 3
)
即可获得所需的速度。
lungeSpeed
答案 1 :(得分:1)
要获得从一个点到另一个点的平滑翻译,您可以在Lerp内使用Corouting。
在Lerp中,第一个参数是起始位置,第二个参数是目标。第三个参数是介于0和1之间的浮点数。如果它是0,则得到Lerp中的第一个参数。如果它是1,你得到第二个。如果两者之间的中间点为0.5,依此类推......
所以你需要做的是启动一个与fps速率无关的courutine,并将你的GameObject以一个恒定的速度移动,该速度由start-target和你想要移动的时间之间的距离定义从一个到另一个。
public class WolfMovement : MonoBehaviour {
Vector3 start;
Vector3 target;
float lungeSpeed = .8f;
float lungeDistance = 5;
private IEnumerator coroutine;
void Update () {
if(Input.GetKeyDown(KeyCode.M) )
{
start = transform.position;
target = new Vector3(transform.position.x + lungeDistance,transform.position.y , transform.position.z);
coroutine = MoveObject(start,target,lungeSpeed);
StartCoroutine(coroutine);
}
}
IEnumerator MoveObject (Vector3 start, Vector3 target, float speed){
float i = 0.0f;
float rate = 1.0f/speed;
while (i < 1.0) {
i += Time.deltaTime * rate;
transform.position = Vector3.Lerp(start, target, i);
yield return null;
}
}
}