Character Controller

Character Controller主要用于不使用刚体物理的第三人称或第一人称玩家控制。

Properties

Property: Function:
Slope Limit 最大斜坡的角度,最好是90
Step Offset 爬上楼梯的高度,不能比自身身高还要高一般为  0.1到0.4之间
Skin width 两个碰撞器碰撞之后相互嵌入的宽度,最好为radius的10%,或者比这个稍大一点
Min Move Distance 如果移动距离小于这个值,就认为他没有动,一般设置为0
Center This will offset the Capsule Collider in world space, and won’t affect how the Character pivots.
Radius Length of the Capsule Collider’s radius. This is essentially the width of the collider.
Height Y轴的高度,一般为2米

The Character Controller

Details

传统的 Doom-style第一人称控制在物理上是不现实的.这个角色以每小时90英里的速度奔跑,突然停了下来,在一个转弯处转弯. 因为它是如此的不现实,使用刚体和物理来创造这种行为是不现实的,会觉得是错误的。解决方案是专门的Character Controller. 它只是一个胶囊状的对撞机,可以根据脚本的某个方向移动. 控制器将执行运动,但会受到碰撞的限制
它将沿着墙壁滑动,走上楼梯(如果它们低于Step Offset),并在Slope Limit内行走。

Controller本身不会对 forces力做出反应,也不会自动将Rigidbodie刚体推开。

如果你想要推动 一个挂有Character Controller的Rigidbodies或者一个物体 , 可以在脚本中通过OnControllerColliderHit() 方法执行

另一方面,如果你想让你的玩家角色受到物理影响,那么你最好使用刚体而不是角色控制器。

Hints

  • 如果你发现你的角色经常被卡住,试着调整你的皮肤宽度。 Skin Width
  • The Character Controller 可以通过脚本使用物理影响物体
  • The Character Controller 不会被physics.影响
  • The Character Controller’s capsule used in queries such as raycast might shrink by a small factor. Queries therefore could miss in some corner cases, even when they appear to hit the Character Controller’s gizm

Character Joint

Character Joints 主要用于布偶效果. 它们是一个扩展的球窝关节,允许你限制每个轴上的关节。

Properties

Property: Function:
Connected Body 关节依附的 Rigidbody如果没有, the joint connects to the world.
Anchor GameObject(游戏物体)的关节旋转的局部空间的点。
Axis 旋转轴
Auto Configure Connected Anchor If this is enabled, then the Connected Anchor position will be calculated automatically to match the global position of the anchor property. This is the default behavior. If this is disabled, you can configure the position of the connected anchor manually.
Connected Anchor Manual configuration of the connected anchor position.
Swing Axis The swing axis. Visualized with the green gizmo cone.
Low Twist Limit The lower limit of the joint. See below.
High Twist Limit The higher limit of the joint. See below.
Swing 1 Limit Limits the rotation around one element of the defined Swing Axis (visualized with the green axis on the gizmo). See below.
Swing 2 Limit Limits movement around one element of the defined Swing Axis. See below.
Break Force The force that needs to be applied for this joint to break.
Break Torque The torque that needs to be applied for this joint to break.
Enable Collision When checked, this enables collisions
between bodies connected with a joint.
Enable Preprocessing Disabling preprocessing helps to stabilize impossible-to-fulfil configurations.

The Character Joint on a Ragdoll

Constant Force

Constant Force 能快速给 Rigidbody添加一个恒定的力,非常适合火箭一类的单镜头物体,如果你不希望它以一个很大的速度开始,而是加速

Properties

Property: Function:
Force 作用于世界空间的力的矢量。
Relative Force 作用于物体局部空间的力的矢量。
Torque 力矩的矢量,应用于世界空间. 体会绕着这个矢量旋转. 矢量越长,旋转越快。.
Relative Torque The vector of a torque, applied in local space. The object will begin spinning around this vector. The longer the vector is, the faster the rotation.

Details

