1.准备:配置Unity3d环境和用VS2019写C#脚本

首先,配置Unity3d环境推荐使用是UnityHub作为平台,然后在UnityHub里边下载Unity3D版本,笔者这里选用的的是2019.4.16f1c1版本,值得注意的是由于Unity给的人机认证邮件的图片源是google的,因此注册的时候是需要翻墙的,挂个梯子验证邮箱就可以了
然后,就是配置VS2019写C#脚本的环境,这里放一个人家博客
VS写C#脚本
此篇文章

以上环节都搞定了之后,就可以正式开始进入Unity3D的学习了。

2.预制体及其编辑(prefab)

概念:是预先制作好的物体(模板),将游戏对象事件制作好,作为资源备用。一般用于游戏对象的动态创建。
预制体的创建方法是:
在Hierarchy窗口选定当前场景的物体,然后拖入下面Project里面的Assets的目标文件夹中,这样就创建了一个预制体
预制体实例(prefab instance),根据prefab制作出来的实例,使用预制体,可以快速创建多个实例(相当于一个模板)
预制体资源,是可以单独编辑的:
①在Project窗口,双击*.prefab资源
②在Inspector窗口,点Open prefabs
③在Hierarchy窗口,找到预制体的实例,点右侧的小箭头
值得注意的是,就算实例已经被创建出来,而后面预制体再被改变了,那么已经被创建出来的实例也会被改变。

3.使用物理组件的注意事项

当使用物理引擎的时候,游戏对象的大小比刚体的质量更重要。如果你发现刚体的行为不是你所期望的,比如移动的太慢,漂浮,或者不能正确的进行碰撞,尝试一下修改你的模型的缩放值。Unity的默认单位是1 unit = 1 米,物理引擎的计算也是按照这个单位来的。比如,一个摩天大楼的倒塌与一个由积木搭成的玩具房子的倒塌是完全不一样的,所以,不同大小的对象在建模时都应该按照统一的比例。

对于一个人类角色模型来说,他应该有2米高。可以创建一个Box来作为参照物,默认的Box为1米,所以一个角色应该是Box的两倍高。

当然,你也可以通过修改导入模型的缩放来调整比例,如果你不能直接修改模型本身的话。在Project面板中选中模型,调整其Importer属性,注意不是变换里的缩放。

如果你的游戏需要你实例化具有不同缩放值的对象,你也可以调整变换里的缩放值,但是物理引擎来创建这个对象的时候会额外多做一点工作,这可能会引起一点性能问题。这个问题不会太严重,但性能显然会比上面两种方法低。同样要注意的是,non-uniform scales也会引起一些问题,如果这个对象具有父对象的话。基于以上原因,尽可能的在制作模型的时候就按照Unity的比例来建模。

4.物理组件之刚体

描述

刚体能让你的游戏对象被物理引擎所控制,它能通过受到推力和扭力来实现真实的物理表现效果。所有游戏对象必须包含刚体组件来实现重力、通过脚本施加力、或者与其他对象进行交互,这一切都通过NVIDIA的PhysX物理引擎来实现。

属性

Mass 质量,单位为Kg,建议不要让对象之间的质量差达到100倍以上
Drag 空气阻力,为0表示没有阻力,infinity表示立即停止移动
Angular Drag 扭力的阻力,数值意义同上
Use Gravity 是否受重力影响
Is Kinematic 是否为Kinematic刚体,如果启用该参数,则对象不会被物理所控制,只能通过直接设置位置、旋转和缩放来操作它,一般用来实现移动平台,或者带有HingeJoint的动画刚体
Interpolate 如果你的刚体运动时有抖动,尝试一下修改这个参数,None表示没有插值,Interpolate表示根据上一桢的位置来做平滑插值,Extrapolate表示根据预测的下一桢的位置来做平滑插值
Freeze Rotation 如果选中了该选项,那么刚体将不会因为外力或者扭力而发生旋转,你只能通过脚本的旋转函数来进行操作
Collision Detection 碰撞检测算法,用于防止刚体因快速移动而穿过其他对象
Constraints 刚体运动的约束,包括位置约束和旋转约束,勾选表示在该坐标上不允许进行此类操作

应用场景

总而言之,Unity3D中任何物体想要受到重力、外力的影响都必须包含一个刚体组件。

常用方法

