2019-05-05 16:20:31 weixin_42421684 阅读数 320
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4729 人正在学习 去看看 张刚

软体,和https://blog.csdn.net/weixin_42421684/article/details/89790834这篇文章的三样,合起来在Unity是至关重要。布经常用来做窗帘,液体就是各种水、血等,绳子就是绳子。软体在这里也是很重要的,它可以做沙发、肉、布丁等等等。

Psoftbody包:链接:https://pan.baidu.com/s/1Q_jz6NPt_TSI31dhBCqBow 提取码:gvtx

导入之后,找到ExampleScene,点击ProjectileImpacts.unity,在学之前可以先疯玩一会。。。
最终软体效果:软体
在学前疯玩时期你会发现这个软塌塌的小球一打它就永远凹陷去下去了,而上面我改装之后的打完后它会自动恢复!
这个代码就得自己编咯。。。 幸运的是它提供了恢复函数!
给小球添加代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SoftbodyResetMesh : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
            this.GetComponent<PsoftBody>().LerpTowardsOriginal(Time.deltaTime*1f);//中间的1f可以改成自己希望的恢复速度
    }
}

还有小球需要一些参数调整:

参数
第一项MinSoftVelocity指的是打软体的物体他最小需要多少速度才能让软体凹陷。推荐使用一个完全趋向于零的数。
第三项Force Multiplier这个值越大软体被物体冲击后凹陷也就更大。
剩余的参数本小白还没有细心的钻研到底是什么,多多请教。。。

搞完了之后,最后讲一下原理。他的原理就是通过改变MeshFilter而实现凹陷。。。

2018-09-08 14:53:31 cgExplorer 阅读数 1461
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4729 人正在学习 去看看 张刚

本章主要讲解PSoftBody插件。本款插件和JellySprite插件有所不同,首先它形变是改变物体的MeshFilter组件中的Mesh坐标,他形变的方式稍微有些困难,目前我只发现通过射线和碰撞体之间碰撞产生形变,它主要有一个脚本组件PSoftBody,样式如下图,添加后物体中间会出现形变的球体,

此处分享三个相关插件下载地址:https://download.csdn.net/download/cgexplorer/10637103

准备工作

这里在将插件导入到unity2017.4的时候很顺利,直接看目录结构

PSoftBody:最顶级文件夹

ExampleScenes:插件样例文件,里面有两个案例CarWheelDeformation、ProjectileImpacts

Graphics:只是一个脚本图标,不必在意

Scripts:只存在一个脚本,主要由储存物体正常mesh坐标的结构体和更好复原物体的公共方法组成

PSoftBody:一个脚本,主要用来让物体发生形变

rendme:求着让我读它,就是个说明说了,但是里面介绍的有些粗略

3、因为这个插件本人目前只是理解了插件案例二的功能用途,没发现其他用途,所以主要按照ProjectileImpacts场景讲解,

PSoftBody脚本属性讲解

1、此处主要讲解PSoftBody脚本写的部分数值以及所产生的影响效果,这也是这个插件的主要脚本

min soft Velocity   最小软速度   数值越小发生形变需要的加速度越小
Impact Scale  冲击尺度     横切面形变尺度
Force Multiplier   倍增器   纵向形变深度

Recalculate Normals   重新计算法线    碰撞后法线贴图会发生改变
Better Recalculate Normal    更好地重新计算正常值    计算的更加平滑
Smoothing Angle   平滑角    形变平滑度

Deform On Collision   碰撞变形
Dynamic Mesh Collision   动态网格碰撞    形变会看起来更加流畅
use Collider mass   使用Collider质量
use collider scale   使用对撞机秤
use collision normal   使用碰撞法线
use collision stay   使用碰撞停留
check collider is this object   检查对撞器是这个对象

2、上面虽然说了所有属性的意思,但是有些没有尝试,所以具体效果并不了解

PSoftBody脚本公开方法讲解

1、这里大家先看以下截图

先介绍这五个方法

1、PsoftCalculate:此方法主要用在碰撞发生形变的情况

2、ResetMesh:此方法主要替换meshfilter

3、LerpTowardsOriginal:此方法主要在一定时间内更新meshfilter