T要使火箭加速前进,必须使Relative Force沿正z轴. 然后使用刚体的阻力特性使其不超过某个最大速度 (阻力越大,最大速度越低).刚体要确保关闭重力,使火箭将永远停留在它的路径。

Hints

  • 一个物体向上流动,使力的性质为正的Y值加上一个恒定的力。
  • 使一个物体向前飞行,增加一个恒定的力,使相对力属性的Z值为正。

Details

Character joints 为你提供了许多约束运动的可能性,就像使用万向关节一样。

twist axis旋转轴 (场景中橘色的) 让你在限制之内最大限度的移动旋转,你可以声明一个上限和下限的角度,角度是从开始点开始计算的. A value of –30 in Low Twist Limit->Limit and 60 in High Twist Limit->Limit limits the rotation around the twist axis (orange gizmo) between –30 and 60 degrees.

The Swing 1 Limit 限制围绕摆动轴的旋转 (在gizmo上用绿色轴表示). 极限角是对称的. 因此,值30将限制-30和30之间的旋转。

The Swing 2 Limit坐标轴在这个小装置上是看不出来的但是它与另外两个坐标轴是正交的 (t这是在gizmo上用橙色显示的扭转轴和在gizmo上用绿色显示的摆动极限).这个角度是对称的,因此值40将限制绕该轴旋转-40和40度

For each of the limits the following values can be set:

Property: Function:
Bounciness 0的值不会反弹。值1会反弹而不会损失任何能量。
Spring 使两个物体保持在一起的弹簧力。
Damper 用来阻尼弹簧力的阻尼力。
Contact Distance 在接触距离内,限位将保持接触,以避免抖动。

Breaking joints

可以用 Break ForceBreak Torque 属性设置关节强度限制.并且一个力/扭矩大于这个限制,其固定关节将被破坏,将不再受其约束。

Hints

  • 不需要给joint声明一个Connected Body
  • Character Joints 求你的对象有一个刚体附加
  • For Character Joints made with the Ragdoll wizard, take a note that the setup is made such that the joint’s Twist axis corresponds with the limb’s largest swing axis, the joint’s Swing 1 axis corresponds with limb’s smaller swing axis and joint’s Swing 2 is for twisting the limb. This naming scheme is for legacy reasons.

Mesh Collider

Mesh Colliders勾选 Convex 能和其它Mesh Colliders.碰撞

Properties

Property Function
Convex 勾选上之后可以和其它网格碰撞体碰撞. Convex限定网格碰撞器器为255个三角形
Is Trigger 勾选上之后,不受物理引擎的影响
Cooking Options  影响物理引擎处理网格的方式。
  None 不使用
  Everything 启用下面列出的所有 Cooking Options
  Cook for Faster Simulation 更快的模拟,执行一些额外的步骤,确保运行时最优.
  Enable Mesh Cleaning  physics engine 清除 Meshes.清除掉一些退化的三角网格,让碰撞更精准
  Weld Colocated Vertices 让物理引擎删除网格中的等顶点. 启用后,物理引擎将组合具有相同位置的顶点. This is important for the collision feedback that happens at run time.
Material Reference to the Physics Material that determines how this Collider interacts with others.
Mesh Reference to the Mesh to use for collisions.

Details

碰撞网格中的面是片面的。这意味着物体可以从一个方向穿过它们,但从另一个方向与它们相撞。就是正反面

Mesh cooking

Mesh cooking 把一个普通的网格变成一个你可以在物理引擎中使用的网格.

Limitations

For a Mesh Collider to work properly, the Mesh must be read/write enabled in any of these circumstances:

  • The Mesh Collider’s Transform has negative scaling (for example, (–1, 1, 1)) and the Mesh is convex.
  • The Mesh Collider’s transform is skewed or sheared (for example, when a rotated transform has a scaled parent transform).
  • The Mesh Collider’s Cooking Options flags are set to any value other than the default.