(1)AddForce函数:对刚体施加一个指定方向的力,使其发生移动。
函数表示如下:
function AddForce(force: Vector3,mode: ForceMode=ForceMode.Force) : void
函数ForceMode有四种模式:Force、Impulse、Acceleration、VelocityChange
Force表示施加一个恒力, Impulse表示施加一个瞬间冲击力
Acceleration表示对物体施加加速度 VelocityChange 表示改变物体速度
(2)MovePosition函数:将刚体移动到position位置。
函数表示如下:
function MovePosition(position : Vector3) : void
3)MoveRoration函数:将刚体旋转相对应的角度。

5.物理组件之碰撞体

描述

碰撞体使得物体具有了"体积这一特性",当其他物体与之交互时,能够感知到这个物体的存在

常用的碰撞体

Box Collider:盒子碰撞体(骨骼),形状是立方体,用于包裹类似“立方体”的模型,例如门、盒子等

组件属性:

(1)Center:骨骼的中心点
(2)Size:骨骼的大小

Sphere Collider:球形碰撞体(骨骼),形状是球形,用于包裹类似“球形”的模型

组件属性:
Radius:骨骼的半径

Capsule Collider:胶囊碰撞体(骨骼),形状是胶囊

组件属性:

Radius:骨骼的半径
Height:骨骼沿某个方向放缩的高度
Direction:调整放缩高度的对应方向

Mesh Collider:网格碰撞体,万能碰撞体,可以用于包裹所有复杂的模型(可能需要自己配置该组件)

组件属性:

Mesh:根据指定的网格,生成碰撞体骨骼

6.应用方法:碰撞检测(Collision检测)

描述

Collision检测的实现是基于Collider这个组件来完成的,使用Collision检测需要用到下面三个重要的方法:OnCollisionEnter()在刚体与刚体接触时立即调用此方法、OnCollisionStay()在刚体与刚体碰撞中调用此方法、OnCollisionExit()在刚体与刚体碰撞结束时调用此方法。

触发条件

发生碰撞(Collision)的前提是:双方都有碰撞器,且至少一方有刚体。此时将产生物理碰撞(也就是不会穿模)

代码示例

