Unity实现磁铁效果
所有效果均都参考使用:https://www.zhihu.com/question/39781696 ,包括同作者(Xylt)聊天得知。
前言:刚遇到这个功能,想的其实挺简单,但是做的时候发现其实我想的有点多并且有些问题。
第一版我用的我自己的思路去做的,不使用物理碰撞利用Transform来判断,判断方向和距离。只要As -> Bn的距离等于An->Bs的距离则为异极相吸,反则排斥。但是他会有一个问题,当两磁铁其中有一个具有旋转,不是水平的那么他的距离就会出现不等的问题。这个点始终想不明白。于是有了第二版。
第二版,通过参考文章,我做出来了。大概想法是,在磁铁的两极添加碰撞,并在脚本中赋予两极不同的标识,通过碰撞进行判断,从而达到相吸或者排斥的条件。移动方式使用物理方式进行操作。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Magnet : MonoBehaviour
{//最大距离[SerializeField]float MaxDistance;//最远距离[SerializeField]float MinDistance;//最大的力度[SerializeField]float MaxForce;//磁极标识[SerializeField]ItemType _Type;//动画曲线,用来做磁力的变化public AnimationCurve forceCurve;Rigidbody thisRig;public ItemType mType{get{return _Type;}}private void Awake(){thisRig = GetComponentInParent<Rigidbody>();}private void OnTriggerStay(Collider other){Magnet script = other.GetComponent<Magnet>();if (script == null)return;Rigidbody otherRig = other.attachedRigidbody;//获取两极之间的距离float distance = Mathf.Max(MinDistance, Vector3.Distance(this.transform.position, script.transform.position));//根据距离获取当前力度float forceAmount = Mathf.Min(GetForce(distance), MaxForce);//获取方向Vector3 forceDir = Vector3.Normalize(this.transform.position - script.transform.position);//方向以及力度Vector3 force = forceDir * forceAmount;//如果同极反方向运动if (script.mType == this.mType) force *= -1;//因为都是磁铁所以需要给产生碰撞的两极都添加力otherRig.AddForceAtPosition(force, script.transform.position); if (thisRig != null)thisRig.AddForceAtPosition(-force, script.transform.position); }//利用动画曲线对磁力度进行获取,根据两极之前的距离变大或变小。float GetForce(float value){float var = value / MaxDistance;float curveValue = forceCurve.Evaluate(var);float farce = MaxForce * curveValue;return farce;}
}
public enum ItemType
{South,North,
}
将这个脚本添加到磁铁的两级然后就可以实现磁体的效果了。需要注意的是磁极的碰撞大小以及位置需要测试调节才能达到效果。
如果,运行过程中出现同级吸引之后不会停止而是来回动作,或者排斥时物体不会停止时,请修改物理系统参数,
- 将相关物体的碰撞检测方式设为:CountinuousDynamic;
在ProjectSettings的Physics一栏中,打开Enable Adaptive Force,提高Default Solver Iterations
限制磁力最大值
减少相关物体的碰撞大小
写个Bug呢是我处理的时候出现的问题,然后去询问的原作者,原作者告知的。感谢!!!!!!!!
Unity实现磁铁效果相关推荐
- unity 条目换位效果_Unity AI主题博客条目
unity 条目换位效果 Welcome to the first of Unity's new AI-themed blog entries! We have set up this space a ...
- Unity 实现贴花效果的制作教程
c#教程https://www.cnblogs.com/Yesi/p/15829200.html 有些游戏中的战斗痕迹的效果会通过贴花来实现的,贴花的方式多种多样.而在Unity中,有一种给官方 ...
- unity气流模拟效果
机房气流模拟效果 参考 效果展示: 资源链接:unity气流模拟效果-Unity3D文档类资源-CSDN下载
- 用Unity实现景深效果
用Unity实现景深效果 景深也是一种非常常见的后处理手段,它用来模拟相机拍摄画面的效果.今天我们讨论如何在Unity中实现它. 简单来说,景深效果可以拆分为两个部分,一个部分是聚焦,使画面中指定的区 ...
- Unity 翻书效果
Unity翻书效果 目前做的VR项目中需要一个翻阅魔法书的效果,考虑过使用UnityBookPageCurl-master插件,但是那个插件是纯UI显示的,只有二维效果,在VR里观感不佳,之后在网上找 ...
- Unity时光倒流效果实现
Unity时光倒流效果实现<25/11/2017> 场景:一个Panel,一个由众多小Cube堆叠而成的巨大Cube,巨大Cube中心放置爆炸点Bomb. 实现方式:一共就三个脚本,每个C ...
- Unity UV 水效果实现
Unity UV 水效果实现 Unity Water Shader 组件搭载 基本参数调节 所需图片 效果呈现 Unity Water Shader Shader "Custom/SeaWa ...
- [Unity Shader]凌波微步效果
[Unity Shader]凌波微步效果 相信很多人都看过天龙八部,里面的段誉有一个技能就是凌波微步:移动的时候人先到,衣角跟随其后.说白了就是移动时有一个残影跟着他.下面先看下最终效果 下面我们看如 ...
- unity 打字机变色效果
unity 打字机变色效果 实现效果 工程文件下载 实现难点 打印文字的最后一个字的颜色是与前面文字的颜色不同的,而且打印后逐渐变为前面字的颜色. 实现思路 考虑到unity的text组件的颜色是整体 ...
最新文章
- 解压ubi文件_制作ubi文件系统
- Thymeleaf 常用属性
- LINUX安装REDIS集群
- 阿里广告技术最新突破:全链路联动-面向最终目标的全链路一致性建模
- Python 元组(Tuple)操作详解
- python字典的值可以是字典吗_python字典的值可以是字典吗
- 关于Keras在测试不能使用正则dropout的解决
- linux查看当前用户终端,Linux----基本命令的使用(vi命令,查看文件内容,显示进程,切换用户等)...
- 关于「EPI」的练习 + 秋招笔试所用题库总结(持续更新~)+秋招笔试题库资源分享(无偿)
- 打印机驱动是什么,打印机驱动有什么用,一定要安装打印机驱动吗
- flv.js插件播放flv格式的视频实例(vue)
- nuc972 linux 升级,NUC972移植工作记录
- 蓝桥杯-第六届省赛第一题
- java项目---探花交友
- Android长图文截图的实现(支持截取第三方app)-(一)
- 《网络空间测绘技术与实践》正式发售,让网络空间作战“有图可依”
- Windows10家庭版 打不开组策略
- OA软件如何打破信息孤岛,实现价值全面释放
- STL教程(十): 关联容器--unordered_map/unordered_multimap
- Java、JSP单位内收发文系统
热门文章
- Scala简易实践知识
- P30 pro成功升级HarmonyOS!!!!
- JWT讲解与实际运用
- 微星笔记本-gf63-1050-win10-ubuntu16双系统安装
- Autodesk 3ds max 2017 无法保存导出fbx的预设(FBX export does not save presets - Autodesk)
- 王嘉尔成为Dr.Jart+蒂佳婷品牌亚太区面膜代言人
- 【已解决】nvidia-smi报错:NVIDIA-SMI has failed because it couldn’t communicate with the ... 阿里云GPU服务器
- Excel表格中,上下左右键无法移动单元格怎么办?
- 点云 3D 天气数据增强 - LiDAR Snowfall Simulation for Robust 3D Object Detection (CVPR 2022)
- Android银联手机控件支付使用教程