1.准备C#的开发环境 VS2015, Unity3D 5.5.1

2.准备通信协议 protobuf 3.3.0

具体请参考:Protobuf 3.3 使用总结

3.引入日志系统 :C#日志系统 Log4net使用总结

4.搭建并调通和server之间的通信框架,通过反射注入到各个Action去处理,达到了命令行级别的通信

5.熟悉 Unity3d目录结构

4.NGUI 基础准备,下载NGUI版本,用的是 3.9.0b,熟悉NGUI的一些基本使用

4.1 通过各种对比,改成用原生的UGUI,选择NGUI还是uGUI

5.了解 Unity 3D游戏客户端基础框架 ,特别是Advanced CSharp Messenger

6.pureMVC的熟悉 http://puremvc.org/docs/PureMVC_IIBP_Chinese.pdf

http://www.cnblogs.com/zhanlang96/p/7259187.html

http://www.cnblogs.com/HangZhe/p/7381040.html

//TODO

参考

http://blog.csdn.net/yuxikuo_1/article/category/2840981/14

教学

http://www.taikr.com/my/course/34

nuget相关

nuget的配置文件:

%appdata%\NuGet

快捷键:

CTRL+D 复制组件

Unity直播课程:使用虚拟相机和Timeline配合制作机位切换(5/19录播)

CTRL+D 复制组件

CTRL+6 打开UI的动画设置面板

CTRL+N 创建新的场景scene

CTRL+SHIFT+F 选中main camera,让Game视角和scene视角一致

比较tag用Unity gameObject.CompareTag替换gameObject.tag,性能要好

枚举类的ID值获取:

type.GetHashCode()

Unity3D 的OnTriggerEnter和OnCollisionEnter方法

如果gameobject已经销毁,那么是无法触发invoke 或者协程

所以如下的操作能让invoke无效:

Destroy(this.gameObject); CancelInvoke("回调函数");

MonoBehaviour的生命周期,awake->onEnable->start

结论

Awake Start OnEnable OnDisable OnDestroy
调用时机 物体实例化时(无论该脚本是否enable) 场景中所有对象的Awake执行完后 物体实例化时(该脚本需enable)
或物体被激活时
或该脚本被激活时
物体被取消激活时
或该脚本被取消激活时
该物体被销毁时
(生命周期内的)调用次数 一次 一次 被激活的次数 被取消激活的次数 一次
(一般性的)调用顺序 总是最先 OnEnable之后 Awake之后 --- ---

注意事项

1.在Start里进行初始化并不很安全,因为它可能会被其他自定义函数抢先,容易引发空引用之类的问题。具体可参考博主puppet_master的相关测试中,“对象初始化的时机”中的第三点。
2.当场景中的多个物体都要调用Awake函数时,各个Awake函数之间的调用顺序无法确定。

Unity--Monobehavior九大生命周期

1. Awake 函数 :在加载场景时运行 , 即在游戏开始之前初始化变量或者游戏状态 . 只执行一次2. OnEnable 函数 :在激活当前脚本时调用 , 每激活一次就调用一次该方法3. Start 函数 :在第一次启动时执行 , 用于游戏对象的初始化 , 在Awake 函数之后执行,只执行一次4. Fixed Update : 固定频率调用 , 与硬件无关, 可以在 Edit -> Project Setting -> Time -> Fixed Time Step 修改5. Update : 几乎每一帧都在调用 , 取决于你的电脑硬件 , 不稳定6. LateUpdate : 在Update函数之后调用 , 一般用作摄像机跟随7. OnGUI 函数 : 调用速度是上面的两倍 , 一般用于老版本的 GUI 显示8. OnDisable 函数 : 和 OnEnable 函数成对出现 , 只要从激活状态变为取消激活状态 , 就会执行一次 (和 OnEnable互斥)9. OnDestroy 函数 : 当前游戏对象或游戏组件被销毁时执行

InitializeOnLoad

