Unity 实现简单力场效果

Unity 实现简单力场效果

前言

项目中要用到一个力场的效果,偶然在bilibili中找到了。记录一下。
原视频: https://www.bilibili.com/video/BV18E411M785

效果

效果

源码

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

public class ItemScript4 : MonoBehaviour
{
    /// <summary>
    /// 要躲避的物体
    /// </summary>
    public Transform center;

    /// <summary>
    /// 引力位置
    /// </summary>
    public Vector3 gravitationPos = Vector3.zero;
    /// <summary>
    /// 出生位置
    /// </summary>
    public Vector3 createPos = Vector3.zero;

    /// <summary>
    /// 力场影响范围,半径
    /// </summary>
    public float forceRadius = 4;
    /// <summary>
    /// 斥力
    /// </summary>
    public float repulsion;
    /// <summary>
    /// 吸引力
    /// </summary>
    public float targetAttractive;
    // Start is called before the first frame update
    void Start()
    {
        createPos= this.transform.position;
        gravitationPos= this.transform.position;
    }

    // Update is called once per frame
    void Update()
    {
        //速度
        var velocity = Vector3.zero;
        //计算跟随物体与力场物体的距离
        var len = (this.transform.position - center.position).magnitude;  //计算距离
        //如果距离小于范围,就是处于力场之中
        if (len < forceRadius)
        {
            //力场半径-距离/力场半径
            var rate = (forceRadius - len) / forceRadius;
            //根据距离来计算力的强度(如果没有这一步,会出现抖动)
            var intensity = repulsion * rate;
            //速度要加上这个值
            velocity += (this.transform.position - center.position) * intensity * Time.deltaTime;  //计算斥力
        }
        
        velocity += (gravitationPos - this.transform.position) * Time.deltaTime * targetAttractive;  //同时计算目标点的引力

        this.transform.position += velocity;

        //计算大小,跟随物体与引力中心离的越近越小
        this.transform.localScale = Mathf.Clamp01((this.transform.position - center.position).magnitude / forceRadius) * Vector3.one;
    }
}

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值