gpt4 book ai didi

javascript - 如何将JavaScript(UnityScript)转换为C#并实现低通滤波器?

转载 作者:行者123 更新时间:2023-12-03 11:08:34 25 4
gpt4 key购买 nike

我一直在尝试将 Unity 手册中找到的低通滤波器代码示例实现到我的游戏中,但遇到了一些问题。

以下是 Unity 手册中的原始 JavaScript 示例:

var AccelerometerUpdateInterval : float = 1.0 / 60.0;
var LowPassKernelWidthInSeconds : float = 1.0;

private var LowPassFilterFactor : float = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds; // tweakable
private var lowPassValue : Vector3 = Vector3.zero;

function Start ()
{
lowPassValue = Input.acceleration;
}

function LowPassFilterAccelerometer() : Vector3
{
lowPassValue = Mathf.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);
return lowPassValue;
}

这是我到 C# 的转换:

float AccelerometerUpdateInterval = 1.0f / 60.0f;
float LowPassKernelWidthInSeconds = 1.0f;

private float LowPassFilterFactor = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds; // tweakable
private Vector3 lowPassValue = Vector3.zero;

void Start ()
{
lowPassValue = Input.acceleration;
}

Vector3 LowPassFilterAccelerometer ()
{
lowPassValue = Mathf.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);
return lowPassValue;
}

我使用加速度计移动 Angular 色的原始代码是这样的(没有低通滤波器):

float speed = 30.0f;
Vector2 dir;
private float accel;

void Start ()
{
accel = Input.acceleration.x;
}

// Update is called once per frame
void Update ()
{
accel = Mathf.MoveTowards (accel, Input.acceleration.x, speed * Time.deltaTime);
dir = new Vector3(accel, 0);

// move the object at the velocity defined in speed:
transform.Translate(dir * speed * Time.deltaTime, 0);
}

这是我尝试实现低通滤波器以减少噪声/抖动:

float AccelerometerUpdateInterval = 1.0f / 60.0f;
float LowPassKernelWidthInSeconds = 1.0f;

private float LowPassFilterFactor;
private Vector3 lowPassValue = Vector3.zero;

public float speed = 30.0f;

void Start ()
{
lowPassValue = Input.acceleration;
LowPassFilterFactor = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds;
}

Vector3 LowPassFilterAccelerometer()
{
lowPassValue = Mathf.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);
return lowPassValue;
}

// Update is called once per frame
void Update ()
{
// move the object at the velocity defined in speed:
transform.Translate(LowPassFilterAccelerometer() * speed * Time.deltaTime, 0);
}

当我尝试编译脚本时遇到一些错误:

error CS1502: The best overloaded method match for `UnityEngine.Mathf.Lerp(float, float, float)' has some invalid arguments

error CS1503: Argument #1' cannot convertUnityEngine.Vector3' expression to type `float'

最佳答案

示例代码可能是错误的。使用Vector3.Lerp()反而。 Lerps 的完整列表是 here

关于javascript - 如何将JavaScript(UnityScript)转换为C#并实现低通滤波器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27718097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com