所有效果均都参考使用: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,
}

将这个脚本添加到磁铁的两级然后就可以实现磁体的效果了。需要注意的是磁极的碰撞大小以及位置需要测试调节才能达到效果。

如果,运行过程中出现同级吸引之后不会停止而是来回动作,或者排斥时物体不会停止时,请修改物理系统参数,

  1. 将相关物体的碰撞检测方式设为:CountinuousDynamic;
  2. 在ProjectSettings的Physics一栏中,打开Enable Adaptive Force,提高Default Solver Iterations

  3. 限制磁力最大值

  4. 减少相关物体的碰撞大小

写个Bug呢是我处理的时候出现的问题,然后去询问的原作者,原作者告知的。感谢!!!!!!!!

Unity实现磁铁效果相关推荐

  1. unity 条目换位效果_Unity AI主题博客条目

    unity 条目换位效果 Welcome to the first of Unity's new AI-themed blog entries! We have set up this space a ...

  2. Unity 实现贴花效果的制作教程

    c#教程​https://www.cnblogs.com/Yesi/p/15829200.html ​ 有些游戏中的战斗痕迹的效果会通过贴花来实现的,贴花的方式多种多样.而在Unity中,有一种给官方 ...

  3. unity气流模拟效果

    机房气流模拟效果 参考 效果展示: 资源链接:unity气流模拟效果-Unity3D文档类资源-CSDN下载

  4. 用Unity实现景深效果

    用Unity实现景深效果 景深也是一种非常常见的后处理手段,它用来模拟相机拍摄画面的效果.今天我们讨论如何在Unity中实现它. 简单来说,景深效果可以拆分为两个部分,一个部分是聚焦,使画面中指定的区 ...

  5. Unity 翻书效果

    Unity翻书效果 目前做的VR项目中需要一个翻阅魔法书的效果,考虑过使用UnityBookPageCurl-master插件,但是那个插件是纯UI显示的,只有二维效果,在VR里观感不佳,之后在网上找 ...

  6. Unity时光倒流效果实现

    Unity时光倒流效果实现<25/11/2017> 场景:一个Panel,一个由众多小Cube堆叠而成的巨大Cube,巨大Cube中心放置爆炸点Bomb. 实现方式:一共就三个脚本,每个C ...

  7. Unity UV 水效果实现

    Unity UV 水效果实现 Unity Water Shader 组件搭载 基本参数调节 所需图片 效果呈现 Unity Water Shader Shader "Custom/SeaWa ...

  8. [Unity Shader]凌波微步效果

    [Unity Shader]凌波微步效果 相信很多人都看过天龙八部,里面的段誉有一个技能就是凌波微步:移动的时候人先到,衣角跟随其后.说白了就是移动时有一个残影跟着他.下面先看下最终效果 下面我们看如 ...

  9. unity 打字机变色效果

    unity 打字机变色效果 实现效果 工程文件下载 实现难点 打印文字的最后一个字的颜色是与前面文字的颜色不同的,而且打印后逐渐变为前面字的颜色. 实现思路 考虑到unity的text组件的颜色是整体 ...

最新文章

  1. 解压ubi文件_制作ubi文件系统
  2. Thymeleaf 常用属性
  3. LINUX安装REDIS集群
  4. 阿里广告技术最新突破:全链路联动-面向最终目标的全链路一致性建模
  5. Python 元组(Tuple)操作详解
  6. python字典的值可以是字典吗_python字典的值可以是字典吗
  7. 关于Keras在测试不能使用正则dropout的解决
  8. linux查看当前用户终端,Linux----基本命令的使用(vi命令,查看文件内容,显示进程,切换用户等)...
  9. 关于「EPI」的练习 + 秋招笔试所用题库总结(持续更新~)+秋招笔试题库资源分享(无偿)
  10. 打印机驱动是什么,打印机驱动有什么用,一定要安装打印机驱动吗
  11. flv.js插件播放flv格式的视频实例(vue)
  12. nuc972 linux 升级,NUC972移植工作记录
  13. 蓝桥杯-第六届省赛第一题
  14. java项目---探花交友
  15. Android长图文截图的实现(支持截取第三方app)-(一)
  16. 《网络空间测绘技术与实践》正式发售,让网络空间作战“有图可依”
  17. Windows10家庭版 打不开组策略
  18. OA软件如何打破信息孤岛,实现价值全面释放
  19. STL教程(十): 关联容器--unordered_map/unordered_multimap
  20. Java、JSP单位内收发文系统

热门文章

  1. Scala简易实践知识
  2. P30 pro成功升级HarmonyOS!!!!
  3. JWT讲解与实际运用
  4. 微星笔记本-gf63-1050-win10-ubuntu16双系统安装
  5. Autodesk 3ds max 2017 无法保存导出fbx的预设(FBX export does not save presets - Autodesk)
  6. 王嘉尔成为Dr.Jart+蒂佳婷品牌亚太区面膜代言人
  7. 【已解决】nvidia-smi报错:NVIDIA-SMI has failed because it couldn’t communicate with the ... 阿里云GPU服务器
  8. Excel表格中,上下左右键无法移动单元格怎么办?
  9. 点云 3D 天气数据增强 - LiDAR Snowfall Simulation for Robust 3D Object Detection (CVPR 2022)
  10. Android银联手机控件支付使用教程