
停滞匕首 (U7)
[U7兼容] 挥舞这把受诅咒匕首的力量!使用动作键将武器固定在空中,穿刺你的敌人,利用它们攀爬,甚至重现那著名的约翰·威克场景。你可以通过抓取匕首来使用
查看大图模型感谢Teliri:https://sketchfab.com/3d-models/dagger-low-poly-01db689d606a4cbb879b1fba67b55fa8
使用这把武器,你可以停止所有物理计算,以下是我使用的代码:
namespace StasisDagger
{
public class ItemStasisWeapon : MonoBehaviour
{
// 我声明我的变量。我会在使用它们时解释它们。
protected Interactor rightInteractor;
protected Interactor leftInteractor;
protected Item item;
public bool wasTeleGrabbed = false;
public float timer = 0.0f;
protected void Awake()
{
// 我存储物品本身以便能够引用它
item = this.GetComponent<Item>();
// 我在持有武器、念力、释放念力和抓取武器的方法中注入了自定义代码。
item.OnHeldActionEvent += OnHeldAction;
item.OnTeleUnGrabEvent += OnTeleUnGrabAction;
item.OnTeleGrabEvent += OnTeleGrabAction;
item.OnGrabEvent += OnGrabAfterTele;
}
// 你想用心灵传动来移动匕首,所以你将 isKinematic 设为 false
public void OnTeleGrabAction(Handle handle, Telekinesis teleGrabber)
{
if (handle.rb.isKinematic == true)
{
handle.rb.isKinematic = false;
}
}
// 如果你松开念力,你希望武器在未被抓住时保持原位,而在被远程抓住时表现正常。为此,你将其设置为运动学,我们稍后会处理远程抓住时的情况。
public void OnTeleUnGrabAction(Handle handle, Telekinesis teleGrabber)
{
wasTeleGrabbed = true;
handle.rb.isKinematic = true;
}
// 如果你用远程抓取匕首,你不希望它保持静止,所以一旦你抓住它,就立即将 isKinematic 设置为 false,仅当它来自远程抓取时,因为你希望能够使用匕首攀爬,而这只有在正常抓取时它们保持运动学状态才能实现。
public void OnGrabAfterTele(Handle handle, Interactor interactor)
{
if (wasTeleGrabbed)
{
handle.rb.isKinematic = false;
}
}
// Interactable.Action 存储你在控制器中按下的按钮。AlternateUseStart 是按下动作按钮,至少在 Oculus 中,我使用的是:
public void OnHeldAction(Interactor interactor, Handle handle, Interactable.Action action)
{
if (action == Interactable.Action.AlternateUseStart)
{
item.rb.isKinematic = !item.rb.isKinematic;
}
}
// 这会使飞镖在短暂延迟后不再被视为隔空取物,因此你可以在不使其失去运动状态的情况下抓住它们
void FixedUpdate()
{
if (wasTeleGrabbed)
{
timer += Time.deltaTime;
if (timer > 0.1f)
{
wasTeleGrabbed = false;
timer = 0f;
}
}
}
}
}
请随意将其添加到您自己的武器中,只需将 .dll 文件复制到您修改的武器文件夹中,并在 Item_Weapon.json 文件中引用它。您需要在 "modules": 之后添加此代码。
{
"$type": "StasisDagger.ItemModuleStasisWeapon, StasisDagger"
},


还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。