バーチャル3Dクリエイター神部まゆみです(*^_^*)
この記事はUnityでアイテム回転と光らせる処理を実装したので、それについての記事です。
Starter Assetsを改変して作っているので、↓の記事から見ると理解が深まります。
動作確認した最新バージョンは Unity 6000.3.1 です。
やりたいこと:フィールドにあるアイテムを回転&光らせる処理を実装する
前回捨てたアイテムを落とす処理を実装したので、せっかくだからアイテムを回転&光らせる処理を実装したい。
※↑の記事のスクリプトなどをそのまま使うので、↑の記事からやったほうが良いです。
今は↓こんな感じで無骨に落とす処理だけしているのだけど、まぁこれでも良いんだけど小さいと分かりにくいんですよね(^_^;)
Falloutだとこんな感じだったからまぁゲームにもよるだろうけど、もう少し目立たせてみたいと思った。
ChatGPTパイセンに聞いてみる
とりあえず彼に聞けばなんとかなるだろう…。




アイテム回転させるの面白いですね。ほかのゲームだとなんか光る枠みたいなのがついてて回転してたりしますが、パーティクルとかで目立たせるとかもできるんでしょうか?


いいところに目を付けましたね!
「回転+光り物」は 拾えるアイテム感 を一瞬で伝えられる、めちゃくちゃコスパのいい演出です ✨
しかも Unity だと わりと簡単にできます。
●できること一覧(全部可能です)
- モデルを くるくる回転
- ふわっと 上下に浮遊
- 光るリングが回転
- パーティクルでキラキラ
- レア度で色変更
しかも全部 Prefab 側に付けるだけで済みます。
① まずは超定番:回転+浮遊
DroppedItem に追加するだけ
public class DroppedItem : MonoBehaviour
{
public ItemData itemData;
[Header("Visual")]
public float rotateSpeed = 60f;
public float floatHeight = 0.2f;
public float floatSpeed = 2f;
private Vector3 startPos;
void Start()
{
startPos = transform.position;
}
void Update()
{
// 回転
transform.Rotate(Vector3.up, rotateSpeed * Time.deltaTime);
// 浮遊
float y = Mathf.Sin(Time.time * floatSpeed) * floatHeight;
transform.position = startPos + Vector3.up * y;
}
public void Setup(ItemData data)
{
itemData = data;
}
}
👉 これだけで
**「あ、拾えるやつ」**になります。
② 光る枠(リング)を付ける
やり方(超簡単)
- dropPrefab を開く
- 子に Plane or Cylinder を追加
- 薄くして足元に配置
- Emission 付きマテリアルを設定
マテリアル設定
- Shader:Standard / URP Lit
- Emission ON
- HDR カラーで明るめに
👉 これで 光る床リング完成。
リングを回転させたい場合
子オブジェクトに👇
void Update()
{
transform.Rotate(Vector3.up, 90f * Time.deltaTime);
}
③ パーティクルでキラキラ
手順
- dropPrefab に Particle System を追加
- Shape:Sphere or Cone
- Rate over Time:5〜10
- Start Size:小さめ
- Start Lifetime:1〜2秒
おすすめ設定
- Loop ON
- Gravity Modifier 0
- Simulation Space:World
👉 控えめにすると 高級感出ます。
④ レア度で色を変える(発展)
ItemData に追加👇
public enum Rarity
{
Common,
Rare,
Epic
}
public Rarity rarity;
public Color glowColor;
Prefab 側で👇
particle.startColor = itemData.glowColor;
ringMaterial.SetColor("_EmissionColor", itemData.glowColor);
⑤ パフォーマンス的に大丈夫?
全然OKです。
- 回転・Sin:超軽い
- パーティクル:数個なら問題なし
- TPS規模なら余裕
案外簡単にできそう?
ここまでチマチマ地道に進めてきたから、ちょっとずつ機能を追加するならそこまで手間ではないかな?
実際に実装してみる
実際に実装していきます。
前回の記事に追加して作っていくので、前の記事から見たほうがいいと思います。
DroppedItem.csを書き換える
以下のコードに書き換えます。
public class DroppedItem : MonoBehaviour
{
public ItemData itemData;
[Header("Visual")]
public float rotateSpeed = 60f;
public float floatHeight = 0.2f;
public float floatSpeed = 2f;
private Vector3 startPos;
void Start()
{
startPos = transform.position;
}
void Update()
{
// 回転
transform.Rotate(Vector3.up, rotateSpeed * Time.deltaTime);
// 浮遊
float y = Mathf.Sin(Time.time * floatSpeed) * floatHeight;
transform.position = startPos + Vector3.up * y;
}
public void Setup(ItemData data)
{
itemData = data;
}
}
これだけでも目立つからそれっぽい
この時点で動かしてみたけど、結構目立つからこれだけだけでも良いかもしれないw
でももう少し目立たせたいので光らせたりもしたいと思います。
光る枠(床?)を作る
フィールドに表示する用の3DプレハブはScriptableObjectに指定してあるので、このプレハブを開いて編集します。
今回はピストルの3Dモデルですが、子にPlaneやCylinderなどなんでもいいので配置して分かりやすくします。
マテリアルを作成して適用、Emissionで光らせると分かりやすくなるかな。
この時点で見ると…目立つけどめっちゃ荒ぶるw
この時点でこんな感じだけど…めっちゃ荒ぶるけど面白いからアリかw
横回転だけさせたい場合、Rigidbodyの Constraints ⇒ 回転を固定 の設定をいじる
Rigidbodyには位置や回転を固定するというハイカラな機能があるため、ここでXとZ軸にだけチェックを入れると縦のY軸だけ回ります。


これで一般的なゲームっぽい挙動になったかな。
まぁなんか風呂桶みたいに見えるからそこは適当に調整してくださいw
パーティクルも追加して目立たせる
プレハブ編集に戻り、パーティクルを追加してもう少し目立たせます。
設定はこんな感じにしたけど、まぁ好みで適当に調整してくださいw




色も好みだけど、後ですぐ調整できるので後で凝ればいいかな。
これで動いた!
見栄えは調整したほうがいいけど、まぁ目立つという点に関してはクリアかなw
欲を言えばパーティクルの開始時の速度をもう少し早くした方がいいか…。まぁ勝手に調整してください(^_^;)
つづく?
案外手軽に実装できて良かった。
アイテム系のコアな部分はだいたい作ったから、あとはプラスする感じでできてるんだと思う。
次は拾う動作をやってみようかなぁ。
続きが書けたら追記します(*^_^*)