Optimization tip: If a Mesh is used only by a Mesh Collider, you can disable Normals
in Import Settings, because the physics system doesn’t need them.

Cloth

Cloth 组件只能配合 Skinned Mesh Renderer 组件使用,来模拟衣服,流体,如果没有Skinned Mesh组件,或者不是Skinned Mesh组件,添加cloth后会自动添加一个Skinned Mesh,并清除之前的mesh组件

Properties

Property: Function:
Stretching Stiffness 衣服的柔软度
Bending Stiffness 弯曲度
Use Tethers 应用约束来防止布粒子远离固定的布粒子。这有助于减少过度拉伸。
Use Gravity 应用重力
Damping 运动阻尼系数。
External Acceleration 给布料施加一个外部的恒定的加速度
Random Acceleration 给布料施加一个外部的随机的加速度
World Velocity Scale 人物的移动对布料速度的影响
World Acceleration Scale 人物世界坐标系啊的加速度对布料的影响
Friction 摩擦力
Collision Mass Scale 增加布料的质量
Use Continuous Collision Enable continuous collision
to improve collision stability.
Use Virtual Particles 为每个三角形增加一个虚拟粒子,以提高碰撞稳定性。
Solver Frequency 每秒求解器迭代次数。
Sleep Threshold Cloth’s sleep threshold.
Capsule Colliders 布料应该与之发生碰撞的胶囊碰撞体
Sphere Colliders An array of ClothSphereColliderPairs which this Cloth instance should collide with.

Details

Cloth 在一个场景中,不会和碰撞发生交互, 它也不会对世界施加力量.且不会对身体的其它部位产生影响,但是如果你手动给布料添加指定的 colliders. ,布料会对你指定的碰撞体产生碰撞,但是不会施加力,比如不会穿过指定的物体,

Edit Constraints Tool

Select Edit > Constraints 编辑 constraints 每个顶点的约束条件.所有顶点都有一个基于当前可视化模式的颜色,以显示它们各自值之间的差异。. You can author Cloth constraints by painting them onto the cloth with a brush.

Property: Function:
Visualization 可视化界面,提供了两个工具,还有一个编辑反面的的按钮
Max Distance 布料上的点可移动的最大距离
Surface Penetration 布料上的点,能够穿过网格的距离
Brush Radius 设置画笔的半径,使您能够在布上绘制约束条件。

The Cloth Constraints Tool 在 Skinned Mesh Renderer使用

每一个顶点有两种模式:

  • Select 选择一个或一组粒子. 可以同时设置Y Max Distance, Surface Penetration, 先选择粒子,再为其设置参数

  • Paint 调节单个粒子 ,设置 Max Distance, Surface Penetration, or both, and set a value.,先设置参数,在选择要应用参数的粒子

这个按钮设置布料的自碰撞和内部碰撞

没有应用碰撞的粒子显示为黑色

Unused cloth particles

To apply self-collision or intercollision, you need to select a single set of particles to apply collision to. To select a set of particles for collision, click the Select button:

Select cloth particles button

Now left-click and drag to select the particles you want to apply collision to:

Selecting cloth particles using click and drag

The selected particles appear in blue:

Selected cloth particles are blue

Wheel Collider

The Wheel Collider是一种特殊的地面碰撞器.它有内置的碰撞检测和一个基于滑块的轮胎摩擦模型. 它可以用于轮子以外的物体,但它是专门为有轮子的车辆设计的。

Properties

