我在用unity3d编一个赛车游戏,其中遇到了几个问题:
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在用unity3d编一个赛车游戏,其中遇到了几个问题:相关的知识,希望对你有一定的参考价值。
1:我是菜鸟,请告诉我如何让赛车的动作更真,就是按下加速时慢慢的加速,然后慢慢的停下,。
2,如何让赛车到终点后结束游戏并统计出名次。
谢谢
解决方案:
速度增加和减少用插值
在达到目标速度前 用临时速度代替 这个是数学方法
或者将车的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");
按照我上面说的在终点放个碰撞盒子 绑脚本就可以获取谁碰撞的到了
然后通过这个可以判断名次
当然这个只是很简单的例子
能告诉我如何做吗,求代码,要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] < arr[min_idx])
行,然后另一个线程会立即更改 min_idx
值,这有时会使刚刚完成的 if
语句而不是 true
没有了。
【讨论】:
实际上,使用缩减方案进行并行化非常容易。例如,参见this question。使用线程私有变量运行内部循环,以便每个线程具有其处理的迭代的最小索引。然后取这少量最小值中的最小值。以上是关于我在用unity3d编一个赛车游戏,其中遇到了几个问题:的主要内容,如果未能解决你的问题,请参考以下文章
Linux赛车游戏 SuperTuxKart 1.0 正式发布