草庐IT

U3D简单知识点

还是粽子 2023-11-11 原文

目录

1、人机交互Input类

(1)常用外部设备
鼠标、键盘、手柄、摇杆、触屏、VR手柄、VR

(2)Input键盘输入方法
GetKey(按住)、GetKeyDown、GetKeyUp
eg: Input.GetKey(KeyCode.Space)返回布尔值

(3)Input鼠标输入方法
GetMouseDown、GetMouseUp
Input.GetMouseButton(0); ——鼠标左键0,鼠标右键1,滑轮2
mousePosition:左下角坐标为(0,0)

2、Input 虚拟轴/虚拟按键

(1)虚拟轴
触屏类:Mouse X 、Mouse Y、Mouse Scrollwheel
键盘操作类:Vertical、Horizontal

(2)获取方法
GetAxis([string])
GetAxis( )和GetAxisRaw( )的区别
Input.GetAxis(“Vertical”)有加速度
Input.GetAxis(“Vertical”):1.0 —>-1.0
Input.GetAxisRaw(“Vertical”):1.0 —>0 —>-1.0

(3)虚拟按键
GetButton、GetButtonUp、GetButtonDown

(4)调节面板
Edit->Project setting -> Input

3、移动方向

transform.forward:z轴
transform.up:y轴
transform.Translate(Vector3.righthmoveSpeed*Time.deltaTime,Space.World);(少用)
transform.position += new Vector3();

4、向量点乘

a · b =|a||b|cosθ
结果是一个标量
如果夹角范围0-180度,(<90°)大于0,(>90°)小于0
通常用来判断敌人在前还是在后

5、向量叉乘

a x b
结果是一个向量,法向量⊥ab向量所在平面
如果法向量向上,则b向量指向a向量的右边
通常用于判断敌人在左还是在右

6、欧拉角

物体绕xyz轴(世界坐标)选择的角度:EularAngle
欧拉角容易出现多个欧拉角的值表示一个旋转
四元数:避免万向锁的问题
将欧拉角转为四元数:Quaternion.Euler(new Vector3);

7、unity脚本的生命周期

(1)开始
Awake():唤醒函数,在游戏开始时执行一次,脚本组件不可用时,依旧执行
OnEnable():在脚本组件被设置为可用(勾选)时调用一次
Start():在OnEnable()后执行,整个游戏开始时,只执行一次

(2)持续
FixUpdate():每隔一定时间间隔执行一次(0.02s默认)
Update():每帧执行一次
LateUpdate():(先后顺序会用到),每帧执行一次
OnGUI():每帧调用两次,用于渲染UI(旧版的)

(3)收尾
OnDisable():当脚本组件被设置为不可用的时候,调用一次
OnDestroy():当脚本组件被销毁的时候

8、常用调试方法

(1)打印
Debug.Log():引用UnityEngine;
print:Monobehaviour的方法

(2)划线
DrawLine(Vector3 start, Vector3 end);
DrawRay(Vector3 start, Vector3 dir);

9、Monobehaviour

Monobehaviour继承关系:Mono->Behavior->Component->Object(和System.Object的不是一个)
Monobehaviour类:脚本组件一定要继承此类

10、常见类和结构体

(1)GameObject
GetComponent<>
GameObject.Find():通过name,不能找到非激活的对象,如果对象多,消耗性能(少用)
GameObject.FindWithTag():性能消耗小些
FindGameObjectsWithTag():找多个对象

(2)Transform
position、localPosition
eulerAngles、localEulerAngles:欧拉角
rotation、localRotation:四元数
RotateAround:绕某个点沿某个轴旋转(公转)
LookAt:看向某个对象

(3)Vector3
(4)Quaternion
identity:空旋转
LookRotation():向量转换成四元素
Lerp():插值

(5)Time
time:从游戏开始到此时,所花费的时间
deltaTime:从上一帧结束到当前帧开始,所花费的时间
fixedDeltaTime:固定时间间隔(默认0.02s)
timeScale:时间缩放(默认1s)

(6)Mathf
Abs:求绝对值
Lerp:插值
Clamp:限制值(防止数值溢出)
Clamp01(0.1f):范围写死在(0,1)之间

11、触发器和碰撞器、刚体

(1)Collider种类:Box、Sphere、Capsule、Mesh(少用)
(2)碰撞条件:两个物体需要有碰撞器,其中一方有刚体,最好是运动方有刚体(不运动就会休眠,不会发生碰撞检测)
(3)设置触发器:isTrigger
(4)刚体Rigidbody
AddForce(Vector3):添加一个力
AddTorque():添加力矩

12、物理射线Ray(用于检测碰撞体)

(1)射线组成部分:起点origin、方向direction
(2)获取鼠标屏幕射线:ScreenPointToRay
(3)射线检测方法
physics.RayCast(origin, direction)
physics.RayCast(Ray)
physics.RayCastAll( )

13、抖动问题

原因:电脑性能不同,运行的帧不同,刚体受力,每一帧受力不同,所以会抖动
解决方法:把有关移动的方法放到固定物理帧FixedUpdate( )函数,然后把时间Time.deltaTime改为Time.fixedDeltaTime,每秒固定。

有关U3D简单知识点的更多相关文章

  1. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  2. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  3. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  4. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  5. ruby - 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么? - 2

    我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=

  6. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  7. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  8. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  9. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  10. Qt Designer的简单使用 - 2

    在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用C++代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。用C++代码编写图形界面的问题就是不直观,因此Qt项目开发了专门的可视化图形界面编辑器——QtDesigner(Qt设计师)。通过QtDesigner就可以很方便地创建图形界面文件*.ui,然后将ui文件应用到源代码里面,做到“所见即所得”,大大方便了图形界面的设计。本节就演示一下QtDesigner的简单使用,学习拖拽控件和设置控件属性,并将ui文件应用到Qt程序代码里。使用QtDesigner设计界面在开始菜单中找到「Q

随机推荐