4、RandomImpact:此方法主要将物体瞬间按照要求塌陷

           impactForce:冲击力         impactScale:冲击尺度       inverseImpacts 是否反方向冲击(向外还是向内,默认设置向                      内)

5、DeformAtPoint:

     worldPoint 撞击物体表面的位置  impactNormal 撞击空间的位置:为了求形变方向

         impactForce 冲击力·  impactScale 冲击尺度    inverseImpacts 是否反方向冲击    custForceMult  形变时间

总结

个人感觉此插件并不是很难,可能个人还没有钻研透彻,如果有新的发现多多交流。

2018-09-08 14:53:20 cgExplorer 阅读数 1157
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4729 人正在学习 去看看 张刚

最近在网上看到了三个比较有趣的unity插件,分别是2d软体控制JellySprite、3d软体控制PSoftBody、变形控制Mega。本章主要讲解JellySprite插件。其实所有软体的实现都是基于刚体,想象在一个物体里面放很多刚体,物体运动的时候带动刚体运动,刚体之间相互碰撞运动带动所影响物体的区域运动,这样看物体的时候就像是一个软体,而2d的软体就相当于在一张图片中放置很多刚体,举例创建一个plane,以图片作为plane的贴图,同时创建多个圆形刚体和1个中心点,中心点也是刚体,中心点和刚体间有约束。碰撞后根据刚体的位置动态对plane进行变形。如图:

此处分享三个插件下载地址:https://download.csdn.net/download/cgexplorer/10637103

准备工作

首先将插件导入到unity,截图如下:

先分析一下截图内容:

1、目录结构

2D Toolkit:其实是一款利用unity开发2D游戏非常不错的工具,以后我们详细讲解,

Demo:是一个精灵效果的小案例

Editor:毋庸置疑又是一个在Unity界面添加相关按钮的脚本

Scripts:其实就是elly自身需要的脚本

rendme:求着让我读它,就是个说明说了,但是里面介绍的有些粗略

2、bug

插件导入之后会因为太久远了,产生了许多因为过时引用而出现的bug,这里双击bug就会自动跳转到出错位置了,目前的修改方式如下:

第一处
//joint.collideConnected = m_CollideConnected;//过时引用
joint.enableCollision = m_CollideConnected; //新的引用

第二处
//targetObjectSprite.renderer.sharedMaterial.color = m_Color.colorValue;//过时引用
targetObjectSprite.GetComponent<Renderer>().sharedMaterial.color = m_Color.colorValue;//新的引用

3、因为目的是开发2d游戏,所以我们在场景中创建Plane即可,然后给Plane添加UnityJellySprite组件,到此准备工作已完成,如图:

unity Jelly Sprite脚本属性讲解

1、此处主要讲解unity jelly sprite脚本写的部分数值以及所产生的影响效果

sprite:此处需要导入一张sprite(2DandUI)贴图,最好是透明贴图,图片的形状就是Plane的形状

Sorting Layer:默认图层排列方式即可

Order In Layer:设置图层顺序,数值越大图层显示会越靠前,eg:精灵主要身体设置为0,五官设置稍大,这样五官就可以显示出来了

Flip Horizontal:水平翻转,如果勾选后,精灵受力适当时,会发生翻跟头现象,Flip Vertical:竖直方向同理

SpriteScale:只是改变sprite图片的缩放比例,不会改变内部刚体缩放比例

Use 2D Physics:如果勾选则表示当前对象使用2D物理材质(Physics Material 2D可以设置物理运动属性,不是材质)

勾选后会出现Gravity Scale(重力称,负值物体向上运动,0无重力,正值物体向下运动)

Attach Neighbors:邻接邻居:其实就是将每一个刚体都相连接,否则数值设置不好会出现撕扯现象

Body Configuration: 身体形态:这是很关键的属性它里面有四个选项:Circle(圆形) Rectangle(矩形)Triangle(三角形)Grid(平面)free(自由形态),这个主要影响刚体在物体内部的布局,不同形态设置参数也略有不同,但是此处的free不可以自己选择,在前四个形态中点击Copy Configuration To Free Mode便会切换到free,此处我们选择Circle,我们以Circle为例

Num Colliders:碰撞器数量即物体内的刚体数量

Collider Radius:碰撞器半径:每个碰撞器都是圆形

