unity3d实现交通_unity3d交通系统 - CSDN
  • unity3D城市智能交通模拟系统源码,非常真实的物理交通仿真系统,模拟红绿灯、行人、汽车、AI检测、安全驾驶、刹车、超车、避让、人行道等等,有强大的编辑器工具包,可以创建非常复杂的道路,多种车辆模型、城市...
  • 最近学习了Unity3d这个游戏引擎,感觉真的是非常的强大,正好赶上操作系统课程要做一个模拟信号量的模拟程序,于是打算做一个模拟十字路口的程序,大致的实现实现的成果是:存在四种不同的汽车,包括一辆警车(不...

        最近学习了Unity3d这个游戏引擎,感觉真的是非常的强大,正好赶上操作系统课程要做一个模拟信号量的模拟程序,于是打算做一个模拟十字路口的程序,大致的实现要实现的成果是:存在四种不同的汽车,包括一辆警车(不受交通信号灯的控制)随机产生在不同的路口,并且有不同的行动路线如:直走,左转,右转等,当然还有交通信号灯来控制车辆的有序运行。可以展示不同的视角来观察路口的情况(利用Q,W,E,R分别控制不同的视角),ok,废话不多说,下面来讲述一下具体的实现方案!毕竟初学,肯定会存在一些不足之处,还望见谅~

       下面来看一下我们最终实现的界面吧~


    这个是最初的W视图


    这个是Q视图


    这个是E视图


    这个是R视图

    ok,我这里资源页有这里的脚本的下载,如果有需要的可以下载交流哈~

    接下来的几个blog我会细细的讲述一下具体的实现过程!

    资源地址:http://download.csdn.net/detail/nijiayy/8645197



    展开全文
  • Unity3D红绿灯实现步骤

    2020-07-29 14:20:45
    Unity3D开发中实现红绿灯的设计详细i步骤
  • 这是本人最新学习Unity3D这个游戏引擎完成的一个小项目的脚本配合我的系列的博客,仅供大家的学习交流,或许还有诸多不足之处还望大家指正~
  • ok,我没呢已经知道我们的预制物体都是怎么个结构了,下面我们就来说一下,具体的随机创造车辆的函数,我是把这个脚本放到了我的地形这个物体上,当然你也可以放到摄像机上,正如最开始展示的图片,我们这里一共有四...

    ok,我们已经知道我们的预制物体都是怎么个结构了,下面我们就来说一下,具体的随机创造车辆的函数,我是把这个脚本放到了我的地形这个物体上,当然你也可以放到摄像机上,正如最开始展示的图片,我们这里一共有四条道路,暂且我们把它命名为left,right,bottom,top每一条路都有四个车道,在我们中国都是靠右行驶的嘛,所以其中最靠右的就用于右转和紧急车辆的行驶。所以我们开始生成车辆,不多说上代码:

    #pragma strict
    var counter:float=0;
    var SUV:GameObject;
    var Pickup_Truck:GameObject;
    var IceCreamTruck:GameObject;
    var CopCar:GameObject;
    private var Car:GameObject;
    static var path_name:String;
    private var angle:float;
    private var n:int;//随机数的储存
    private var prefabPath:String;
    function Start () {
     n=0;
    }
    
    function Update () {
      counter=counter+Time.deltaTime;
      if(counter>5){//每隔五秒生成一辆车
      Car=choosecar();//获得不同种类的车
      if(n==3){//3是紧急车辆
        choosehurryway();
      }else{
        choosenormalway();
      }
       counter=0;
      }
      //Debug.Log(counter);
    }
    //选择紧急车辆的way
    function choosehurryway(){
       n=Random.Range(0,4);//产生随机数
       switch(n){
        case 0://left
         angle=Mathf.Sqrt(2);
         Instantiate (Car, Vector3(67.7,0.6,94.5), new Quaternion(0,angle/2,0,angle/2));//最后那个是一个四元数用于控制车的朝向
         path_name="left_hurry";
         break;
        case 1:
         Instantiate (Car, Vector3(103.2,0.6,55.96), new Quaternion(0,0,0,1));
         path_name="bot_hurry";
         break;
        case 2:
         Instantiate (Car, Vector3(92.3,0.6,130.8), new Quaternion(0,1,0,0));
         path_name="top_hurry";
         break;
        case 3:
         angle=Mathf.Sqrt(2);
         Instantiate (Car, Vector3(129,0.6,105.5), new Quaternion(0,-angle/2,0,angle/2));
         path_name="right_hurry";
         break;
        }
    }
    //选择普通车辆的way
    function choosenormalway(){
      n=Random.Range(0,12);//产生随机数
      switch(n){
        case 0://left
         angle=Mathf.Sqrt(2);
         Instantiate (Car, Vector3(67.7,0.6,94.5), new Quaternion(0,angle/2,0,angle/2));
         path_name="left_right";
         break;
        case 1:
         angle=Mathf.Sqrt(2);
         Instantiate (Car, Vector3(67.7,0.6,98.41), new Quaternion(0,angle/2,0,angle/2));
         path_name="left_left";
         break;
        case 2:
         angle=Mathf.Sqrt(2);
         Instantiate (Car, Vector3(67.7,0.6,98.41), new Quaternion(0,angle/2,0,angle/2));
         path_name="left_go";
         break;
        case 3://bottom
         Instantiate (Car, Vector3(103.2,0.6,55.96), new Quaternion(0,0,0,1));
         path_name="bot_right";
         break;
        case 4:
         Instantiate (Car, Vector3(99.5,0.6,55.96), new Quaternion(0,0,0,1));
         path_name="bot_left";
         break;
        case 5:
         Instantiate (Car, Vector3(99.5,0.6,55.96), new Quaternion(0,0,0,1));
         path_name="bot_go";
         break;
        case 6://top
         Instantiate (Car, Vector3(92.3,0.6,130.8), new Quaternion(0,1,0,0));
         path_name="top_right";
         break;
        case 7:
         Instantiate (Car, Vector3(95.9,0.6,130.8), new Quaternion(0,1,0,0));
         path_name="top_left";
         break;
        case 8:
         Instantiate (Car, Vector3(95.9,0.6,130.8), new Quaternion(0,1,0,0));
         path_name="top_go";
         break;
        case 9://right
         angle=Mathf.Sqrt(2);
         Instantiate (Car, Vector3(129,0.6,105.5), new Quaternion(0,-angle/2,0,angle/2));
         path_name="right_right";
         break;
        case 10:
         angle=Mathf.Sqrt(2);
         Instantiate (Car, Vector3(129,0.6,101.9), new Quaternion(0,-angle/2,0,angle/2));
         path_name="right_left";
         break;
        case 11:
         angle=Mathf.Sqrt(2);
         Instantiate (Car, Vector3(129,0.6,101.9), new Quaternion(0,-angle/2,0,angle/2));
         path_name="right_go";
         break;
      }
    }
    
    function choosecar(){
      n=Random.Range(0,4);//产生随机数
      //Debug.Log("car:"+n);
      switch(n){
      case 0:
        return SUV;
      case 1:
        return Pickup_Truck;
      case 2:
        return IceCreamTruck;
      case 3:
        return CopCar;
      }
    }
    //另一种克隆的方式
    /*function choosecar(){
      //n=Random.Range(0,4);//产生随机数
      var car_name;
      n=0;
      switch(n){
      case 0:
        car_name="SUV";
        break;
      case 1:
        car_name="Pickup_Truck";
        break;
      case 2:
        car_name="IceCreamTruck";
        break;
      case 3:
        car_name="CopCar";
        break;
      }
      prefabPath="Assets/Prefabs/"+"SUV"+".prefab";
      Debug.Log("car:"+prefabPath);
    }*/

    下面说一下代码里面说的那个四元数,那是一个用于控制小车的朝向参数,它有一个自己的算法:

    给定一个欧拉旋转(X, Y, Z)(即分别绕x轴、y轴和z轴旋转X、Y、Z度),则对应的四元数为:
    x = sin(Y/2)sin(Z/2)cos(X/2)+cos(Y/2)cos(Z/2)sin(X/2)
    y = sin(Y/2)cos(Z/2)cos(X/2)+cos(Y/2)sin(Z/2)sin(X/2)
    z = cos(Y/2)sin(Z/2)cos(X/2)-sin(Y/2)cos(Z/2)sin(X/2)
    w = cos(Y/2)cos(Z/2)cos(X/2)-sin(Y/2)sin(Z/2)sin(X/2)
    q = ((x, y, z), w)
    这样就可以自己随意的设置自己的小车的朝向了,Random.Range(0,12)这个函数是随机的产生一个0到12的整数(不包括12),当然那我的克隆的方法就是设置了四个共有变量在检视面板里面把相应的预制物体拉进去,你也可以尝试采用我后面注释掉的方式直接在文件中找到对应的预制物体进行克隆,在uinty里面凡是public的变量都可以在检视面板中从工程文件中把相应的实例拖进去,如下图:

    那个SUV等车的模型就是从prefab文件夹中直接拖进去的,这里还要说一点就是警车的设置,因为警车直走直线而且只有在最右的道路,所以当随机出警车的话就只在四个不同的紧急路线中选择道路进行放置,Instantiate的第二个参数就是生成物体的位置,所以这个位置也要针对不同的物理世界进行不同的变化~



    展开全文
  • 想必来看这个blog的,大家都已经知道了Unity3D的一些基本的操作了吧!这里我也就不一一赘述了,毕竟不是什么一个Unity的课程。ok,我这里用的是Unity3D5,然后下面来说一下关于这个小程序的小车的建立。 一开始的时候...

    ok,下面就进入我们的讲解工作啦,我的这个的讲解应该是比较适合初学者的,所以会有一些啰嗦什么的就请大家见谅啦!

    想必来看这个blog的,大家都已经知道了Unity3D的一些基本的操作了吧!这里我也就不一一赘述了,毕竟不是什么一个Unity的课程。ok,我这里用的是Unity3D5,然后下面来说一下关于这个小程序的小车的建立。

    一开始的时候,我只是在网上找了一些相关的3d模型然后直接拉入Unity中(注意一定要是fbx格式的哦),我当时天真的不断地调节车速和轮子的转动当然就是在脚本里写一些平移和旋转的代码啦,虽然离近了看还是不真实,但是至少我们的车轮还是动了是吧~但是,当遇到拐弯的时候,我就遇到了瓶颈,如果一个正常的车,它的拐弯一定是车头引导的啊,但是我现在无论怎么变也只是看着车头和车尾一起平移过去的,于是我开始查找,找了很多资料(或许也是刚学,没有输入正确的关键词吧),终于让我发现了一个unity自带的一个函数库——WheelCollider,这个类真的是天生就是为赛车游戏开发而设立的啊!这里的运动完全是通关后轮的驱动还带动前轮(当然也可以四驱),而拐弯也就是前轮的带动,实在是完美的解决了我的问题,但是问题也就随之而来了,那就是怎么用这个?我找了好多的资料,都是说把这个库拖入轮子上就好,但是,我拖入后根本就是无法和预想的一样啊,后来我好不容易发现了一个教学视频真的是帮了我的大忙!我觉得文字还是不够直观,所以我觉得大家还是去看看这个视频,真的很有用,那位老师教的很好~这里给出一个链接,大家可以去看看(一共分为了五个你可以找一下车轮的设置在哪里)可以到这里学习:http://www.tudou.com/programs/view/CaBwp072c2Y/

    ok 下面就说一下具体的实现吧,话说让车子拐弯而又不脱离公路哪里我还真的是研究了好半天,怎么也找不到方法,终于想起了下载Unity自带的例子,于是我就去找,还真的找到了一个有关汽车ai的例子,也是千辛万苦的读下来,但是其中很多算法还是不明白,但是我发现我已经找到了一个方法了,而且是不需要ai的。受到例子的启示,我本来是想直接还是用Unity的一个WayPoint Circuit的但是这个是建立环路的,而我的想法是建立一条单向道路,所以我就防着这样的思路,建立了一个我的汽车行进的路线,如下图所示:


    看到啦那个way_1那些标志了吗?这就是我们的路标点,其实就是一个个的Cube然后把他们保留Collider但是把形状渲染取消,所以就成了一个个透明的小盒子,给他们加入触发器,当校车碰到这个标志点的时候就让小车指向下一个标志点,到达最后一个标志点的时候把这个校车Destory,由于我们的路标点很少只有五个,如果让校车驶向一个个的路标点的话那么必然就会导致小车行驶的十分生硬,所以受到了Unity自带例子的启发我给没一个小车前面加入了一个透明的引导球这样的话让引导球驶向标志点,小车追着引导球(当然小车和引导球之间保持一样的速度),引导球就起到了一个缓冲的作用,保证了小车的圆滑的拐弯。下面是一个小车整体的组成:


    看到了左边的小球了吗?那个除了引导的作用还有探测前方是否有车的情况,如果它有碰撞的话那么就会出现一个汽车被它后面的另一个汽车离得好远撞飞了,所以不可能让它具有碰撞性,所以,我们就应该给他设置为触发器方式,但是再次运行的时候你就会发现,这个引导球不见了,小车也不按照既定的路线行驶了,我通过种种的实验发现需要把小球的重力取消就ok!


    这个是小球的检视面板看那个IsTriger打了勾就代表这个小球无碰撞,是一种触发器模式,而那个Use Gravity没有打勾就是没有重力的影响。而那个ballmove就是我们要写的函数,小球有两个任务一个是引导,一个是检测车辆,下面给出代码:

    #pragma strict
    private var waypoint:Transform[]=new Transform[5];
    private var move_speed:float;
    private var nextpoint:int;
    var car:GameObject;
    private var carbody:Rigidbody;
    private var path:GameObject;
    private var current:int;//记录当前point位置
    private var turn_brake:int;//转弯刹车
    private var stop_brake:int;//停车刹车
    private var way_name:String;
    private var go:int;
    private var last_colllider:String;
    function Start () {
      turn_brake=20;//30
      stop_brake=10000;
      nextpoint=0;
      carbody=car.GetComponent("Rigidbody");
      way_name=createcar.path_name;//从生成车辆函数得到当前车的位置并且选择与之对应的道路
      Debug.Log(way_name);
      if(way_name==null){//第一辆车本就有的不用生成所以对应name是null
        way_name="left_right";
      }
      switch(way_name){//针对不同位置生成的车对应不同的行进方式
        case "left_right":
        path=GameObject.Find("way_left_turnright");
        break;
    
        case "left_left":
        path=GameObject.Find("way_left_turnleft");
        break;
        
        case "left_go":
        path=GameObject.Find("way_left_go");
        break;
        
        case "left_hurry":
        path=GameObject.Find("way_left_hurry");
        break;
        
        case "bot_right":
        path=GameObject.Find("way_bot_right");
        break;
        
        case "bot_left":
        path=GameObject.Find("way_bot_left");
        break;
        
        case "bot_go":
        path=GameObject.Find("way_bot_go");
        break;
        
        case "bot_hurry":
        path=GameObject.Find("way_bot_hurry");
        break;
        
        case "top_right":
        path=GameObject.Find("way_top_right");
        break;
        
        case "top_left":
        path=GameObject.Find("way_top_left");
        break;
        
        case "top_go":
        path=GameObject.Find("way_top_go");
        break;
        
        case "top_hurry":
        path=GameObject.Find("way_top_hurry");
        break;
        
        case "right_right":
        path=GameObject.Find("way_right_right");
        break;
        
        case "right_left":
        path=GameObject.Find("way_right_left");
        break;
        
        case "right_go":
        path=GameObject.Find("way_right_go");
        break;
        
        case "right_hurry":
        path=GameObject.Find("way_right_hurry");
        break;
        
      }
      //childCount获得子物体的数量
      for(var i:int =0;i<path.transform.childCount;i++){//遍历路径的父集遍历集合把对应的point点放入我们的位置点数组中
        //Debug.Log(path.transform.GetChild(i).name);
        waypoint[i]=path.transform.GetChild(i);
      } 
    }
    
    function Update () {
      move_speed=carbody.velocity.magnitude;
      //Debug.Log("ball:"+move_speed);
      //改变小球的移动方向
      transform.forward=waypoint[nextpoint].position-transform.position;
      transform.Translate(0,0,move_speed*Time.deltaTime);
    }
    
    function lastcollider(name:String){
       Debug.Log("last coiilder:"+name);
       last_colllider=name;
    }
    
    function OnTriggerEnter(go:Collider){
    //碰撞到point后转向下一个point
    if(go.transform.name=="way_1"||go.transform.name=="way_2"||go.transform.name=="way_3"||go.transform.name=="way_4"||go.transform.name=="way_5"||go.transform.name=="stop_line"||go.transform.name=="Terrain"){
       counterway(go);
     }else if(transform.name=="cop_target"&&go.transform.name=="cop_collider"){//警车自己不要把自己弄停
       
     }else if(go.transform.name=="cop_target"||go.transform.name=="target"){
     
     }
     else if(go.transform.name!=lastcollider){
      Debug.Log("car_stop:"+go.transform.name);
      gameObject.SendMessageUpwards("isgo",1);
     }
    }
    function OnTriggerExit (other : Collider ) {
     // Debug.Log("exit");
      gameObject.SendMessageUpwards("isgo",0);
    }
    
    function counterway(go:Collider){
     if(nextpoint<waypoint.Length&&go.transform.IsChildOf(path.transform)){//因为有很多引导块,所以这里片段一下各自的路线,不要
     // 误走过了其他的路径块而导致计数的增加
       nextpoint++;
      }
     //右转遇到第二个标志点就减速
      if(way_name=="left_right"||way_name=="right_right"||way_name=="top_right"||way_name=="bot_right"){
      if(nextpoint==2){
        //Debug.Log("slow");
        gameObject.SendMessageUpwards("isbrake",turn_brake);
       }else{
        gameObject.SendMessageUpwards("isbrake",0);
       }
      }
      if(nextpoint==waypoint.Length){
       //Debug.Log("destory");
       Destroy(car);
      }
    }
    这里都有相应额注释我相信大家应该都可以看懂,其实代码并不难,重要的是一个解决问题的方式,ok小球和路径的建立就说到这里~

    对了,想必大家也都看到了我有很多需要确定字符串的地方例如:way_name=="left_right"其实这里的字符串是要和建立物体的命名取得一致的,如下图给一个例子:


    ok,今天这一节就讲到这里啦~

    展开全文
  • Unity3D的城市模拟道路模型包,包含一些城市基础道路的模型。
  • Unity3D学习路线与学习经验分享//最后一次更新为2019.7.22日,更新了一些废掉的链接 作者:15游02 丁祺 你好,这篇文档是我的导师孙老师(以下简称老孙)指名我 书写给新手、初学者以及技能有些许缺陷的人的一篇...

    Unity3D学习路线与学习经验分享//最后一次更新为2019.7.22日,更新了一些废掉的链接

    作者:15游02 丁祺

    你好,这篇文档是我的导师孙老师(以下简称老孙)指名我 书写给新手、初学者以及技能有些许缺陷的人的一篇经验分享的文档,当然如果你看到了这些文字,代表着你是一个有意愿或期望去学习这款软件的人。因人与人之间有很多的不同,以下我会尽我所能,通过不同切入点与角度,并根据以上人群的不同技术程度,来帮你提升你的技术实力,我会在结尾留下我的联系方式,有兴趣的话可以联系我。那接下来我就分享一下我的学习经验。

    写给新手与初学者:

    你在准备开始学习这款软件之前,可能经常会听周围的人说,“英语很重要,如果不会英语,程序是学不会的”,“学程序,就又得背单词了”,“C语言都没学好,不可能搞得懂Unity3D的”...等等这一些容易影响心态的话。我认为,学这个,开局最重要的并不是疯狂翻书疯狂看视频直接拿来就学,而是——消除恐惧,消除对程序,对Unity3D“高大上”的感觉。

    所以学Unity3D需要英语吗?

    那?你觉得什么程度才是会英语呢?我分享两个链接给你,这是英文演讲与纯英文文档的网页链接,如果有兴趣测试一下自己的英语实力的可以打开看一下。

    【Unite 2018 柏林大会】完整版录像

    https://www.bilibili.com/video/av25266964?from=search&seid=16153052159950265652

    Unity3D官方API文档

    https://docs.unity3d.com/Manual/index.html?_ga=2.153078527.776856565.1539157046-412574144.1536670294

    对于我来说,如果你能听懂英文技术演讲录像,能看懂英语技术文档才能被称之为会英语,反之则不会,我觉得不能为你解决实际问题的技能根本不能称之为会,只是在浪费时间而已。简单说,如果你想靠Unity3d这个东西吃饭,并不需要英语水平,你不需要刻意 去记忆英文语句,按照我的话讲,纯英语界面的Unity3d,抄它的界面就好了,界面没有的,去网上找对应的功能,并抄在笔记上,下次用的时候直接去翻就足够了(如果你想尽快提升能力的话,我建议千万不要去记,用的时候直接去翻看笔记就好了,在大量的练习中,你的大脑就会自然而然的记住这些代码,我就是这样的)。

    当然了,如果你想成为界内大牛,你就必须会英语了,毕竟这是老外的东西,学会英语可以帮你打开一扇新的窗户。不过你现在的英语实力绝对绝对足够去学习这款软件了。

    C语言学的差,会不会差很多啊?

    会C语言与不会C语言的人,同时学Unity3D中的C#的学习速度,是有区别的,毕竟他们两种语言之间还是有一些共同的部分的,但达不到很多,这种程度。但与其你自己纠结 这个问题,不如问问自己愿意付出多少学习能力在这个上面。每个人都拥有清华北大学生的学习力,只是愿意付出的量不同而已,想学就一定不会差

    “我感觉Unity3D就是一个小学生引擎,画质贼差,感觉学起来没什么意义,还不如去学虚幻呢。”

    相同场景下 虚幻4 VS Unity 5

    https://www.bilibili.com/video/av17956467/?spm_id_from=333.338.recommend_report.2

    如果你有这种感觉的话,推荐试一下《崩坏3》手机游戏与腾讯的《逆战》电脑游戏;

     

    总之Unity3d只是个工具,做出来的东西的好坏,取决于用的人,就像你打游戏,如果你技术不好,再版本强势的英雄,你也没法单人打上最强王者。

     

     

    如何开始学习Unity3d?

    我要变学霸_如何写笔记?How I Take Notes

    https://www.bilibili.com/video/av10395257

    在开始学习之前,你需要一个笔记本,推荐活页的,就是那种可以拿下来单页的那种,他就是你以后学习时,你大脑的硬盘,笔记法同时适用于世界上的全部科目。具体怎么写笔记我就不说了,只需要记住两点:

    1. 千万别自以为是的认为自己的脑子很好使,你不是机器,写笔记,必须且一定要写,不然,重复查找自己找过的知识点的时候,你的心态会受到影响,且会浪费大量的无用时间,而且千万别用电子版,记录电子笔记的时候会勾起你ctrlC+V的欲望,表面看,你节约了半分钟打字时间,可你没有经过你大脑思考的这一步骤,会严重影响你的记忆,而且电子版无法像纸质笔记本那样粘书签,翻看会非常麻烦,相信我,多动手写几个字而已,不会要人命的。
    2. 写知识点的时候千万千万别抄别人教给你的话,(1)一定要尽可能的精简,(2)并尽一切可能用自己的语言表达,然后把自己的话记录到笔记本上,否则你就是白写,没有任何意义。

     

    开始学习Unity的几种方向(热手用的入门期,熟悉者可以跳过)

    以下我会给你列举几个我个人推荐的开始学习Unity的几个入口,当然你在学习这些东西的时候,不要忘了听课(课上尽量不要跟着敲代码,敲代码会一定程度的影响你的注意力,而是听出老师讲课的核心,并把核心知识转换成自己的话,写在笔记本上);你可以根据自己的兴趣,与自己大脑的记忆习惯来选择,从哪个位置进入。这几个入口是没有优劣的。不用觉得哪个入口高大上,重要的是,这个入口是否适合你自己,如果发现听不懂,认真再听一遍,如果还是不会,直接跳过。不过在学习期间,你是没精力玩游戏的,记得删掉你手机与你电脑里的游戏,等你自己的Unity技术足够养活自己了以后,再用Unity给你赚来的钱,充到游戏里做个天选之人吧。

    以下全部视频我都看过,你大可不必担心视频的质量(我个人在看视频学习的时候,会同时播放一些没有人声的轻音乐,来降低困意)

    1、暂时比较厌恶或者恐惧代码,以及零基础的人

    傅老师的Unity3D教学 //这里傅老师的原视频被收购,所以他近期刚刚新出了一套新鲜的视频,供大家使用

    https://www.bilibili.com/video/av57479723

    这个系列是通过插件的方式,来尽量绕开代码这个大难题的(当然不代表完全没有),让你在不太了解代码的情况下就可以基本操作Unity,并且可以做一点东西出来,他还在这个系列里教学了插件画面美化,通过点击的方式就可完成3A画面的特效处理。

     

    2、传统的教学方式:

    这个入口主要是以不断完成微型小游戏的一种路线,有一点点难度,推荐了解一些些C语言或其他编程语言的人进入

    Unity零基础入门 - 打砖块 http://www.sikiedu.com/course/77

    零基础入门Unity - 古迹探险 http://www.sikiedu.com/course/84

    Unity5.2入门课程 - 进入Unity开发的奇幻世界 http://pan.baidu.com/s/1mhDZO7m

    Unity中的C#编程 - 零基础(Unity 2017) http://www.sikiedu.com/course/83

    第一季 C#编程初级教程 链接:https://pan.baidu.com/s/1nwGyGDN 密码:memt

    UGUI - Unity 5.1超强UI案例学习 http://pan.baidu.com/s/1qYENTW4

    这个系列使用比较传统的教学顺序,来熟悉Unity操作的。

     

    3、相比视频更喜欢看书:

    《Unity游戏设计与实现 南宫梦一线程序员的开发实例》(绿色的书)   第0章

     

    《Unity 5.X从入门到精通》  Unity官方制作,精品中的精品(这本书包含了入门期开始到精通这款引擎的几乎全部内容,如果你打算看这本书,坚持从头看到尾吧。

     

    要尽早结束入门期,毕竟入门期只是用于热手。

     

    正式学习期

    入门期结束后,就要正式开始学习Unity了,以下为必学项,每个视频后我都会写上我认为必学的理由,我会尽量解释清楚推荐的理由,不会让你带着“我擦学这有啥用啊”之类的想法去看的。

    以下视频我会分成块,你看的时候,各模块之间看的顺序可以随你兴趣,但所有的视频内容都必须认认真真看完。(此清单的部分内容来自于SIKI的A计划学习路线的加工整理版本)

     

    代码部分(代码,与外语一样,都是一门语言,都是用于交流的工具,只不过外语是跟人交流,而代码是跟机器交流的,学会了代码你才能真正开始控制电脑,让他帮你工作;放心,代码是世界上最简单的外语,比学英语相比不知道简单了多少倍。)

    第一季 C#编程初级教程(基础代码部分,这其中大部分都跟C语言,Java相同,已经学过的可以快进着看) https://pan.baidu.com/s/1nwGyGDN 密码:memt

    第二季 C#编程中级教程(略微提升了点难度,但其中的内容都很常用。学这个的时候会有一种完全不知道这破玩意有什么用的感觉,没事这是正常现象,不用太担心,做好笔记,当你完全理解了面向对象以后就明白了) https://pan.baidu.com/s/1htLYalI 密码:78zv

    Unity API常用方法和类详细讲解(API是Unity这个引擎提供给你的“工具”,这部视频干货特别特别多,不要用脑子记,但千万记住,一定要在做好笔记的同时,理解每一条API的大致意思。这是Unity最最最核心的部分,你以后的学习和工作中会天天用到这部分的内容。) http://www.sikiedu.com/course/59

     

    物理系统(因为现实中的真正真实的物理,实在是太难模拟了(想象一下摩擦力),所以程序员使用了“碰撞器”,来大致模拟现实中的物理效果(如你去台球厅打球,人用球杆用力击打白色球,这个球撞到其他球时,可以打飞其他球。这种“打飞”其他球的效果使用了碰撞器来实现。))

    Unity官方教程-3D物理系统-中文版 (这段视频中的难度是逐渐上升的,先看懂前4 课,可以不用强迫自己一口气看完) https://space.bilibili.com/28562838/#/channel/detail?cid=30384

     

    UI部分

    UI是我认为的Unity中最简单最容易上手的一部分了,基本不需要写任何代码,拖拖拽拽很容易就OK了。(可能有人听过NGUI,我简单解释一下,NGUI是过去人们用的非Unity官方制作的UI系统,现在已经不像过去那么流行了,个人不建议学习,当然,有兴趣者可以看看,不过UGUI一定要会)

    UGUI - Unity 5.1超强UI案例学习 http://pan.baidu.com/s/1qYENTW4

     

    动画系统(如果你不希望你做出来的游戏都是一堆不会动的“僵尸”,就好好学这的内容。这里放上的视频链接为3D模型的动画系统)

    需要学习的量有点大,有一定难度。不过我还是那句话,不要用脑子记,抄笔记。

     

    Unity中的动画系统和Timeline(Unity2017) http://www.sikiedu.com/course/82

     

    光照系统 (不过多解释)

    [傅老師/Unity教學] 30 - 3種烘焙光照模式(Baked Lighting)

    https://space.bilibili.com/211153830/#/video?tid=0&page=5&keyword=&order=pubdate

    [傅老師/Unity教學] 渲染相關知識 - 01 基礎渲染步驟

    https://www.bilibili.com/video/av17250027

    [傅老師/Unity教學] 渲染相關知識 - 02 室內光影基礎實驗

    https://www.bilibili.com/video/av18330502

    [傅老師/Unity教學] 渲染相關知識 - 03 用一顆石頭架場景!! 室外光影基礎實驗

    https://www.bilibili.com/video/av18442018

     

    粒子系统(这里我就不多解释什么是粒子系统了,打开视频链接,自己看吧)

     

    Unity官方最新粒子特效素材包视频 https://www.bilibili.com/video/av31104362?from=search&seid=10690239211286766965

     

    顺便在此推荐一下上传这个视频的B站UP主Shallot夏洛特,他的个人空间经常会上传一些关于Unity新奇功能的教程。想长期学习Unity的话,推荐关注一下他的动态。

     

    Unity中的Shuriken粒子系统(Unity2017)入门级教程(想深入学习粒子的就去网上查吧)

    http://www.sikiedu.com/course/79

     

     

    DOTween动画插件

    这个插件是所有插件中,唯一的一个我建议你必学的插件。这个插件是用来制作物体的移动(从一个位置移动到另一个位置的动画),UI的移动(从 一个位置移动到另一个位置的动画)从一个颜色渐变到另一个颜色(从一个颜色变换到另一种颜色的动画)的一种便利性的插件。嗯?没听懂?

    DOTween

    链接:https://pan.baidu.com/s/1i6Ud2XB 密码:6amf

     

    项目制作教程(知识学累了吗?想实际做做项目练练手?我这里精选了几个我做过,并且感觉收获颇丰的视频教程给你,推荐你感觉脑子爆炸的时候食用。)写代码的时候,如果你有能力,尽量不要抄袭他的代码,使用自己的习惯去写,只要做出来的东西和他一样就行,这种自己思考代码的方式将会极大的培养你的代码写作能力。

    初级案例:

    Unity初级案例 - 坦克大战(Unity2017.1) (就是小时候我们玩的插卡游戏机里的坦克大战)

    http://www.sikiedu.com/course/90

    Unity初级案例 - 愤怒的小鸟(其中使用了2d的物理系统,使用方法和3d的基本相同)

    http://www.sikiedu.com/course/134

    有一定基础后的案例:

    Tanks第三人称双人坦克大战视频教程

    链接:https://pan.baidu.com/s/1eTbuUxO 密码:qi4b

    Stealth秘密行动 (Unity最经典官方项目之一) 链接:http://pan.baidu.com/s/1miMWSas 密码:bl83

    从零开始三小时速撸一款雷姆小游戏Unity3D全过程(如果你喜欢二次元的孩子推荐这部和下面那部。会稍微有点理解上的难度。)

    https://www.bilibili.com/video/av5814699

    从零开始的两小时速撸:使用血小板制作脑血栓游戏(跳一跳)

    https://www.bilibili.com/video/av27387729

    MMD功能 写实版场景配Unity娘 极乐净土(喜欢二次元的同时,又好奇MMD到底是怎么制作出来的人推荐玩一下这个视频)P1为介绍视频。P2为教学视频

    https://www.bilibili.com/video/av7700841?from=search&seid=13542732114945459430

    https://www.bilibili.com/video/av7715582

    (在这个作者刚出雷姆小游戏的时候我还是个代码都不会的孩子,但当他出血小板的时候,我已经可以用我自己的Unity知识工作了;假如你真的想好,要走Unity这条路的话,狠下心来好好学,努力是不会辜负你的。)

     

    在此推荐一下这三部视频的作者 新鲜的女尸,就跟这名字一样,这小子真跟尸体一样突发性诈尸一次,然后又进入了长期的休息期,喜欢做二次元Unity项目的人推荐关注他一下,没准哪个动漫突然火了以后又出来诈尸一次。

     

     

    最后的高级提升期

    因这里的内容都比较难,如果你没有上面的知识积累,看这里的视频会让你困懵逼的。这部分内容推荐已经学了新手期与大部分入门期的人再深入学习

     

    高级代码部分

    第三季 C#编程高级教程 这部视频可以说,已经把代码的全部内容讲完了,难度很高,可能你看完了初级和中级以后依旧看不懂,如果真的用心去看,并且反复看了好几遍依旧看不懂的话,先放下学学别的,然后再回来看。推荐有至少一年代码经验的人食用

    链接:https://pan.baidu.com/s/1slBP7mH 密码:eob1

     

    数据结构 数据结构是一门分析如何存储数据与数据之间逻辑关系的一门学科,这部视频里的老师讲的真的很好,你认真看能看懂的。数据结构的知识面试很容易考,你一定要认真学里面的知识点。(千万不要看上海交通大学的和清华大学的数据结构公开课,虽然这两部视频中的老师讲课很有牌面,但是全是说的书面语言,没有习惯听书面语言的人是不太可能听懂的,最好不要去看,不然会严重打击你的自信心。)

    【考研】赵海英 数据结构 (这部视频就不像C#高级篇那么难了,认真听就能会)原链接的视频被取消了,如果需要查看,请在B站或者百度搜索赵海英 数据结构

    【郝斌】-数据结构入门 (学历不高,但讲课极其精辟的一位老师,喜欢听白话讲课的人非常推荐,  推荐上下两位老师一起结合着看,你会有非常高的收获)

    https://www.bilibili.com/video/av6159200?from=search&seid=10153396348143638381

    这里我再推荐一本书 《大话数据结构》

    这本书用很通俗易懂的语言写了数据结构的内容(虽然有的例子贼牵强,哈哈哈),推荐不喜欢看视频,或者看完视频后查缺补漏使用。

    Unity编辑器扩展 编辑器扩展是一种提升在Unity中的脚本美观性的一种技术,学起来还是很好玩的。

    编辑器扩展

    在线观看: http://www.sikiedu.com/course/47

    链接: http://pan.baidu.com/s/1gfHURYF

    【水鸡游戏课堂】Unity编辑器扩展1至7

    https://www.bilibili.com/video/av23671632?from=search&seid=4358948779151612714

    算法 算法是一门研究如何利用数据存储的数据,求出计算结果,以及讨论最优计算方法的一门学科,有些地方也把算法也一并算作是数据结构。(这里的这一部视频,并未收集全部算法领域的知识,你需要在以后的工作中继续学习补充你缺失的部分)

    编程内功修炼-算法 链接: https://pan.baidu.com/s/1eSgkCpk 密码:xcz2

     

    设计模式 设计模式是前人写代码时,透过需求发现的一些常见的结构上的问题,并把这些问题的常见的解法,用UML图与简单的文字归纳出来的一种代码结构思想。在学习这里的知识点的时候,如果突然有一种,“卧槽,在我学设计模式之前我就用过这模式”的感觉,说明你在之前的练习中,真的用心去思考问题了,是一种非常很好的现象;在学习设计模式的时候需要注意几点。

    1. 这不是考验记忆力的学科。设计模式不要死记,重要的是学会他构建代码时候的书写模式。
    2. 不要任何地方都想用设计模式。学会设计模式后,宁可不用也不要滥用设计模式,不然会让你觉得束手束脚,无从下手,当你有了大量的代码练习基础后,你就会明白模式的好处,与应应用的场合了。
    3. 不要觉得设计模式中的例子就是绝对正确的。有时候设计模式中举的例子,并不一定是你的项目中真正需要使用的书写方式,千万不要被他的例子束缚住。
    4. 以上三点虽然我说的很轻松,但是想真正做到这些,没有大量的实验与使用基础是不太可能做到的,不要有太大压力,慢慢来别放弃。

    因我自己学习时使用的是SIKI A计划课程中的视频(收费),所以不敢给你瞎推荐好的免费视频,如果你没有A计划的账号,推荐去B站搜索“设计模式”,手动搜索适合自己的视频。A计划收费视频   游戏开发中的设计模式 http://www.sikiedu.com/course/54

     

    框架:MVC 这是我认为最有用的东西之一了,他可以说属于设计模式的范畴。我认为他与其说是知识,不如说是一种规划代码的一种整理方案,让你不再觉得代码乱,也会杜绝总会出现一些在奇奇怪怪位置调用的变量。

    同为A计划收费课程 基于MVC架构的俄罗斯方块开发(基于Unity2017)

    http://www.sikiedu.com/course/80

     

    数据库 数据库的重要性不用我多说吧。

    MySQL数据库从零到精通 链接:http://pan.baidu.com/s/1mh6FR5Y 密码:qlf7

    http://www.sikiedu.com/course/48

     

    Shader Shader是一种显卡语言,当然了,如果你真的能学到这,我想也不需要我解释什么是Shader了。

    简单易懂的Unity5 Shader着色器入门教程

    https://pan.baidu.com/s/1pLCwaKj 密码:7wqu

     

    以上可以说就是Unity需要的基本知识了,还剩下一些零碎的知识,需要你自行查找并学习。

    1、3D数学

    1. Json 数据持久化 想将数据保存在硬盘里?学这个吧。
    2. uLua热更新 链接: https://pan.baidu.com/s/1kUIZMcB 密码:x12i
    3. 网络链接Unet  或者 PhotonServer

     

    结束语:

    如果你真的按照我说的做,并且认认真真按照我说的路线与方法学了下来,谢谢你愿意相信我,也愿意相信你自己。带着你努力的成果与这股学习力,去找工作吧,社会不会辜负愿意努力的人。

    作者:丁祺

    QQ:1968548010

    版本:v1.1;

    展开全文
  • 一、Unity3D 5.0.1-示例项目“汽车游戏”的展示及开发准备

    学习之前首先给大家提供一下Unity3D 5.0.1的各操作系统的安装文件及示例项目等下载地址:

    Win版:
    32位:
    http://netstorage.unity3d.com/unity/5a2e8fe35a68/Windows32EditorInstaller/UnitySetup32.exe
    链接:http://pan.baidu.com/s/1mgBpsLi 密码:x548

    64位:
    http://netstorage.unity3d.com/unity/5a2e8fe35a68/Windows64EditorInstaller/UnitySetup64.exe
    链接:http://pan.baidu.com/s/1mg43INu 密码:42q9


    这次5.0.1的发布,除了要安装上述的安装包,还要安装下述资源。
    内置着色器
    http://netstorage.unity3d.com/unity/5a2e8fe35a68/builtin_shaders.zip
    链接:http://pan.baidu.com/s/1c0hd0zu 密码:vxrn
    示例项目
    http://netstorage.unity3d.com/unity/5a2e8fe35a68/WindowsExampleProjectInstaller/UnityExampleProjectSetup.exe
    链接:http://pan.baidu.com/s/1hqu20mC 密码:tb8j
    标准资源
    http://netstorage.unity3d.com/unity/5a2e8fe35a68/WindowsStandardAssetsInstaller/UnityStandardAssetsSetup.exe
    链接:http://pan.baidu.com/s/1qWFkTlE 密码:vk9g
    ------------------------------------------------------------------------------------------------------
    Mac版
    安装包
    http://netstorage.unity3d.com/unity/5a2e8fe35a68/MacEditorInstaller/Unity.pkg
    链接:http://pan.baidu.com/s/1kTildSr 密码:qhjc

    内置着色器
    http://netstorage.unity3d.com/unity/5a2e8fe35a68/builtin_shaders.zip
    链接:http://pan.baidu.com/s/1qWQana0 密码:9m8q

    标准资源
    http://netstorage.unity3d.com/unity/5a2e8fe35a68/MacStandardAssetsInstaller/StandardAssets.pkg
    链接:http://pan.baidu.com/s/1bnnRcuz 密码:3yfm
    示例项目
    http://netstorage.unity3d.com/unity/5a2e8fe35a68/MacExampleProjectInstaller/Examples.pkg

    ********************************************************************************************************************************************************


    首先,给大家一个学习的视频链接,全部免费的,主讲是Mark老师,个人觉得讲的还是不错的。你注册后登陆即可观看全部视频!

    链接如下:http://edu.9miao.com/course/8。课程如图:



    在我们安装好Unity3D 5.0.1之后,安装示例项目程序“UnityExampleProjectSetup.exe”即可,我们依次打开安装后的目录:Assets\SampleScenes\Scenes,之后打开Car.unity,如图所示:


    我们运行后可以看看效果,运行后可以用鼠标点击屏幕右上方的“MENU”按钮,可以看到有一些例子,主要包括:2D、人物、粒子效果、交通工具等。如图:


    一、“2D”就不解释了,如图:



    二、“Characters”-人物,这里包括:“第一人称”、“第三人称角色”、“第三人称的AI角色”(鼠标左击地面自动行走)、“滚动的球”(键盘行走控制,鼠标移动调整人物视角)。

    如图:



    三、“Particles”-粒子效果,粒子效果包中包括:“Exploision”(爆炸)、“Firecomplex”(火球)、“Firemobile”(多个火球)、“Duststorm”(沙尘暴)、“Steam”(蒸汽)、“Hose”(水管喷水)、“Fireworks”(烟花)、“Flare”(闪光点)。

    如图:




    四、“Vehicles”-交通工具,主要包括:“Car AI”(智能漫游汽车)、”Car“(汽车)、”Jet Plane“(喷气式飞机)、”Propeller Plane“(螺旋桨飞机)、”Jet Plane AI“(智能漫游喷气式飞机)、”Propeller Plane AI“(智能漫游螺旋桨飞机)。

    如图:



    我们在Project文件列表中找到”Standard Assets\Vehicles“下的Car文件夹,右键导出资源包,为我们之后制作汽车游戏做准备。提示:这里勾选掉默认的“inculd dependencies”选项,去掉依赖包。如图:
















    展开全文
  • 导入官方标准资源包Standard Assets,使用其中的Car Controller和Car User Control脚本。 注意:黄色框内即为需要拖拽入Car Control组件中的,必须要保证他们的local的轴向和位置一致。   ...
  •  这是一款使用unity3D开发的虚拟城市漫游游戏,实际上博主是非常喜欢这类游戏的,在城市里面自由地去浪是多么随意的一件事(雾)。  最近VR和AR莫名火起来了,然而穷到吃土,入手了Google cardboard,店家顺便...
  • 红绿灯的模型,本来也是想要在网上下载结果找来半天没有找到相应的资源,于是就自己用3dmax做了一个,当然导出的时候一定要记得是fbx的格式,否则是导入不进去unity的。 其实红绿灯的变化无非就是相应的灯的暗灭,...
  • PCL点云unity3D可视化

    2020-03-31 23:07:04
    下面这种方式是通过unity3D先构建出3D地图,将固定的物体大楼,交通灯,标志牌,等构建出来, 根据车辆当前位置,速度,传送到unity中,和当前的点云包,发送到unity进行解析,并通过画射线的方式展示...
  • 分享一款个人Unity3d软件设计开发实例 1 概述 软件制作过程中感觉有些像在做游戏,本软件为个人兴趣,还在测试制作阶段,仅用于学习交流。通过导入实际测量点云数据和抽样钻孔数据信息,采用DTM三角网三维建模技术和...
  • 简介:新项目中需绘制可无限循环的2D多边形路面,于是写了个2D多边形生成器,包括Mesh绘制,添加阻挡及路面描边3个部分,代码如下
  • Unity3D学习路线与学习经验分享 该博文出自作者15游02 丁祺,是一篇非常全面的Unity3D学习路线。作者通过不同切入点与角度,并根据以上人群的不同技术程度,由浅入深,分享了他的学习及工作经验。下面让我们进入主题...
  • Unity3D 脚本参考

    2012-02-01 09:06:56
    Unity3D 脚本参考 核心提示:一、脚本概览这是一个关于Unity 内部脚本如何工作的简单概览。Unity 内 部的脚本,是通过附加自定义脚本对象到游戏物体组成的。在脚本对象内部不同志的函数被 特定的事件调用。最常用...
  • 一、准备 1、创建一个Shader和一个...3、给Mesh Filter拖拽一个简单的网格(我用的是unity自带的标准资源Standard Assets/Water (Basic)/Objects目录下的waterPlaneMesh) 4、将写好的Shader 赋给创建的材质上,并选中
  • 前面我们已经讲解了按钮制作、按钮的位移、缩放、渐变的实现,现在我们来讲解另一块房地产VR核心业务模块。项目简介、动态交通。这两个模块是平面展示中的核心模块。 现在我们来讲解一下,项目简介、动态交通的制作...
1 2 3 4 5 ... 18
收藏数 354
精华内容 141
关键字:

unity3d实现交通