
回旋镖 (U7)
U7 兼容!独自前行太危险,带上这个!来自《时之笛》中林克的回旋镖。投掷出去,它会回到你手中。
查看大图一如既往,这是代码:
namespace Boomerang { // 物品模块会为物品对象添加一个Unity组件。更多信息请参阅Unity MonoBehaviour:https://docs.unity3d.com/ScriptReference/MonoBehaviour.html // 当触发器被按下时,该组件会对玩家刚体施加一个朝向物品变换方向的力(参见物品预制体中物品定义组件的自定义引用) public class ItemBoomerang : MonoBehaviour { protected Item item; private Transform boomerangTransform; private Transform headTransform;
public ItemModuleBoomerang 模块;
private Vector3 返回方向;
private bool isSpinning = false;
private bool isReturning = false;
private bool firstTrow = true;
private bool reachedBubble = false;
private float bubbleTimer = 0f;
private float bubbleTimeOut = 1f;
protected void Awake() {
item = this.GetComponent<Item>();
headTransform = Player.local.head.gameObject.transform;
boomerangTransform = item.transform;
模块 = 物品.数据.获取模块<物品模块回旋镖>();
item.OnCollisionEvent += OnBoomerangCollisionEvent;
item.OnGrabEvent += OnBoomerangGrabEvent;
item.OnTeleGrabEvent += OnBoomerangTeleGrab;
item.OnUngrabEvent += OnBoomerangUngrabEvent;
}
void OnBoomerangCollisionEvent(ref CollisionStruct collisionInstance) {
停止旋转();
}
void OnBoomerangTeleGrab(Handle handle, Telekinesis teleGrabber) {
停止旋转();
}
void OnBoomerangGrabEvent(Handle handle, Interactor interactor) {
停止旋转();
}
void OnBoomerangUngrabEvent(Handle handle, Interactor interactor, bool throwing) {
开始旋转();
}
void FixedUpdate() {
如果 (正在旋转) {
回旋镖变换.旋转(向量3.前方, 模块.旋转速度);
如果(物品.刚体.速度.大小 <= 3f && !正在返回) {
开始返回();
}
}
if (isReturning) {
if (Vector3.Distance(boomerangTransform.position, headTransform.position) <= module.returningBubble) {
达到气泡 = 真;
}
如果(物品.刚体.速度.大小 < 模块.最大速度) {
物品.刚体.添加力(返回方向 * 模块.返回速度, 力模式.加速度);
}
如果 (到达气泡) {
气泡计时器 += 时间.增量时间;
}
如果(气泡计时器 >= 气泡超时时间) {
停止旋转();
}
}
}
void StopSpinning() {
isSpinning = false;
item.rb.useGravity = true;
isReturning = false;
firstTrow = true;
bubbleTimer = 0f;
reachedBubble = false;
}
void StartSpinning() {
if(item.rb.velocity.magnitude > module.minSpeedForSpinning) {
isSpinning = true;
item.rb.useGravity = false;
}
}
void StartReturning() {
if (firstTrow) {
firstTrow = false;
isReturning = true;
returnDirection = headTransform.position - boomerangTransform.position;
returnDirection.Normalize();
}
}
}
}
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。