[InitializeOnLoad]的且有static构造函数的类会在打开项目时就运行,可以用于编辑器的一些初始化工作。

using UnityEditor;
using UnityEngine;[InitializeOnLoad]
public class GameContext
{static  GameContext(){Debug.Log("GameContext start");}
}

Unity添加注释,在Inspector面板显示提示

Tooltip("显示注释")]//鼠标移到变量上后可以看到汉字

[Header("显示注释")]//直接在面板上显示汉字

===============================

后台装载线程优先级

让您控制需要多长时间来异步加载数据,在后台在加载时游戏,对性能的影响

Application.backgroundLoadingPriority = ThreadPriority.High

装载尽可能多的数据,因此帧率将下降。

加载时显示出良好的快速进度条。

Application.backgroundLoadingPriority = ThreadPriority.Low ;

加载数据速度非常慢,尽量不影响游戏性能的。

在游戏进行时有很好的后台加载。

============================

现在要开发一个点击屏幕开炮发射子弹的功能,说下你的做法?
首先把子弹进行抽象,把属性和行为方法提炼出来,比如具有速度、威力、碰撞大小等属性,具有飞行、碰撞和伤害等行为。
封装子弹的抽象类,可以不继承MonoBehaviour。
监听屏幕点击事件,触发开炮逻辑。子弹通过对象池管理,复用子弹,防止因为频繁创建销毁带来的性能问题。另外,子弹的坐标更新,可以统一由一个弹道控制器的Update遍历每个子弹对象来计算,而不是每个子弹都挂一个MonoBehaviour去更新,因为MonoBehaviour的Update是通过反射被调用的,如果有1000颗子弹,就会调用1000次反射,这样性能上比较差。

延伸
如果现在要做好几种弹道的子弹,可以继承子弹基类,拓展出多种子弹子类,子类中各自实现自己的UpdatePosition接口,弹道管理器通过Update遍历每个子弹调用基类的UpdatePosition接口。

============================

只要判断子弹和目标的距离小于一定的范围就算击中了

Physics.CheckSphere(); //检查给定范围内有没有指定碰撞体。

Physics.OverlapSphere(); //得到指定范围内所有碰撞体。

Vector3.Dot(); //点乘。

Physics.IgnoreCollision(); //忽略指定碰撞层。

==============================

现在Unity对场景管理没有那么严格的分离, 同时可以存在多个场景

可以存在一个主场景, 然后叠加几个 子场景, 不过这些场景都是要加载的, 包括第一个场景, 只不过第一个场景Unity帮你加载了

然后下面那个场景是比较特殊的场景, 那个场景不需要额外加载
那个场景是用来存放一类特殊的GameObject ,他们都有个属性, 不随场景卸载而卸载

如果有这种 GameObject , Unity会自动创建这么个场景, 这个场景的生命周期一直到游戏关闭, 都不会卸载

所以这里的 GameObject 处理要格外当心

==============================

函数式 传参

this.HandleBorn(CreatePlayer,"a",1, e.BornPoint);private void HandleBorn(System.Action<string,int,Vector2> callback,string userName, int playerTemplateID, Vector2 pos)
{
GameObject go = ResourceManager.Instance.LoadAssetSync<GameObject>("Entity/effects/BornEffect").InstantiateSync();go.transform.position = pos;BornEffect effect= go.GetComponent<BornEffect>();effect.Callback = callback;effect.Pos = pos;effect.UserName = userName;effect.PlayerTemplateID = playerTemplateID;Object.Destroy(go, 1f);
}public class BornEffect : MonoBehaviour
{public string UserName{  set; get; }public int PlayerTemplateID{  set; get; }public Vector2 Pos{  set; get; }public Action<string,int,Vector2>  Callback{  set; get; }private void OnDestroy(){Callback.Invoke(UserName,PlayerTemplateID,Pos);}
}

