小编Ima*_*ler的帖子

令人惊讶的是简单的C#程序性能不同

下面是一个简单的程序,只需很小的改动,就会产生重大的性能影响,我不明白为什么.

程序所做的并不是真正相关的,但它通过计算两个不同质量的物体和一个墙壁之间的碰撞,以非常复杂的方式计算PI.在我改变代码时我注意到的是性能差异很大.

有问题的行是注释的行,它们在数学上是等价的.使用慢速版本会使整个程序的使用速度大约是使用快速版本的两倍.

int iterations = 0;

for (int i = 4; i < 9; i++)
{
    Stopwatch s = Stopwatch.StartNew();

    double ms = 1.0;
    double mL = Math.Pow(100.0, i);
    double uL = 1.0;
    double us = 0.0;
    double msmLInv = 1d / (ms + mL);

    long collisions = 0;
    while (!(uL < 0 && us <= 0 && uL <= us))
    {
        Debug.Assert(++iterations > 0);
        ++collisions;

        double vs = (2 * mL * uL + us * …
Run Code Online (Sandbox Code Playgroud)

c# performance

20
推荐指数
2
解决办法
439
查看次数

统一 - 如何使精灵逐渐从一侧淡入淡出

如上所述,在Unity上,如何使2D精灵从一侧(例如顶部)到另一侧(例如底部)淡入(逐渐增加alpha)?

sprite unity-game-engine

5
推荐指数
1
解决办法
1808
查看次数

Unity 作业系统和多维数组

我有一个IJobParallelFor每个工作创建一个数据数组的地方

我试过使用NativeArray<float[]>但不起作用,因为它是一个引用类型,我试过NativeArray<NativeArray<float>>但不起作用,因为

...但是,包含 blittable 类型的可变数组的类型本身不是 blittable。

来源:MSDN blittable 类型

有没有办法在不使用巨大的一维数组并手动计算索引的情况下解决这个问题?这不是很好,因为您必须使用[NativeDisableParallelForRestriction]访问每个作业范围之外的数组。

我的工作:

public struct DistanceJob : IJobParallelFor
{
    [NativeDisableParallelForRestriction] public NativeArray<float> distance;
    [ReadOnly] public NativeArray<Vector2> position;

    public void Execute(int i)
    {
        for (int j = 0; j < position.Length; j++)
            distance[i * position.Length + j] = Vector2.Distance(position[i], position[j]);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道还有其他不是 n^2 的算法可以做到这一点,但这只是实际问题的一个玩具示例。

unity-game-engine

4
推荐指数
1
解决办法
5294
查看次数

使用Mathf.Clamp()限制对象旋转的问题

我正在研究一种在z轴上旋转物体的游戏.我需要将总旋转限制在80度.我尝试了以下代码,但它不起作用.minAngle = -40.0f,maxAngle = 40.0f

Vector3 pos = transform.position;
pos.z = Mathf.Clamp(pos.z, minAngle, maxAngle);
transform.position = pos;
Run Code Online (Sandbox Code Playgroud)

object rotation unity-game-engine clamp

3
推荐指数
1
解决办法
7914
查看次数

第一人称相机在C#中进行前后翻转

我试图让第一人称相机具有最大的上倾角和下倾角,这样当向上或向下看时,它不会进行前后翻转.出于某种原因,Mathf.Clamp不能保持我的x旋转固定.关于我可以对这个问题做些什么的任何想法?

float rotLeftRight = Input.GetAxis("Mouse X");

float rotUpDown = Input.GetAxis("Mouse Y");
Mathf.Clamp(transform.rotation.x, -60, 60);

rigidbody.AddTorque(rotUpDown*mouseSensitivity, rotLeftRight*mouseSensitivity, 0);
Run Code Online (Sandbox Code Playgroud)

我正在使用AddTorque,因为这些是车辆控制.

c# camera rotation unity-game-engine

0
推荐指数
1
解决办法
1365
查看次数

标签 统计

unity-game-engine ×4

c# ×2

rotation ×2

camera ×1

clamp ×1

object ×1

performance ×1

sprite ×1