Property: Function:
Mass 车轮的质量
Radius Radius of the wheel.
Wheel Damping Rate 这是施加在车轮上的阻尼值
Suspension Distance 悬挂的外扩距离,如果不知道悬挂是什么,百度,这个是在y轴的距离
Force App Point Distance 此参数定义将应用轮力的点. This is expected to be in metres from the base of the wheel at rest position along the suspension travel direction. 当forceAppPointDistance = 0在静止的轴距上施加力. 一辆更好的车所受的力应该略低于车的重心。
Center 轮子的中心
Suspension Spring 悬架试图通过增加弹簧和阻尼力来达到目标位置
        Spring 弹簧力试图达到 Target Position.值越大打到Target Position 的速度越快
        Damper 降低悬挂的速度. 值越大Suspension Spring ,达到目标位置的速度越慢
        Target Position 就是弹簧的比例,0代表弹簧的压缩状态,1代表弹簧的伸展状态,.默认值为0.5,与普通汽车的悬挂行为相匹配。
Forward/Sideways Friction 轮胎前后滚动时的摩擦特性。参见下面的车轮摩擦曲线部分

The Wheel Collider Component. Car model courtesy of ATI Technologies Inc.

Details

T车轮的碰撞检测是通过从中心向局部y轴的下方向投射光线来实现的。车轮有一个Radius,可以根据Suspension Distance悬挂距离向下延伸. 通过脚本中修改不同的属性来控制车辆: motorTorque, brakeTorque and steerAngle.

Wheel Collider 使用基于滑动的模型计算摩擦力,忽略  Physic Material 的设置

Wheel collider setup

您不能旋转或滚动WheelCollider对象来控制汽车  -挂有WheelCollider的物体应该在汽车的固定位置上. 但是,您可能想要转动和滚动车轮的模型。最好的方法是为WheelCollider和可见车轮设置单独的对象

Wheel Colliders 和车轮模型分开,wheel collider的位置在运行时是不会改变的

suspension distance为0.15 时

Wheel Colliders的距离

Collision geometry

由于汽车可以达到大的速度,得到正确的赛道碰撞几何形状是非常重要的.具体来说,碰撞网格不应该有构成可见模型的小凸起或凹痕(如栅栏杆)。通常情况下,赛道的碰撞网格是与可见网格分开制作的,使得碰撞网格尽可能的平滑.它也不应该有薄的物体-如果你有一个薄的轨道边界,使它更宽的碰撞网格(或完全删除另一边,如果汽车不能去那里)。

可见几何体(左)比碰撞几何体(右)复杂得多。

Wheel Friction Curves

轮胎摩擦力. 有单独的曲线为车轮的前进(滚动)方向和横向方向. 在两个方向上,首先要确定轮胎打滑的程度(根据轮胎橡胶和路面之间的速度差). 然后用这个滑移值求出施加在接触点上的轮胎力。

该曲线以轮胎打滑为输入,以力为输出, 这条曲线用两条样条逼近.第一部分从 (0 , 0) to (ExtremumSlip , ExtremumValue), at which point the curve’s tangent is zero. The second section goes from (ExtremumSlip , ExtremumValue) to (AsymptoteSlip , AsymptoteValue), where curve’s tangent is again zero:

典型的车轮摩擦曲线形状

真轮胎的特性是,在低滑移时,它能产生较大的力,因为橡胶通过拉伸来补偿滑移. 后来,当滑动变得很高时,随着轮胎开始滑动或旋转,力就会减小。因此,轮胎摩擦曲线的形状如图所示。

Property: Function:
Extremum Slip/Value 曲线的极值点
Asymptote Slip/Value 曲线的渐近线
Stiffness 极值和渐近值的乘数(默认为1) 改变摩擦的刚度. 设置为0,禁用所有摩擦.通常在运行时通过脚本来修改这个值,从而模拟不同地面的摩擦力

Hints

  • Y你需要减少 physics timestep 长度 Time ,让汽车更稳定, 特别是可以达到高速的赛车.
  • 为了防止汽车过于容易翻车,你可以降低它 Rigidbody 的center of Mass 并且 apply “down pressure” force that depends on car velocity.

Physic Material

Physic Material 用于调整碰撞物体的摩擦和弹跳效果

Assets > Create > Physic Material 创建,拖到Collider上

Properties

