Unity鼠标手绘与程序化生成碰撞体
Unity鼠标手绘与程序化生成碰撞体 需求分析 实现鼠标当画笔拖拽画线功能(Draw and Guess的效果) 画出线后,为线条自动添加多边形碰撞体 实现思路 线条的生成 LineRenderer组件可以帮助渲染线条 Position储存了线条的各个点的坐标 ( Vector3 ) 检测到鼠标按下时,记录鼠标的位置,使用SetPosition添加到线条的点集中 使用两个变量记录前一个点的位置和当前鼠标的位置,用于判断两点距离是否足够远,足够远的话就将鼠标位置加入Position点集 代码实现: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105using System.Collections;using...
Csharp学习记录-委托
Csharp学习记录-委托 委托 委托可以认为是持有一个或多个方法的对象。委托持有一个或多个方法(方法的列表称为调用列表),以及一系列预定义的操作。 委托的声明与创建委托对象 123//委托的声明//delegate 返回值类型 委托类型名(参数列表)delegate void myDelegate(int printNum); 12345//创建委托对象myDelegate md;//带new运算符的对象创建表达式myDelegate md1 = new myDelegate(PrintInt); 给委托赋值 委托是引用类型,可以通过给他赋值的方式改变包含在委托变量中的引用,旧的委托对象会被垃圾回收器回收(和string同理) 1234myDelegate md1 = new myDelegate(PrintInt);md1 = PrintIntPlusOne;//原有的,调用列表为PrintInt的委托对象不再被引用,将由垃圾回收器回收 为委托添加 / 减去方法 123456//为委托添加方法: +=运算符md1 = PrintIntPlusOne;md1 +=...
C#学习记录-泛型
C#学习记录-泛型 将不确定的类型预先定义下来。我们写的类、接口或方法中,相同的代码为不同的类型提供服务,就可以定义为泛型,可以简化我们的代码结构 示例代码: 12345678//泛型方法void GenericFunc<T>(T prop1,T prop2){ Debug.Log(typeof(T).FullName);}//调用泛型方法GenericFunc<int>(1, 2); 泛型方法 泛型方法是指通过泛型来约束方法中的参数类型,如果没有泛型,每次方法中的参数类型都是固定的,不能随意更改,在使用泛型后,可以根据提供的泛型来传递不同类型的参数。 参数类型 和 返回类型都可以使用泛型 12345//泛型方法void GenericFunc<T>(T prop1,T prop2){ Debug.Log(typeof(T).FullName);} 泛型类 泛型类是指这个类的某些字段的类型是不确定的,只有在构造的时候才能确定下的类,泛型类一般在数据结构中用的比较多,比如 C# 自带的...
Unity按钮视觉上跳过选中Selected状态
Unity按钮视觉上跳过选中Selected状态 问题描述 Unity为Button提供了五种状态,并可以让我们在Inspector中设置五种状态的表现形式 Normal:普通状态 Highlighted:高亮状态,即鼠标悬停在按钮之上但没有其他操作 Pressed:按钮被按下时的状态 Selected:按钮被按下后选中的状态 Disabled:禁用状态 按钮在Selected状态中时,即使鼠标重新进入按钮,也不会切换到Highlighted状态,要通过点击按扭外的区域才可以退出Selected状态。有时我们在按下按钮后不希望其显示Selected状态的表现形式而是希望其正常Highlighted 解决方法 按钮状态的切换交由Selectable.cs这个脚本完成。按钮类在实现时继承了Selectable类 1public class Button : Selectable, IPointerClickHandler,...
OnCollisionStay的判定问题和刚体的SleepingMode
OnCollisionStay的判定问题和刚体的SleepingMode 问题描述: 复刻GunMayhem的单向平台中,使用OnCollisionStay事件判断角色是否踩在平台上,但只有当两个碰撞体之间有相对位移时才会调用 解决方法: 将角色的Rigidbody中的Sleeping Mode从Start Awake改为Never Sleep,允许角色检测每一帧的碰撞 代码: 这里使用了移位运算来将layer转化为layerMask 12345678910private void OnCollisionStay2D(Collision2D collision){ if (Input.GetKey(KeyCode.S)) { if((1<<collision.gameObject.layer) == ground.value) ...
Unity学习记录-物理系统
Unity学习记录-物理系统 Tag和Layer Tag:用于给GameObject分类 是一个string 每一个GameObject都有一个Tag,默认为Untagged Tag可以用来判断一个物体是否属于某分类,也可以用于寻找物体 123456//通过Tag来搜索物体//此方法返回它找到的具有指定标签的第一个 GameObject。如果一个场景包含多个具有指定标签的活动 GameObjects,则无法保证此方法返回特定 GameObject。respawn = GameObject.FindWithTag("Respawn");//此方法返回所有带有指定tag的GameObject数组GameObject[] temp = GameObject.FindGameObjectsWithTag("test"); Layer 是一个int 每个GameObject都有一个Layer,默认为Default 可以让相机只渲染一些Layer,可以让物理运算只在一些Layer上进行 最多可以有32个Layer 12//访问Layerint...
Unity粒子系统学习记录11-ExternalForce模块和粒子系统力场
Unity粒子系统学习记录11-ExternalForce模块和粒子系统力场 External Force模块 可以修改风区和粒子系统力场对粒子的影响 属性 功能 Multiplier 应用于风区外力的比例值。 Influence Filter 选择是否基于层遮罩 (Layer Mask) 或通过列表 (List) 包含力场。 List 定义可影响此粒子系统的力场的显式列表。当 Influence Filter 设置为 List 时,将显示此属性。 Influence Mask 使用层遮罩来确定哪些力场影响此粒子系统。当 Influence Filter 设置为 Layer Mask 时,将显示此属性。 粒子系统力场 将力应用于粒子系统中的粒子,在粒子系统中启动External Force,指定Layer Mask或者指定Force Field组件。 Shape 属性 功能 Shape 选择力场的形状 Start Range 设置力场形状内部从何处开始 End...
Unity粒子系统学习记录10-Light和Trails模块
Unity粒子系统学习记录10-Light和Trails模块 Light模块 将实时光照添加到一部分粒子,例如火光、闪电 属性 功能 Light 分配一个光照预制件来描述粒子光照外观。 Ratio 一个介于 0 和 1 之间的值,表示将接受光照的粒子的比例。 Random Distribution 选择是随机分配还是定期分配光照。设置为 true 时,每个粒子都有根据 Ratio 值随机接受光照的机会。较高的值可增加粒子接受光照的概率。设置为 false 时,由 Ratio 控制新创建的粒子接受光照的频率(例如,每第 N 个粒子将接受光照)。 Use Particle Color 设置为 True 时,光照的最终颜色将通过其附加到的粒子的颜色进行调制。如果设置为 False,则使用光照颜色而不进行任何修改。 Size Affects Range 启用此属性后,在光照中指定的范围 (Range) 将受到粒子大小的影响。 Alpha Affects Intensity 启用此属性后,光照的强度 (Intensity) 将受到粒子 Alpha...
Unity粒子系统学习记录9-TextureSheetAnimation模块
Unity粒子系统学习记录9-TextureSheetAnimation模块 粒子的图形不必是静止图像。此模块允许您将纹理视为可作为动画帧进行播放的一组单独子图像。 创建对应贴图的Material 在Renderer模块里使用Material 选择TextureSheetAnimation处理纹理的模式 Grid模式 Tiles 纹理在 X(水平)和 Y(垂直)方向上划分的区块数量。 Animation 可以设置为Whole Sheet或者Single Row Whole Sheet:整页是一个动画序列,从左到右,从上到下对整张图片进行动画处理 Single Row:每一行代表一个单独的动画序列,单行从左到右产生动画效果 TimeMode 选择粒子系统如何在动画中对帧进行采样 LifeTime:在粒子的生命周期内使用动画曲线对帧进行采样。 Speed:根据粒子的速度对帧进行采样。速度范围指定选择帧的最小和最大速度范围。 FPS:根据指定的每秒帧数值对帧进行采样。 RowMode 当Animation的模式设置为Single...
Unity粒子系统学习记录8-InheritVelocity和SubEmitters模块
Unity粒子系统学习记录8-InheritVelocity和SubEmitters模块 Inherit Velocity模块 从父物体中读取其速度,控制父物体的速度对粒子的影响 例如汽车产生的尘云、火箭产生的烟雾、蒸汽火车烟囱产生的蒸汽 属性 功能 Mode 指定如何将发射器速度应用于粒子 Current 发射器的当前速度将应用于每一帧上的所有粒子。例如,如果发射器减速,所有粒子也将减速。 Initial 每个粒子出生时将施加一次发射器的速度。粒子出生后对发射器速度的任何改变都不会影响该粒子。 Multiplier 粒子应该继承的发射器速度的比例。 Sub Emitters 设置子发射器。这些子发射器是在粒子生命周期的某些阶段在粒子位置处创建的附加粒子发射器,例如升到顶点的烟花会爆炸 属性 功能 Sub Emitters 配置一个子发射器列表,并选择它们的触发条件以及它们从父粒子继承的属性。 Emit...




