Rust プラグインでエンティティのスケールを変更する
Published on 2024/10/08Tags
概要
Rust プラグインで Entity Scale Manager を使用してエンティティのスケールを変更します。
参考情報
関連情報
Entity Scale Manage のインストール
-
Entity Scale Manager から
EntityScaleManager.cs
をダウンロードします。 -
EntityScaleManager.cs
をサーバーのoxide/plugins
フォルダにコピーします。
API_ScaleEntity
Entity Scale Manage の API API_ScaleEntity
でエンティティのサイズを変更します。今回は大きいドローンをスポーンするプラグインを作ります。
-
プラグインのインスタンスを保持するフィールドを作成し初期化処理時にインスタンスを設定します。
private static BigDrone _pluginInstance; [PluginReference] Plugin EntityScaleManager; private void Init() { _pluginInstance = this; } private void Unload() { _pluginInstance = null; }
-
ドローンがスポーンしたら API_ScaleEntity を呼んでサイズを大きくします。
private void OnEntitySpawned(BaseNetworkable entity) { switch (entity.PrefabName) { case "assets/prefabs/deployable/drone/drone.deployed.prefab": var result = _pluginInstance.EntityScaleManager.CallHook("API_ScaleEntity", entity, 5f); break; } }
-
スポーンコマンドを実行すると巨大化したドローンがスポーンします。
spawn drone.deployed
全てのソースコード
using Oxide.Core;
using Oxide.Core.Plugins;
namespace Oxide.Plugins
{
[Info("Big Drone", "st-little", "0.1.0")]
[Description("This plugin spawns a Big Drone.")]
public class BigDrone : RustPlugin
{
private static BigDrone _pluginInstance;
[PluginReference]
Plugin EntityScaleManager;
private void Init()
{
_pluginInstance = this;
}
private void Unload()
{
_pluginInstance = null;
}
private void OnEntitySpawned(BaseNetworkable entity)
{
switch (entity.PrefabName)
{
case "assets/prefabs/deployable/drone/drone.deployed.prefab":
var result = _pluginInstance.EntityScaleManager.CallHook("API_ScaleEntity", entity, 5f);
break;
}
}
}
}
API_RegisterScaledEntity
Entity Scale Manage の API API_RegisterScaledEntity
でサイズを変更済みのエンティティを Entity Scale Manager に登録します。今回は小さいサーチライトをRHIBに追加するプラグインを作ります。
-
プラグインのインスタンスを保持するフィールドを作成し初期化処理時にインスタンスを設定します。
private static RHIB _pluginInstance; [PluginReference] Plugin EntityScaleManager; private void Init() { _pluginInstance = this; } private void Unload() { _pluginInstance = null; }
-
RHIB がスポーンしたら RHIB の子エンティティとして SphereEntity をスポーンします。次に、SphereEntity の子エンティティとして小さいサーチライトをスポーンします。最後に API_RegisterScaledEntity を呼んでサーチライトのエンティティを Entity Scale Manager に登録します。
private void OnEntitySpawned(BaseNetworkable entity) { switch (entity.PrefabName) { case "assets/content/vehicles/boats/rhib/rhib.prefab": var sphereEntity = GameManager.server.CreateEntity("assets/prefabs/visualization/sphere.prefab", new Vector3(0.27f, 3.2f, 0.85f)) as SphereEntity; if (sphereEntity == null) return; sphereEntity.SetParent((BaseVehicle)entity); sphereEntity.currentRadius = 0.4f; sphereEntity.lerpRadius = 0.4f; sphereEntity.Spawn(); SearchLight searchLight = GameManager.server.CreateEntity("assets/prefabs/deployable/search light/searchlight.deployed.prefab") as SearchLight; if (searchLight == null) { sphereEntity.Kill(); return; } searchLight.SetParent(sphereEntity); Vector3 searchLightScale = searchLight.transform.localScale; searchLightScale.x = 0.4f; searchLightScale.y = 0.4f; searchLightScale.z = 0.4f; searchLight.transform.localScale = searchLightScale; Vector3 searchLightAngles = searchLight.transform.localEulerAngles; searchLightAngles.y = 180.0f; searchLight.transform.localEulerAngles = searchLightAngles; searchLight.Spawn(); _pluginInstance.EntityScaleManager.Call("API_RegisterScaledEntity", searchLight); break; } }
-
スポーンコマンドを実行するとコクピットの上部に小さいサーチライトが追加された RHIB がスポーンします。
spawn spawn rhib
全てのソースコード
using System;
using System.Collections.Generic;
using UnityEngine;
using Oxide.Core;
using Oxide.Core.Plugins;
namespace Oxide.Plugins
{
[Info("RHIB", "st-little", "0.1.0")]
[Description("RHIB")]
public class RHIB : RustPlugin
{
private static RHIB _pluginInstance;
[PluginReference]
Plugin EntityScaleManager;
private void Init()
{
_pluginInstance = this;
}
private void Unload()
{
_pluginInstance = null;
}
private void OnEntitySpawned(BaseNetworkable entity)
{
switch (entity.PrefabName)
{
case "assets/content/vehicles/boats/rhib/rhib.prefab":
var sphereEntity = GameManager.server.CreateEntity("assets/prefabs/visualization/sphere.prefab", new Vector3(0.27f, 3.2f, 0.85f)) as SphereEntity;
if (sphereEntity == null) return;
sphereEntity.SetParent((BaseVehicle)entity);
sphereEntity.currentRadius = 0.4f;
sphereEntity.lerpRadius = 0.4f;
sphereEntity.Spawn();
SearchLight searchLight = GameManager.server.CreateEntity("assets/prefabs/deployable/search light/searchlight.deployed.prefab") as SearchLight;
if (searchLight == null)
{
sphereEntity.Kill();
return;
}
searchLight.SetParent(sphereEntity);
Vector3 searchLightScale = searchLight.transform.localScale;
searchLightScale.x = 0.4f;
searchLightScale.y = 0.4f;
searchLightScale.z = 0.4f;
searchLight.transform.localScale = searchLightScale;
Vector3 searchLightAngles = searchLight.transform.localEulerAngles;
searchLightAngles.y = 180.0f;
searchLight.transform.localEulerAngles = searchLightAngles;
searchLight.Spawn();
_pluginInstance.EntityScaleManager.Call("API_RegisterScaledEntity", searchLight);
break;
}
}
}
}