Property: Function:
Dynamic Friction 移动时的摩擦力. 通常是0到1之间的值. 0的值就像冰,1的值会让它很快停下来,除非有很大的力或重力推动物体。
Static Friction 物体静止时在表面上的摩擦力. 通常是0到1之间的值。0的值就像冰,1的值会让物体很难移动。
Bounciness 表面弹性如何?0的值不会反弹。1的值会反弹而不会损失任何能量,尽管这可能会给模拟增加少量的能量,但仍需要一定的近似。
Friction Combine 两个相互碰撞的物体之间的摩擦力是如何结合在一起的。
- Average 两个摩擦值取平均值。
- Minimum 使用两个值中最小的值.
- Maximum 使用两个值中最大的一个。.
- Multiply 摩擦值彼此相乘。.
Bounce Combine 如何结合两个相互碰撞的物体的弹性。与摩擦组合方式相同

Details

摩擦力是防止表面相互滑动的量. 摩擦有两种形式,动态的和静态的 dynamic and static. Static friction 当物体静止时使用。它将阻止对象开始移动。如果对物体施加足够大的力,它就会开始运动. 这时,动摩擦就起作用了 Dynamic Friction . Dynamic Friction 现在将尝试在与另一个物体接触时减速.

当两个物体接触时,根据所选择的方式,对它们施加相同的弹性和摩擦效应.在这种特殊情况下,两个碰撞器在接触时有不同的组合模式,默认使用具有最高优先级的函数. 优先顺序如下: Average < Minimum < Multiply < Maximum. 比如一个材质的合并方式为Average 另一个材质为 Maximum, 优先使用 Maximum。

请注意,Nvidia PhysX引擎使用的摩擦模型是为模拟的性能和稳定性而调整的,并不一定是真实世界物理的近似值. 特别地,大于单点的接触面(例如两个相互靠在一起的盒子)将被计算为有两个接触点,并且摩擦力将是现实物理中摩擦力的两倍 ,在这种情况下,您可能需要将摩擦系数乘以0.5以获得更实际的结果。

同样的逻辑也适用于弹性模型。Nvidia PhysX不保证完美的能量守恒,因为各种模拟细节,如位置校正.例如,当一个受重力影响的物体的弹跳值为1,并且与有弹跳的地面发生碰撞时,该物体会到达比初始位置更高的位置。

Wheel Collider Tutorial

选择 GameObject> 3D Object> Plane. 作为汽车行驶的地面. 位置为远点,缩放大一些

Create a basic car skeleton:创建一个基本的汽车骨架

  1. 首先,创建一个空物体.  GameObject > Create Empty. 命名为 car_root.
  2. car_root添加 Rigidbody组件,mass改为1500kg .
  3. 创建一个cube,当车身 GameObject > 3D Object > Cube.放在car_root下. Reset重置Transform. 缩放一下z轴 为3
  4. 创建轮子的根节点 GameObject > Create Empty Child.命名为 wheels. Reset the Transform on it. 这个GameObject(游戏对象)不是强制的,但是它对以后的调优和调试很有用
  5. 选中wheels,  GameObject > Create Empty Child, 命名为 frontLeft. Reset the Transform, then set the Transform Position X to –1, Y to 0, and Z to 1. 为其添加一个Wheel Collider, go to Add component > Physics > Wheel Collider
    .
  6. 赋值 frontLeft GameObject.改变 Transform’s X为1.重命名为 frontRight.
  7. 复制 frontLeft and frontRight GameObjects. 改变 Transform’s Z 为 –1. 重命名rearLeft and rearRight respectively.
  8. 最后,选择car_root GameObject(游戏物体),使用移动工具将它稍稍抬高到地面以上

