博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Character Controller深度解析
阅读量:4977 次
发布时间:2019-06-12

本文共 4282 字,大约阅读时间需要 14 分钟。

说明:
Character一般用于主角这类用户控制的物体,它不会受到scene的重力影响,不会被其他物体推。
 
程序中可以使用它的move方法移动它,当他碰到静态物体时,会停下来,遇到动态物体时会推开他,当然,哲学都是可以通过activegroup老控制的,group至多有32组。
 
character还有上楼梯模式,在某些高度的台阶,可以直接上去(stepOffest)
character还可以设置可以走上去的斜坡(slopeLimit)
 
由于character不受到场景的重力影响,所以,用户要在move函数中自己添加重力因素,也就是说,character可以悬浮在空中,除非那里有其他的activegroup物体;
 
角色控制器中的变量:
isGrounded:着地,在最后的移动角色控制器是否接触地面;
velocity:角色当前的相对速度;
cllisionFlags:在最后的characterController.Move调用期间,胶囊提的哪个部分和周围环境相碰撞。
radius:角色胶囊体 的半径,
height:角色胶囊体的高度。
center:相对于变换位置的角色胶囊体的中心。
slopLimit:角色控制器的坡度洗漱限制,
stepOffest:以米为单位的角色控制器的台阶偏移量(台阶高度)
detectCollisions:其他刚体和角色控制器能否能够与本角色控制器相互碰撞。默认值筒仓为enabled;
 
函数:
SimpleMove:

function SimpleMove (speed : Vector3) : bool

以一定速度移动角色;
Move:

function Move (motion : Vector3) : CollisionFlags,

一个更加复杂的移动函数,每次都绝对移动。 

尝试着通过动力移动控制器,动力只受限制于碰撞。它将沿着碰撞器滑动。CollisionFlags 是发生于Move的碰撞的概要。这个函数不应用任何重力。

 

发送消息:

OnControllerColliderHit:控制器碰撞器相碰,当控制器碰撞一个正在移动的碰撞器时,此函数被调用;

 

Inherited members继承成员

Inherited Variables继承变量

  • attachedRigidbody
    碰撞器附加的刚体。
  • isTrigger
    碰撞器是一个触发器? (是否可以穿越)
  • material
    撞器使用的材质。
  • sharedMaterial
    碰撞器的共享物理材质。
  • bounds
    碰撞器在世界坐标空间的包围盒。
  • transform
    Transform附加到GameObject(游戏物体)(如无附加则为空)。
  • rigidbody
    Rigidbody附加到GameObject(游戏物体)(如无附加则为空)。
  • camera
    Camera附加到GameObject(游戏物体)(如无附加则为空)。
  • light
    Light附加到GameObject(游戏物体)(如无附加则为空)。
  • animation
    Animation附加到GameObject(游戏物体)(如无附加则为空)。
  •  
  • constantForce
    ConstantForce附加到GameObject(游戏物体)(如无附加则为空)。
  • renderer
    Renderer附加到GameObject(游戏物体)(如无附加则为空)。
  • audio
    AudioSource附加到GameObject(游戏物体)(如无附加则为空)。
  • guiText
    GUIText附加到GameObject(游戏物体)(如无附加则为空)。
  • networkView
    NetworkView附加到GameObject(游戏物体)(只读)(如无附加则为空)。
  • guiTexture
    GUITexture附加到GameObject(游戏物体)(只读)(如无附加则为空)。
  • collider
    Collider附加到GameObject(游戏物体)(如无附加则为空)。
  • hingeJoint
    HingeJoint附加到GameObject(游戏物体)(如无附加则为空)。
  • particleEmitter
    ParticleEmitter附加到GameObject(游戏物体)(如无附加则为空)。
  • gameObject
    组件附加的游戏物体。一个组件总是被附加到一个游戏物体。
  • tag
    游戏物体的标签。
  • name
    The name of the object. //物体的名字
  • hideFlags
    物体是否被隐藏、保存在场景中或被用户修改?

Inherited Functions继承函数

  • ClosestPointOnBounds
    到附加碰撞器的包围盒最近的点。
  • Raycast
    投射一个光线(Ray),它忽略所有碰撞器,除了这个。
  • GetComponent
    如果游戏物体有一个附加,则返回Type类型的组件,如果没有则为null。
  • GetComponent.<T>
     
  • GetComponent
    如果游戏物体有一个附加,则返回名字类型组件,如果没有则为null。
  • GetComponentInChildren
    返回Type类型组件,在GameObject或它的任何子物体使用深度优先搜索,仅返回激活的组件。
  • GetComponentInChildren.<T>
     
  • GetComponentsInChildren
    在GameObject或任何它的子物体,返回全部Type类型组件
  • GetComponentsInChildren.<T>
     
  • GetComponents
    在游戏物体返回全部Type类型组件。
  • GetComponents.<T>
     
  • CompareTag
    Is this game object tagged tag?
    游戏物体有被标记标签么?
  • SendMessageUpwards
    在游戏物体每一个MonoBehaviour和每一个behaviour的祖先上调用名为methodName的方法。
  • SendMessage
    在游戏物体每一个MonoBehaviour上调用名为methodName的方法。
  • BroadcastMessage
    在游戏物体每一个MonoBehaviour和它的全部子物体上调用名为methodName的方法。
  • GetInstanceID
    返回物体的实例ID
  • ToString
    返回游戏物体的名称。

