跟诸子学游戏 Unity3d小技巧(杂项)

1:C#  https://www.nuget.org/ 第三方库 上面查找常用的类库,如json解析库litjson /Newtonsoft.Json   单元测试框架NUint   对象关系映射器Entity Framework(数据库方面相关)  Log4net日志信息相关.

2:unity3d编辑器:所有的图像在wireframe情况下,都是三角形展示,正方体8个顶点12个三角形,圆形有很多个三角形组成,游戏里面看到的都是由点和三角形组成.前面是自建3D物体使用到的原理,例子:使用meshfilter绘制自身的网格获取meshfilter网格属性mesh,组织多面体顶点,将mesh的vertices顶点属性赋值,然后将这些值,按照三角形triangles的规则进行绘制.

3:有限状态机  https://www.jianshu.com/p/8ff1da8f741c

4:解惑:1:如何让一个button的方法在unity编辑器里面动态显示绑定到上一个场景的物体脚本上面的方法,答案是无解,必须要使用脚本动态绑定.2:unity从分线程调用到主线程使用loom(百度搜下,别人已经封装好)脚本,unity没有多线程概念,C#有这个概念,unity使用的C#的多线程概念,可以在游戏里面使用多线程.3:场景一旦转换过后,上一个场景就会被销毁,连带脚本,脚本上面的引用,都会有GC垃圾回收器管理.

5:unity3d中Layer用32位表示0000 0000 0000 0000 0000 0000 0000 0000 

第九层就表示成

0000 0000 0000 0000 0000 0010 0000 0000

1<<9 表示向左移动9位

6:在一个字段上面写特性[Range(0,6)] 则会出现如下

效果

7:让一物体跟随鼠标的箭头移动而转向,例如:主角的朝向,坦克的炮管朝向等,然后只需要让角色超前(transform.forward)走即可

第一种方法:

        在update方法中

        Plane playerPlane = new Plane(Vector3.up, transform.position);

        Ray RayCast = Camera.main.ScreenPointToRay(Input.mousePosition);

        float HitDist = 0;

        if (playerPlane.Raycast(RayCast, out HitDist))

        {

            Vector3 RayHitPoint = RayCast.GetPoint(HitDist);

            Quaternion targetRotation = Quaternion.LookRotation(RayHitPoint - transform.position);

            Turret.transform.rotation = Quaternion.Slerp(Turret.transform.rotation, targetRotation, Time.deltaTime * turretRotSpeed);

        }

第二种方法:

            Ray ray =Camera.main.ScreenPointToRay(Input.mousePosition);

            RaycastHit hitInfo;

            bool isCollider = Physics.Raycast(ray, out hitInfo);

            if (isCollider && hitInfo.collider.tag == Tags.ground) {

                    targetPosition = new Vector3(hitInfo.point.x, transform.position.y, hitInfo.point.z);

                    this.transform.LookAt(targetPosition);

              }

第一种方法比第二种要好.

8:让摄像机跟随主角移动:创建一个脚本,挂载到摄像机上面.


照抄即可

/// /// 主角对象

    /// public Transform cubeT;    ///    /// 摄像机相对于主角的位置,唯一,获取一次即可

    /// private Vector3 relativePos;    void Start()    {        relativePos = this.transform.position;    }    void Update()    {        ///主角的移动后的位置,加上相对位置,表示摄像机最终需要到达的位置        Vector3 newV3 = cubeT.transform.position + relativePos;        transform.position = Vector3.Lerp(transform.position, newV3, 2.0f * Time.deltaTime);        ///相对平稳滑动到照射主角的角度.        Quaternion cubeQ = Quaternion.LookRotation(cubeT.transform.position - transform.position);        transform.rotation = Quaternion.Slerp(transform.rotation, cubeQ, 2.0f * Time.deltaTime);    }

9:C#中使用protobuf进行数据传输 https://github.com/mgravell/protobuf-net  从上面下载项目然后进行学习,在项目里面加入protobuf是通过VS NuGet包管理器加入,https://www.nuget.org/packages/protobuf-net NuGet包地址下载完毕之后会有protobuf-net.dll 这个文件,将其放入unity3d中,既可以使用.

10:当你设置gamemanager为DontDestroyOnLoad时,从当前场景进入下一个场景,再返回回来会产生2次加载,解决方法是游戏开始时加载一个整个游戏期间只加载一次的场景,永远不退回次场景.

gamemanager被多次加载

11:当在lambda表达式中使用任何局部变量时,C#会生成一个类,并将该变量作为该类的一个属性,但是我们无须定义该类,C#编译器会自动帮我们实现;

12:使用刚体组件时需要注意:1.parenting:父子级:当一个游戏对象受物理系统控制时 ,它会以半独立的方式随着父对象的位移而移动 ,如果任何父对象有所运动的话 ,这些父对象会推着子对象的刚体跟随它们一起运动。不过这些刚体由于受重力影晌的原因还是会下落而且对于碰撞事件也是会有所晌应的。2. scripting:  脚本:可通过在游戏对象的刚体上添加AddForce()和AddToque()函 数 ,达到通过脚本来添加作用力或扭矩力 ,来对刚体进行控制 。要注意的是 ,在使用物理系统时,不直接改变对象的Transform组件的属性 ;3.Animation:动 画:有些情况下 ,如需要创建布娃娃效果的时候 ,需要在动画和物理系统间切换对象的控制权 。因此当刚体被标记为动力学模式时 ,就不会受到如碰撞、作用力或其他物理效果的影晌 ,这就意昧着需要直接操作该对象的Transform组件属性来控制该对象了。动力学刚体会影晌其他的对象 ,但其自身并不受到物理系统的影响。例如 ,那些绑定到动力学对象上的关节会约束其他绑定到该对象上的刚体 ,动力学刚体在碰撞时会影晌其他的刚体 。

13:当一个物体是否在另一个物体的视野范围内,也就是人眼向前看一个扇形,需要判断角度和距离,角度是 扇形角度/2 ,当其他物体与当前物体的夹角大于这个结果,则不再视野范围内,如果小于这个结果,则在这个视野范围内,

if( Vector3.Distance(playerTransform.position,transform.position)<=viewDistance)//距离

{ Vector3 playerDir = playerTransform.position - transform.position;

      float angle = Vector3.Angle(playerDir, transform.forward);

   if (angle <= viewAngle / 2)//夹角是否小于 视野范围扇形角度的一半

{Debug.Log("InSight"); } }

14:




(ps:待后续)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容