U3D学习笔记(4)



1.Vector3.dot 表示两个向量点乘,如果结果大于0,则夹角为锐角,反之为钝角。
 当然最好用.normalize 初始化后,这样得出来的点乘值肯定在-1到1之间,相当于得出了cos 值,就可以精细的判断两个向量之间的角度了。
 如
 Vector3 toOther = enemy.transform.position - myTransform.position;
 dot = Vector3.Dot(forward , toOther);
 可以判断other 在物体的前方还是后方
2.Translate 函数是沿着本地(相对)坐标平移,所以
 Transform .translate (Vector 3.forward )里面的Vector 3.forward 表示的是在本地坐标系下的(0,0,1),
 那当然就是物体的前方了而不是时世界的前方了,所以这里不要用transform .forward
3.Ugui 里对于非button 组件该怎么添加像点击,高亮状态时触发别的事件(如图片旋转,放大)呢?添加event trigger 即可,
  实际上button 组件也就是一个添加了event trigger 并且事先写好了很多里面函数的组件而已
4.Canvas的worldspace 模式可以在3d 世界上显示界面,可以实现游戏人物看游戏里如电脑屏幕里的内容(内容显示自己的canvas 里的东西)
5.Event trigger 里的
  update slected 表示点击按钮后开启update 方式调用某个函数(如果点击了别的按钮则该update结束调用),可以实现长按人物走路
  deselct ed 表示不选中这个按钮并且不点击别的按钮时时调用某个函数。
  Pointerdown 按下某个按钮调用(但是没有update 功能,所以不能用time.deltatime )
  Pointerup 松开时回调(但是无法影响update selcted )
6.Canvas 的ui Screen mode 选为scale with Screen size 就能自适应了
7.动画相关
 -5动画树的作用相当于lerp ,time .deltatime 这种连续数值来控制动画的转化,而不是一个当满足什么条件时立刻转化这样生硬的转化。但混合树必须用在有同一时间轴的动作上(如走和跑,往左往右)
 -4动画树是为了过渡平滑,而新建动画层然后使用遮罩是为了混合动画。
 -3.亲测动画转化有15帧左右的延迟,即animator .setbool 为true 开始,它不会在下一帧立刻改变动画状态,而是过15帧左右才会改变,所以比如你run状态才能跳跃,松开移动键的15帧以内按下跳跃按钮还是能跳跃的,因为此时还是在跑步状态而非静止状态。
 -2.按键控制动画时必须把状态机里写好的播放该动画的条件全部加进来,如跑步状态才能跳跃,如果按键时不加(&&此时的状态为跑步状态),那么普idle 状态按下按钮也会激活这个bool ,然后当你跑起来的时候会不受控制立刻播放这个动画(因为勾已经打上了)。
 -1.把所有按键控制的动画转化放到一个bool 变量里,播放到多少放在外面,如果按下了某个键,则该bool设 为false ,此时只能响应bool 外的状态变化而不响应按键了。
 0.默认勾选has exit time 是导致动画不响应的原因,它的意思是当第一段动画播放完之后的那段过渡时间里按键才会响应按键
 1.完整的动画系统应包括:模型,角色控制组件,动画片段,动画脚本,animator组件(里面包含animator control 资源)这5项。
 其中
 1.animator组件是关联角色和动作的桥梁,其中的核心animator control里包含了状态机,混合空间动画等。一个animator 里可以有很多动画
 Character control组件用来设置重力,碰撞等系数。不可不加
 2.创建遮罩(avatar mask)以后可以使对象在播放某一动画时,身体被遮罩的那部分不播放动画,如抬东西走路手不要动,就可以遮掉手的走路动画.
 貌似可以把人物的不需要改变动作的地方遮起来就可以使两个动画一起使用,如跑路时挥手
 3.若只能从跑状态转换到跳状态,则在跑和跳之间设置转换,静止和走路状态就无法跳跃
 4.开启了编辑器左上角的红点开始你的一切设置就被保存到动画里而不会影响原来场景
 5.mirror 选项可以左右对调动画
 6.condition 里设置转化条件参数,然后脚本里修改,默认的是在一个动画结束后转化到另一个状态
 7.做hash id 时,如果是一个动画状态(如走路状态),那么必须写上是哪个层的这个状态(stringtohash (baselayer.dying ))),而如果是参数就不用写是哪个层的了,因为一般参数是全层通用的。
 8.一个动画里的speed 不要随便乱改啊,它表示的是动画播放速度而不是移动速度
 9. 用AnimatorStateInfo来判断当前动画是否为某个层的某个动作
 10. 做完了一个人物,假如我们还有另外的角色需要做同样的东西,那么只需要给那名角色模型建立好Avatar,然后把之前做好的Animator Controller拖给他就行了,这样不同模型之间的动画就可以共享了。
 11.用normalize time(规格化动画时间,最大为1,小为0) 来判断动画放到十分之几了,0.5表示一半
 12. 进入下一个动画状态记得把前一个动画状态的条件设置为false ,否则会出现播放完这个动画回到idle 又满足了跑步状态直接跑步这种情况
 13.旧动画系统animation 可以编辑新动画系统Mecanim 的animator control 组件里的动画,如按钮动画就可以用animation 编辑
 14.有些动画设置成humanoid 后会失去原来的动作,可能还在空中。
 15.复制粘贴一个动画预设体然后修改里面的动画长度就又是一个动画了
 16.blend tree 用来实现过渡动画,如从走到跑之间的过渡,走往左到往右的过渡