Collider Scale:碰撞器比例:修改每个碰撞器

Collider Rotation:碰撞器旋转:碰撞器整体绕中心碰撞器旋转

Collider Offset:除中心碰撞器之外其他所有碰撞器位移

Collider Body Offset:只有中心碰撞器位移

Lock Rotation:锁定旋转:如果物体受力后不想让物体旋转可以勾选此选项

Kinematic Central Body:运动中心体:勾选后中心刚体变红色,外界施加任何力中心体都不会动

Physics Material:物理材质:如果勾选了Use 2D Physics,此处添加2D物理材质,否则添加3D物理材质

Drag:阻力:数值越大,物体运动时会越缓慢。

Angular Drag:角阻力

Collide Connected:勾选后连接的碰撞体之间会有碰撞的力

Spring Stiffness:弹簧刚性:可以理解为韧性,数值越大越硬

Spring Damping:弹簧阻尼:数值越大,物体形变越缓慢

Mass Type:质量类型:里面有两个选项:perBody:每个刚体质量;Global:整体物体质量

Ctrl Point Influence:控制点影响:每个刚体中都会包含几个控制点,此值表示控制点影响范围,同等刚体数量,数值越大物体形变越大

Vertex Density:顶点密度:表示控制点密度,数值越大越稀疏,可以理解为控制点之间的距离

Num Attach Points:连接点:就是给软体附加对象,如果附加Transform对象,会把附加的对象作为软体的子对象,如果附加软体对象,会把软体的中心点作为子对象

2、上面身体形态是选择circle后的属性设置,一般软体制作流程是先选择一个大体符合形状的身体控制形态进行调节,然后切换为Free形态,开始对刚体分布做更细致的调节,切换为自由形态后的属性只要就是刚体的xyz和是否选择某一个刚体作为运动学,即锁定状态。

软体动态属性设置讲解

1、讲解的上一个属性也可以动态设置,而且不运行也可以看到,下面讲解的是运行后

运行后每个刚体会生成对应的 Geo Ref Point(参考点对象),在参考点对象中除了中心刚体之外,都会有Spring Joint(弹簧关节)

如果你之前勾选了Use 2D Physics,则此处是Spring Joint 2D

2、弹簧关节属性设置

Connected Body:所关联的刚体名字

Anchor:锚点位置:锚点就是上面提到的每个刚体中的控制点

Auto Configure Connected Anchor:自动配置锚点:如果不需要自己调节形变,此选项勾选即可

Connected Anchor :与上一个配合使用

Spring:弹性:对应unity Jelly Sprite中的弹簧刚性

Damper阻尼:对应unity Jelly Sprite中的弹簧阻尼

Min Distance、Max Distance:控制点运动时改变的最小和最大距离,此初属性影响形变大小

Tolerance:容差:控制点每次改变的距离范围

总结

上面讲解的是调节软体时用到的主要属性,但是真正的软体效果还会由于个人图片形状、身体形态布局不同而产生不同的效果,还需要多多调节练习

2013-04-13 15:21:16 braveyoung123 阅读数 1035
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4729 人正在学习 去看看 张刚


这篇说的是Unity Input。输入控制器

关于Unity3D是什么。我就不多做解释了。由于工作原因,该系列原创教程不定期更新。每月必然有更新。谢谢各位

Unity Input---输入控制管理器:



如上图,就是Unity为游戏软体受命于玩家控制的操作转化中心。大家看到了默认是17个。

要查看和编辑这些设置,可以点击名称旁边的小箭头。先解释一下吧:

Name:【按键名】该键的名称,可以在脚本编程中直接引用他。比如:Input.GetButtonDown(“Jump”);

Descriptive Name:【描述名】在游戏的独立机构中的配置对话框中,当控制值为正时候所显示的名称。默认空白。

Negative Descriptive Name:【负描述】在游戏的独立机构中的配置对话框中,当控制值为负的时候所显示的名称。

Nagative Button:【负向按钮】玩家按下这个按钮来让被控制物体向负方向运动。

Positive Button:【正向按钮】玩家按下这个按钮让被控制物体向正方向运动。

Alt Negative Button: 玩家可以使用的备选负向按钮,比如方向键和WASD

Alt Positive Button:玩家可以使用的备选争相按钮。

