C# 将玩家平稳地推离物体

C# 将玩家平稳地推离物体,c#,unity3d,C#,Unity3d,因此,目前我有基本的代码工作。当达到一定范围时,玩家被推开。然而。这就好像当我正朝着它跑的时候,球员正在撞墙 我该如何使它更平滑 using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlanetPush : MonoBehaviour { [SerializeField] Transform target; [SerializeField] fl

因此,目前我有基本的代码工作。当达到一定范围时,玩家被推开。然而。这就好像当我正朝着它跑的时候,球员正在撞墙

我该如何使它更平滑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlanetPush : MonoBehaviour {

    [SerializeField] Transform target;
    [SerializeField] float range = 1000;
    [SerializeField] float pushingspeed = 10f;

    // Update is called once per frame
    void Update ()
    {
        //Check if is in range
        if (Vector3.Distance(target.position, transform.position) < range)
        { 
            Debug.DrawLine(transform.position, target.position, Color.green);

            //Push away from object
            target.position = Vector3.MoveTowards(target.position, transform.position, Time.deltaTime * -pushingspeed);
        }
        else
        {
            Debug.DrawLine(transform.position, target.position, Color.yellow);
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类PlanetPush:单一行为{
[序列化字段]转换目标;
[SerializeField]浮动范围=1000;
[Field]浮动推送速度=10f;
//每帧调用一次更新
无效更新()
{
//检查是否在范围内
if(矢量3.距离(目标位置、变换位置)<范围)
{ 
DrawLine(transform.position、target.position、Color.green);
//推开物体
target.position=Vector3.movetoward(target.position、transform.position、Time.deltaTime*-推进速度);
}
其他的
{
DrawLine(transform.position、target.position、Color.yellow);
}
}
}

实际上这很容易。我必须提高推球速度,使之等于我的最大球员速度

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlanetPush : MonoBehaviour {

    [SerializeField] Transform target;
    [SerializeField] float range = 1000;
    [SerializeField] float pushingspeed = 0.01f;
    [SerializeField] float DampSpeed = 0.1f;
    float MaxPlayerSpeed = 30f;

    // Update is called once per frame
    void Update ()
    {
        //Check if is in range
        if (Vector3.Distance(target.position, transform.position) < range)
        { 
            Debug.DrawLine(transform.position, target.position, Color.green);
            pushingspeed += DampSpeed;
            if (pushingspeed >= MaxPlayerSpeed)
            {
                pushingspeed = MaxPlayerSpeed;
            }
            //Push away from object
            target.position = Vector3.MoveTowards(target.position, transform.position, Time.deltaTime * -pushingspeed);
        }
        else
        {
            Debug.DrawLine(transform.position, target.position, Color.yellow);
            pushingspeed = 0.1f;
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类PlanetPush:单一行为{
[序列化字段]转换目标;
[SerializeField]浮动范围=1000;
[Field]浮动推送速度=0.01f;
[SerializeField]浮动阻尼速度=0.1f;
浮动MaxPlayerSpeed=30f;
//每帧调用一次更新
无效更新()
{
//检查是否在范围内
if(矢量3.距离(目标位置、变换位置)<范围)
{ 
DrawLine(transform.position、target.position、Color.green);
推进速度+=阻尼速度;
如果(推送速度>=MaxPlayerSpeed)
{
推进速度=最大播放速度;
}
//推开物体
target.position=Vector3.movetoward(target.position、transform.position、Time.deltaTime*-推进速度);
}
其他的
{
DrawLine(transform.position、target.position、Color.yellow);
推进速度=0.1f;
}
}
}