8.协程
 StartCoroutine(函数字符串)
 1.可以理解为多线程
 2.被调用函数必须要以 IEnumerator作为返回类型
 3. IEnumerator类型必须以 yield return x 来返回,用yield break 来中段。
 4.yield return null(本质和return 差不多,但是它能够保存状态变化,使得下一次输出时如果里面值变化的话结果不一样) 加在循环语句中,
 可以使得本来一帧执行完的东西变成n帧来执行(如while (小于n ),创建n 个物体,在while 里是瞬间(一帧执行完的,加了那句话后就是一帧场景一个物体。)),
 这种功能其实就是一个小update ,执行完就结束。极为有用
9.网络基础:
 -2.套接字(socket )是完成接口对接后,用它里面的函数来收发信息。一个Socket 定义时必须知道地址,接口。
 -1.端口分为逻辑端口(进程)和物理端口(路由器,鼠标接口)。通过ip 标识到某台计算机,然后通过逻辑接口(进程)进行通信
 0.服务器先建立好连接,等待客户端连接,然后客户端主动发起连接。所以都要经过连接这一步
 1.rpc 指对非连续动作的服务器发送接受消息,如放技能。(与行走这种连续对立)
 2.tcp 传输层ip 网络层http 应用层
 3.TCP (传输层)保证数据成功传达(否则会不断重传), ip 指英特网分配给每个电脑的地址。
 4.客户端或服务器端接收到数据流后复制成一个数据包,然后进入队列等待处理
 5.tcp/ip 用于传输,但是传输内容是流的形式,通过https或ftp 等才能把内容翻译成用户看得懂的。Socket 是对TCP /ip 协议里函数的封装(api 库函数)
 6.原理是利用ip 把所有愿意接入名为internet 的局域网连接起来
    7.收发网络消息方式2 OnSerializeNetworkView
  0.聊天
  1.必须开启Network view 组件的实时同步功能
  2.如果你是服务器端,就调用“istream.isWriting”部分的代码,你就可以发送数据。如果你是客户端,就调用“else”部分的代码,你就只能接收数据
  3.里面默认是Stream .iswriting 除非加if 判断才能出来两种状态
10.U3d 中Network 常用函数
 1.onNetwork connected /disconnected (Network .player )每当玩家从服务器连接或断开时调用,player 表示断开的玩家(仅服务端可调用,每次一次)
 1.(2)Ondisconnectedfrom server/on connected to server 仅 客户端调用一次,可以把创建角色预设体和可以在里面写上重新加载场景就相当于初始化了场景,那么所有该客户端创建的东西自然都消失了(间接的destroy )
 2.Network .destroyGameobject用来清理网络上在某一个对象,如断开连接或者怪物消灭时调用,但如果是断开连接时使用,那么本地不会被清楚
 3.OnNetwork institution,和Network .institution 组合使用 当网络实例化时调用,可以把是不是本地创造的对象判断放在里面




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值