为了让这辆车真正可以驾驶,你需要为它写一个控制器. The following code sample works as a controller:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;public class SimpleCarController : MonoBehaviour {public List<AxleInfo> axleInfos; // the information about each individual axlepublic float maxMotorTorque; // maximum torque the motor can apply to wheelpublic float maxSteeringAngle; // maximum steer angle the wheel can havepublic void FixedUpdate(){float motor = maxMotorTorque * Input.GetAxis("Vertical");float steering = maxSteeringAngle * Input.GetAxis("Horizontal");foreach (AxleInfo axleInfo in axleInfos) {if (axleInfo.steering) {axleInfo.leftWheel.steerAngle = steering;axleInfo.rightWheel.steerAngle = steering;}if (axleInfo.motor) {axleInfo.leftWheel.motorTorque = motor;axleInfo.rightWheel.motorTorque = motor;}}}
}[System.Serializable]
public class AxleInfo {public WheelCollider leftWheel;public WheelCollider rightWheel;public bool motor; // is this wheel attached to motor?public bool steering; // does this wheel apply steer angle?
}

car_root上添加这个脚本(Add Component > New Script),您可以如下所示调整脚本参数;实验设置和进入播放模式,以测试结果。

The following settings are very effective as a car controller:

你可以有多达20个车轮在一个车辆实例,每一个应用转向,电机或制动扭矩

Wheel Collider 不会模拟轮子的位置变换和角度旋转

你需要一些车轮的几何形状. 你可以用圆筒做一个简单的轮子形状. 可能有几种添加可视轮的方法:使您不得不在脚本属性中手动分配可视轮,或者编写一些逻辑来自动查找相应的可视轮

Next, change the controller script:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;[System.Serializable]
public class AxleInfo {public WheelCollider leftWheel;public WheelCollider rightWheel;public bool motor;public bool steering;
}public class SimpleCarController : MonoBehaviour {public List<AxleInfo> axleInfos; public float maxMotorTorque;public float maxSteeringAngle;// finds the corresponding visual wheel// correctly applies the transformpublic void ApplyLocalPositionToVisuals(WheelCollider collider){if (collider.transform.childCount == 0) {return;}Transform visualWheel = collider.transform.GetChild(0);Vector3 position;__Quaternion__ rotation;collider.GetWorldPose(out position, out rotation);visualWheel.transform.position = position;visualWheel.transform.rotation = rotation;}public void FixedUpdate(){float motor = maxMotorTorque * Input.GetAxis("Vertical");float steering = maxSteeringAngle * Input.GetAxis("Horizontal");foreach (AxleInfo axleInfo in axleInfos) {if (axleInfo.steering) {axleInfo.leftWheel.steerAngle = steering;axleInfo.rightWheel.steerAngle = steering;}if (axleInfo.motor) {axleInfo.leftWheel.motorTorque = motor;axleInfo.rightWheel.motorTorque = motor;}ApplyLocalPositionToVisuals(axleInfo.leftWheel);ApplyLocalPositionToVisuals(axleInfo.rightWheel);}}
}

一个重要的参数是 Wheel Collider 组件的 Force App Point Distance. 这是从静止轮的基座到施加轮力的点的距离.默认值是0,这意味着施加在静止车轮底部的力,但实际上,明智的做法是让这个点位于稍微低于汽车重心的地方。

Note: To see the Wheel Collider in action, download the Vehicle Tools package, which includes tools to rig wheeled vehicles and create suspension for wheel colliders.