Gravity:【重力】如果玩家停止输入,该轴将恢复到空挡或0速度,其单位为单位每秒。

Dead:【盲区】可以用在模拟控制。在模拟控制器上,在这个范围内的任何值都会映射到空档不会提供任何输入。

Sensitivity:【灵敏度】可以用于数字控制,他是该轴向给定得值移动的速度。正负都可,单位为单位每秒。

Snap:【对齐】如果选中,可以确保在同时按下正向和负向按钮时候该轴的值为空挡。

Invert:【反转】迅速交换正向和负向控制键。

Type:【类型】该键对应的输入设备类型。可以为Key,MouseButton,MouseMove,JoystickAxis,或Window Movement。

Axis:【轴】这个控制方式有该输入设备的哪条轴指挥。这可受不同游戏手柄影响。

JoyNum:【操作杆编号】多个操作杆在机器上市后,决定哪个哪个操作杆控制给定的轴。可以选择从所有的操作杆接受输入,或是为其制定一个特定的。

你需要关注的就是这些。下面说说Input类:

GetAxis();返回制定轴得值。

GetButton():如果制定的按钮按下,返回True。

GetKey():如果制定按键按下返回True。

GetMouseButton():制定鼠标按钮按下返回True。

ResetInputAxis():使用这个函数可以重置虽有输入,并把他们护肤到空挡或0.

anyKey:任意键按下返回True。比如:按任意键继续。

MousePisition:使用向量来保存鼠标在屏幕上当前位置。屏幕左下角映射为(0,0);

先说这些吧。看看Input的API吧。Xbox的风格也是不一样的。自己看吧。


2019-05-20 06:31:40 hankern 阅读数 158
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4729 人正在学习 去看看 张刚

Direct3D(简称:D3D)是微软公司在Microsoft Windows操作系统上所开发的一套3D绘图编程接口,由微软公司所制定的3D规格界面,与Windows 95Windows NT操作系统兼容性好,可绕过图形显示接口(GDI)直接进行支持该API的各种硬件的底层操作,大大提高了游戏的运行速度,是DirectX的一部分,目前广为各家显示卡所支援。与OpenGL同为电脑绘图软体和电脑游戏最常使用的两套绘图编程接口之一。

Direct 3D是基于微软的通用对象模式COM(Common Object Mode)的3D图形API。它是由微软(Microsoft)一手树立的3D API规范,微软公司拥有该库版权,它所有的语法定义包含在微软提供的程序开发组件的帮助文件、源代码中。Direct3D是微软公司DirectX SDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。自1996年发布以来,Direct3D以其良好的硬件兼容性和友好的编程方式很快得到了广泛的认可,现在几乎所有的具有3D图形加速的主流显示卡都对Direct3D提供良好的支持。但它也有缺陷,由于是以COM接口形式提供的,所以较为复杂,稳定性差,另外,目前只在Windows平台上可用。

DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体例如全色图形、视频、3D 动画和丰富音频)编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发,并且只能支持这些平台。最新版本为DirectX 12,创建在最新的Windows10。

从字面意义上说,Direct就是直接的意思,而后边的X则代表了很多的意思,从这一点上可以看出DirectX的出现就是为了为众多软件提供直接服务的。

DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。

显示部分

显示部分担任图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D),前者主要负责2D图像加速。它包括很多方面:我们播放mpg、DVD电影、看图、玩小游戏等等都是用的DDraw,你可以把它理解成所有划线的部分都是用的DDraw。后者则主要负责3D效果的显示,比如CS中的场景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D。

声音部分

声音部分中最主要的API是DirectSound,除了播放声音和处理混音之外,还加强了3d音效,并提供了录音功能。我们前面所举的声卡兼容的例子,就是利用了DirectSound来解决的。

输入部分

输入部分DirectInput可以支持很多的游戏输入设备,它能够让这些设备充分发挥最佳状态和全部功能。除了键盘和鼠标之外还可以连接手柄、摇杆、模拟器等。

网络部分

网络部分DirectPlay主要就是为了具有网络功能游戏而开发的,提供了多种连接方式,TCP/IPIPXModem,串口等等,让玩家可以用各种连网方式来进行对战,此外也提供网络对话功能及保密措施。

没有更多推荐了,返回首页