Unity3D学习之路相关推荐

  1. Unity3D学习之路——AI小坦克

    Unity3D学习之路--AI小坦克 作业要求: 坦克对战游戏 AI 设计 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用&qu ...

  2. Unity3d学习之路-牧师与魔鬼

    Unity3d学习之路-牧师与魔鬼 游戏基本介绍 游戏规则: Priests and Devils is a puzzle game in which you will help the Priest ...

  3. Unity3d学习之路-简单AR游戏

    简单AR游戏 简单AR游戏 游戏规则 游戏实现 游戏场景的搭建 游戏逻辑的实现 游戏脚本挂载 游戏打包到安卓平台 实现效果 小结 游戏规则 识别指定图片,显示玩家和防御塔,点击按键对玩家进行上下左右移 ...

  4. Unity3D学习之路Homework4—— 飞碟射击游戏

    简单打飞碟小游戏 游戏规则与要求 规则 鼠标点击飞碟,即可获得分数,不同飞碟分数不一样,飞碟的初始位置与飞行速度随机,随着分数增加,游戏难度增加.初始时每个玩家都有6条生命,漏打飞碟扣除一条生命,直到 ...

  5. Unity3d自学之路(一)

    本文为本人原创,转载请注明:转自:nGeometry的博客,并附上本文源地址. 我一直很向往的一个职业就是游戏开发工程师,也许很多人都觉得不可思议,竟然有人会这么喜欢一个"苦逼"的 ...

  6. 虚幻引擎学习之路:渲染模块之光照系统

    原文链接:https://blog.uwa4d.com/archives/Study_unreal4_Rendering_1.html 写在前面 "UWA什么时候可以支持Unreal引擎?& ...

  7. Redis学习之路(一)--下载安装redis

    redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...

  8. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  9. 前端Vue学习之路(一)-初识Vue

    Vue学习之路 (一) 1.引言 2.更换npm国内镜像源 3.用npm下载Vue 4.Vue全家桶 5.使用命令创建项目 5.推荐插件 6.推荐网站 7.学习扩展 1.引言 先安装node.js环境 ...

最新文章

  1. cf网络原因服务器无响应,CF由于网络原因连接服务器失败请重试 1033_10136
  2. Err:query must begin with SELECT or FROM
  3. 『中级篇』Docker-Stack部署投票应用(50)
  4. 如何显示Organization unit ID
  5. 返回一个二维整数数组中最大子数组的和(二人结对)
  6. 代码整洁之道 垃圾编码收集
  7. 如何通过 OAuth 2.0 使 iOS Apps 集成 LinkedIn 登录功能?
  8. 添加内核驱动模块(2)(mydriver.c+ Konfig+Makefile )
  9. 数字化智慧园区建设方案
  10. cpi 计算机体系结构 转移指令,高等计算机体系结构基本概念总结
  11. jdk安装 系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe
  12. springboot springsecurity报错 **.LoginUser cannot be cast to **.LoginUser
  13. mysql 性能优化方向
  14. Python爬虫进阶之爬取篮球赛数据
  15. Redis 持久化,写入磁盘的方式
  16. Mac运行已安装软件提示“XXX 已损坏,打不开。移到废纸篓/推出磁盘映像。”解决方法
  17. VCP-DCV6.7学习心得
  18. win10下的Cmd命令的初步认识
  19. FFmpeg av_dump_format输出的tbn、tbc、tbr、PAR、DAR的含义
  20. 在线html 生成链接,网址链接生成器

热门文章

  1. Kafka读写机制深度剖析
  2. oracle 刷新组怎么让他立即刷新_刺激战场春节模式怎么玩?年兽在哪刷新?
  3. 进程间通讯Messenger
  4. 大一c语言学霸笔记图片,大一期末考试复习计划
  5. 用Java解决牛客网华为机试题目HJ87
  6. Android实现点击跳转本地浏览器打开网页的精简方式
  7. FlaskFul返回中文被转义unicode解决方法
  8. html+Css3炫酷动态魔方代码
  9. oracle的hints,Oracle使用hints的调整机制实操
  10. php去除最后一个空格,php去除头尾空格的2种方法