Unity 之 Physics 二相关推荐

  1. 蓝鸥Unity开发基础二——课时20 接口

    蓝鸥Unity开发基础二--课时20 接口 一.接口 使用interface关键字定义接口 接口定义一组成员单不直接实现它们 二.实现接口 实现接口的任何类都必须实现其所有的成员方法 接口不能直接实例 ...

  2. unity 之 Animation 二 BlendTree

    Blend Trees 在游戏动画中一个常见的任务是将两个或多个相似的动作混合在一起. 也许最著名的例子就是根据角色的速度混合行走和跑步的动画.另一个例子是一个角色在跑步时向左或向右倾斜,就是根据参数 ...

  3. [AR/VR教程] SteamVR Unity工具包(二):激光和移动

    Simple Laser Pointer (VRTK_SimplePointer) 简单激光指针(VRTK_ SimplePointer) The Simple Pointer emits a col ...

  4. SteamVR Unity工具包(二):激光和移动

    Simple Laser Pointer (VRTK_SimplePointer) 简单激光指针(VRTK_ SimplePointer) The Simple Pointer emits a col ...

  5. Unity网络(二)-Unity3D中的网络

    正所谓:没有网络是没有灵魂的 欢迎关注公众号:雷潮课堂 Unity3D中的网络 一.WWW 1-1 Get 1-2 Post 1-3 案例(网络下载,本地存储与读取) 二.UnityWebReques ...

  6. [转]Unity 之 创建二维码

    最近看到公司里好多人在分享网页链接的时候都用二维码相互传递,然后就突然想到如果在Unity的项目中需要实时创建二维码进行分享链接的时候要怎么办. 然后就开始在网上搜了一下"Unity 创建二 ...

  7. Unity 之 创建二维码

    关注公众号,获取更多干货. 最近看到公司里好多人在分享网页链接的时候都用二维码相互传递,然后就突然想到如果在Unity的项目中需要实时创建二维码进行分享链接的时候要怎么办. 然后就开始在网上搜了一下& ...

  8. python+unity表情驱动二(打包成exe)

    python+unity表情驱动工具二(打包成exe) 使用pyinstaller在控制台打包 工具的使用效果 使用pyinstaller在控制台打包 这里并没有使用auto-py-to-exe界面工 ...

  9. Unity扩展编辑器二

    Unity支持自行创建窗口,也支持自定义窗口布局,在Project视图中创建一个Editor文件夹,在文件夹中创建一条脚本 自定义窗口需要让脚本继承EditorWindow在设置MenuItem,此时 ...

最新文章

  1. 中国团队 Nature 新冠论文被指图片造假,科研论文不端“何时休”
  2. 阿里云资深总监肖力:安全智能时代公有云更靠谱
  3. QTP、LoadRunner、QC工具下载地址
  4. angular directive自定义指令
  5. android学习总结
  6. java volatile实例_Java的Volatile实例用法及讲解
  7. AI技术人才成长路线十大方向
  8. 【音乐拼接】WAV格式
  9. linux录制gif图片,Linux系统录制GIF
  10. Android网络编程之——文件断点下载(暂停/继续/重新下载)
  11. css去掉原生input框的border属性
  12. IT女神说自然语言处理(1)----LDA
  13. 银行卡号码显示每隔4位数空一格
  14. css颜色和长度简写
  15. 国产光纤熔接机技术是否成熟?带你评测TFN-S7光纤熔接机性能
  16. 戴尔蓝牙以及其他驱动
  17. 【解决方案】如何通过国标GB28181协议视频平台EasyGBS搭建安监局危化品可视化监控平台?
  18. twisted的cred
  19. OSI七层协议模型、TCP/IP四层模型和五层协议体系结构之间的关系
  20. Dedecms建站详细流程

热门文章

  1. C语言课程设计:连锁超市会员消费记录管理系统
  2. 编程统计候选人的得票数。设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个得票的候选人的名字,若选民输错候选人姓名,则按废票处理。选民投票结束后程序自动显
  3. QT案例 使用QGraphicsView和命令模式设计完成流程图功能软件,参考QT官方流程图案例【diagramscene】
  4. Global Shutter和Rolling Shutter之间的区别
  5. zeppelin 下载和安装
  6. 探测器反向偏压_(如光电二极管)反向偏置.ppt
  7. C语言编程>第三周 ⑧ 打印出杨辉三角形(要求打印出10行)
  8. js分享到微信朋友圈、QQ空间、QQ好友、新浪微博、腾讯微博、豆瓣、人人......
  9. 滴滴夜莺:从监控告警系统向运维平台演化
  10. 使用监听器Listener实现在线人数统计功能