我在用unity3d编一个赛车游戏,其中遇到了几个问题:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在用unity3d编一个赛车游戏,其中遇到了几个问题:相关的知识,希望对你有一定的参考价值。

1:我是菜鸟,请告诉我如何让赛车的动作更真,就是按下加速时慢慢的加速,然后慢慢的停下,。
2,如何让赛车到终点后结束游戏并统计出名次。
谢谢

问题1:
解决方案:
速度增加和减少用插值
在达到目标速度前 用临时速度代替 这个是数学方法
或者将车的rigibody施加力,利用物理引擎的加速度效果来实现,这个是物理方法,具体用哪个和你让车一动的逻辑有关

问题2:
在站点处放置一个空cube
然后将is trigger属性打开
在碰撞里面判断
cube的脚本里面记录名次
能听的懂吗?
希望对你有用啊:)追问

是听懂了,但是可以给我点代码吗,java的。
好的给100

追答

Mathf.Lerp(当前速度, 目标速度, Time.deltaTime * 加速级别);
这个就可以来平滑的过渡速度了啊

追问

你太伟大了,另外,我还有个小问题,就是我先提问的问题2,也给个代码,非常感谢!我再给你20!

追答

var test : float = 0;

function OnCollisionEnter(obj:Collision)

test=test+1;
Debug.Log(obj.gameObject.name + " get " +test + "th");

按照我上面说的在终点放个碰撞盒子 绑脚本就可以获取谁碰撞的到了
然后通过这个可以判断名次
当然这个只是很简单的例子

参考技术A 使用引擎做游戏.先是定义转速和档位,根据每档齿轮比求轮子的旋转,另外在加上摩擦力.追问

能告诉我如何做吗,求代码,要java的。好的给100

追答

没有java的,只有c#的,好像官网上有一段有关汽车的代码

追问

那个我有,太麻烦了,不光配上代码就行。

内部选定排序循环的并行性跳过了几个数字

【中文标题】内部选定排序循环的并行性跳过了几个数字【英文标题】:Parallelism on inner selected sort loop skips few numbers 【发布时间】:2018-12-07 12:26:01 【问题描述】:

我正在尝试制作一个程序,您可以在其中设置所需的线程数量,并且它将使用给定的数据和线程数量并行化选择排序算法。我知道在这种情况下我应该只使用另一种算法,但这仅用于教育目的。所以我在选择排序算法中并行化内部循环时遇到了一个问题,一些接近的数字没有排序,但是整个数组被排序在里面的那几对数字中,我不知道为什么。

    int* selectionSort(int arr[], int size, int numberOfThreads)

    int i, j;
    int me, n, min_idx;
    bool canSwap = false;

#pragma omp parallel num_threads(numberOfThreads) private(i,j,me,n)
    
        me = omp_get_thread_num();
        n = omp_get_num_threads();

        printf("Hello from %d/%d\n", me, n);


        for (i = 0; i < size - 1; i++) 
            min_idx = i;
            canSwap = true;
#pragma omp barrier

#pragma omp for
            for (j = i + 1; j < size; j++) 
                if (arr[j] < arr[min_idx])
                    min_idx = j;
                //printf("I am %d processing %d,%d\n", me, i, j);

            

            printf("Min value %d ---- %d \n", arr[min_idx], min_idx);

#pragma omp critical(swap)
            if(canSwap)
            
                swap(&arr[min_idx], &arr[i]);
                canSwap = false;
            

#pragma omp barrier

        
    

    return arr;

【问题讨论】:

如果你去掉并行性,它会起作用吗? 是的,我确实工作 那么这说明您可能遇到了一个线程正在查看陈旧数据的竞争条件。这就是为什么大多数并行排序使用分而治之的算法。 该内部循环必须使用缩减子句。我不打算研究封闭平行的推理,但尝试简化至少作为隔离问题的一种方式可能会很好。 【参考方案1】:

我发现问题在于你不能真正并行化这个算法(至少在某种程度上我正在这样做),因为我正在比较 arr[j]arr[min_idx]min_idx 值有时会在特定时间发生变化,以至于其他线程将完成 if (arr[j] &lt; arr[min_idx]) 行,然后另一个线程会立即更改 min_idx 值,这有时会使刚刚完成的 if 语句而不是 true没有了。

【讨论】:

实际上,使用缩减方案进行并行化非常容易。例如,参见this question。使用线程私有变量运行内部循环,以便每个线程具有其处理的迭代的最小索引。然后取这少量最小值中的最小值。

以上是关于我在用unity3d编一个赛车游戏,其中遇到了几个问题:的主要内容,如果未能解决你的问题,请参考以下文章

unity的赛车游戏都有哪些

请问,赛车游戏如何来判断到达终点呢

unity 3d 赛车时间

Linux赛车游戏 SuperTuxKart 1.0 正式发布

Linux赛车游戏 SuperTuxKart 1.0 正式发布

技术干货:赛车游戏中最短路径和最小曲率路径算法