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; } }