我想为我的玩家游戏对象制作一个转移码 但这没用。我不知道为什么,但是我认为“ Lerp”部分可能有问题。有什么问题吗?
public class Player_Ctrl : MonoBehaviour
{
public float movespeed = 3.0f;
private void Update ()
{
Vector3 PlayerPos = transform.position;
Vector3 NextPos = transform.position;
if (Input.touchCount != 1) return;
float ChangingPos = this.transform.position.x * movespeed;
NextPos.x = ChangingPos;
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Stationary)
{
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
RaycastHit hit;
if (!Physics.Raycast(ray, out hit)) return;
if (hit.collider.tag == "LEFTSIDE" || hit.collider.tag == "RIGHTSIDE")
transform.position = Vector3.Lerp(PlayerPos, NextPos, Time.deltaTime);
}
}
}
答案 0 :(得分:3)
Lerp是使用第三个参数(介于0和1之间的值)在两个位置之间插值的函数。
您将Time.deltaTime用作第三个参数。因此,如果您的Position和NextPosition始终相同(如果帧速率恒定,则Time.deltaTime将会大致相同),那么Lerp的输出将始终相同。
此外,这段代码:
float ChangingPos = this.transform.position.x * movespeed;
可能没有按照您想要的去做。这将占用您当前职位的一小部分,并将其设置为下一个职位。
您可能想以流畅的速度移动角色。如果是这样,建议您在播放器RigidBody
上设置GameObject
,并在RigidBody
上使用强制。这样会更好,特别是如果您想在某个时候做一些假的物理操作。
因此,尝试类似的事情(在将刚体作为组件连接之后):
//In start:
_rigidBody = GetComponent<RigidBody>();
//In update:
if(_YOUR_CONDITION_){
_rigidBody.AddForce(Vector3.right * movespeed / Time.deltaTime);
}