Messages Sent发送消息

  • OnTriggerEnter

    这个消息是发送给触动触发器的碰撞器和刚体(或如果没有刚体的碰撞器)。注意假如一个碰撞物体同时带有一个刚体属性

    那么只发送这个触发事件。

    当碰撞器other进入触发器时OnTriggerEnter被调用。
  • OnTriggerExit

    这个消息是发送给触动触发器的碰撞器和刚体(或如果没有刚体的碰撞器)。注意假如一个碰撞物体同时带有一个刚体属性

    那么只发送这个触发事件。

    当碰撞器other停止触动触发器时,OnTriggerExit被调用。
  • OnTriggerStay
    这个消息是发送给触动触发器的碰撞器和刚体(或如果没有刚体的碰撞器)。注意假如一个碰撞物体同时带有一个刚体属性
    那么只发送这个触发事件。
     

    注意:OnTriggerStay函数是基于物理计时器,因此它未必每帧都运行。

    也就是说OnTriggerStay是在每一个Time.fixedDeltaTime的时间节点上运行,不是Time.deltaTime的时间节点上运行

    每个碰撞器other触动触发器,几乎在所有的帧OnTriggerStay被调用。
  • OnCollisionEnter

    相比OnTriggerEnter,OnCollisionEnter传递Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息。在这个函数如果你不使用collisionInfo,删去collisionInfo参数以避免不必要的计算。注意,如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件。

    当collider/rigidbody开始触动另一个rigidbody/collider时OnCollisionEnter被调用。
  • OnCollisionExit

    相比OnTriggerExit,OnCollisionExit传递Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息。在这个函数如果你不使用collisionInfo,删去collisionInfo参数以避免不必要的计算。注意,如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件。

    当 collider/rigidbody停止触动另一个 rigidbody/collider时,OnCollisionExit被调用。
  • OnCollisionStay

    相比OnTriggerStay,OnCollisionStay传递Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息。在这个函数如果你不使用collisionInfo,删去collisionInfo参数以避免不必要的计算。注意,如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件。

    每个collider/rigidbody触动rigidbody/collider,将在每帧调用OnCollisionStay。通俗的说,

Inherited Class Functions继承类函数

  • operator bool
    物体是否存在?
  • Instantiate
    克隆原始物体,并返回克隆的物体
  • Instantiate.<T>
     
  • Destroy
    Removes a gameobject, component or asset.
    删除一个游戏物体、组件或资源
  • DestroyImmediate
    立即销毁物体obj,强烈建议使用Destroy代替。
  • FindObjectsOfType
    返回Type类型的所有激活的加载的物体列表
  • FindObjectOfType
    返回Type类型第一个激活的加载的物体。
    operator ==
    
            比较如果两个物体相同
    • operator !=
      比较如果两个物体不同
    • DontDestroyOnLoad
      加载新场景的时候使目标物体不被自动销毁。

转载于:https://www.cnblogs.com/Dearmyh/p/9540511.html

你可能感兴趣的文章
MySQL系列(五) 锁
查看>>
编译原理:引论
查看>>
LFM 隐语义模型
查看>>
unwrapped与wrapped变量取值的问题
查看>>
[转载]---教大家如何玩转跟踪(to owner session、other session)
查看>>
如何在服务器部署JBoss
查看>>
NPOI导出EXCEL遇到换行符时,改变单元格的样式~!
查看>>
springboot 零xml集成mybatis-plus
查看>>
Desugar Scala(17) -- Option和for,以及脑子里发生的事情
查看>>
Codeforces.786B.Legacy(线段树优化建图 最短路Dijkstra)
查看>>
BZOJ.4909.[SDOI2017]龙与地下城(正态分布 中心极限定理 FFT Simpson积分)
查看>>
Flask 上下文(Context)原理解析
查看>>
php取得当前访问url文件名的几种方法
查看>>
CentOS7和CentOS6的区别
查看>>
关系型数据库事务二:隔离级别
查看>>
送给IT新人--多看、多问、多写
查看>>
MySQL常用命令
查看>>
【原】实时渲染中常用的几种Rendering Path
查看>>
TS3
查看>>
Quartz C#使用
查看>>