物体不动

时间:2018-07-15 17:42:52

标签: c# unity3d

我想为我的玩家游戏对象制作一个转移码 但这没用。我不知道为什么,但是我认为“ 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);
        }
    }
}

1 个答案:

答案 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);
}