子弹碰撞体检测,并且做出对应的扣血动作

 private void OnCollisionEnter(Collision collision){if (isFirstTime){isFirstTime = false;return;}//分好类后就按照类里的东西来操作Debug.Log(robotType + "检测到了碰撞");this.valNow = slider.value;//更新//1.首先是进行该机器人的扣血操作this.valNow -= damage;//2.然后检测是不是死了if (this.isDestory()){Destroy(robotNow);Debug.Log(robotNow + "寄了");Application.Quit();}//如果没死,那么就更新UI上的数据healText.text = "血量:" + this.valNow + "/2000";slider.value = this.valNow;}

7.应用方法:触发检测(Trigger检测)

描述

使用Trigger检测需要勾选IsTrigger属性,并用到下面的三个重要方法:OnTriggerEnter():开始碰撞、OnTriggerStay():碰撞中 、 OnTriggerExit():结束碰撞。

触发条件

Trigger将造成非物理碰撞(将会产生穿模现象),发生接触(Trigger)的前提是:双方都有碰撞器,且至少一方有刚体,且至少一方勾选了IsTrigger属性。

代码示例

private void OnTriggerEnter(Collider other){if (!(transform.tag.Equals("F1Buff"))) {//筛选信号发出者return;}if (!isTouch)//F1Buff区域的作用的是为PlayerRobot机器人增加200点血量,注意不要溢出{healText = GameObject.FindWithTag("PlayerRobotUI").transform.GetChild(0).GetChild(3).GetComponent<Text>();slider = GameObject.FindWithTag("PlayerRobotUI").transform.GetChild(0).GetComponent<Slider>();valNow = slider.value+200;if (valNow >= 2000){valNow = 2000;}slider.value = valNow;isTouch = true;healText.text= "血量:" + valNow + "/2000";Debug.Log("PlayerRobot的血量恢复了两百");}//最终将触发flag调整为true;}

Unity3d学习日记 (1)为场景内物体添加基本逻辑和脚本代码相关推荐

  1. 我的Unity3D学习日记-06(自己动手制作FlappyBird)

    自从上次跟着敲了官方示例拾荒者之后,开始对Unity制作2D游戏感兴趣了起来,虽然本文标题叫做Unity3D学习日记.但是Unity其实本来名字里是没有3D这俩字的--很有名的雨血前传 蜃楼就是一个使 ...

  2. Unity3d学习日记 (2)C#脚本编写优化以及全自动敌人脚本实现实战

    需求分析 需要编写脚本控制敌人的行为,完成包括巡逻.射击.追击.逃跑四个功能 解决思路 考虑机器人的行为受一个决策树的影响,编写有限状态自动机形成决策树,通过条件分支语句来对机器人的行为进行限制和控制 ...

  3. Unity3D学习笔记之八为场景添加细节(一)

         这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程<Unity游戏引擎的基础入门视频教程>,下载链接附在第二篇学习笔记中.      我花了30分钟做了一个中等大小的迷宫场 ...

  4. Unity3D学习日记8

    1.创建Socket对象 解析:Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp)这一行用于创建一个Socke ...

  5. Unity3D学习日记6

    1.坐标转换 解析: [1]物体的世界坐标到屏幕坐标的转换 // cb代表场景中的一个方块物体,得到的vector3中的z为相机离cube物体的远近 Camera.main.WorldToScreen ...

  6. Unity3D学习日记3

    1.Unity资源商店 解析:Unity资源商店中提供了多种游戏媒体资源供下载和购买,例如人物模型.动画.粒子特效.纹理.游戏创作工具.音乐特效.功能脚本和其他类拓展插件等. 2.Unity3D脚本中 ...

  7. python oop求三角形面积公式_python学习日记(OOP——类的内置方法)

    __str__和__repr__ 改变对象的字符串显示__str__,__repr__ 我们先定义一个Student类,打印一个实例: classStudent(object):def __init_ ...

  8. Unity3d学习日记(四)

      跟着Unity的教程做了两天,做成了一个叫作survivalShooter的游戏,感觉还挺有意思的,做好后我就把它挂到了个人网站上.   如果你在我的网站的主页的话,点击这个图片就能跳到游戏界面. ...

  9. Unity3D学习日记(十一)UI滑动条和全景图控制

    最近忙着学UE4去了,没啥时间弄unity的玩意,公司老板说PC的VR做完了还要附送一个全景APP给他们,最近也没想到好写的玩意,就把这个UI滑动条和全景图的控制简单案例拿出来写写.(PS:大神们请绕 ...

最新文章

  1. (27) java web的struts2框架的使用-基于表单的多文件上传
  2. java user directory,Java ProcessBuilder directory()方法与示例
  3. 火星今天飞抵西非国家寻找埃博拉疫情
  4. stm32呼吸灯程序_学习STM32从点灯开始!
  5. 3/7 SELECT语句:过滤(WHERE)
  6. “千里家书只为墙,让他三尺又何妨”,六尺巷是怎么形成的?
  7. 如何将示例bacpac文件导入到Azure SQL数据库
  8. Server Installation for Jitsi Meet 2
  9. keil中编译时出现*** ERROR L107: ADDRESS SPACE OVERFLOW
  10. 马哥linux第30期,马哥Linux第三周
  11. 理解上下文切换带来的性能影响
  12. 一杯凉茶 mysql_那一杯凉茶
  13. 带得动ps和python的笔记本_求一性价比高,轻薄,运行速度快,带得动ps,pr等软件的笔记本推荐...
  14. Snapde和Excel、PowerPivot、WPS打开超大CSV文件性能比较
  15. 【第64期】豆瓣9.8分,周志明的《凤凰架构》
  16. OpenShift全力拥抱Operator:Kubernetes运维自动化背后的战争
  17. 深度技术 GHOST XP SP3 快速装机专业版 V2013.03
  18. 气动调节阀的安装细节以及技巧
  19. Xshel和Xftp免费版下载
  20. 纽约大学文理学院转计算机专业,纽约大学硕士本院转专业 劝你谨慎更换专业...

热门文章

  1. iOS安全逆向之旅---逆向基本知识概要介绍
  2. 学习6大设计原则、23种设计模式
  3. 深入理解内存:原理简介
  4. 计算机重启遇到你的账户已被停用,win10系统提示administrator您的账户已被停用的解决方法...
  5. 原来BIOS放电是要在断电的情况下进行的
  6. 计算机如何寻址硬盘,再来理解一下硬盘
  7. 磁盘分区MBR与GPT详解
  8. 明明输给了 SpaceX,OneWeb 为什么还能拿到英国政府的钱?
  9. Android JNI总结
  10. 冰蝎(Behinder)双击无法打开