概要
前回はRobot Kyleにキーボードで基本動作ができるようにしましたが、今回はRobotKyleに武器(レーザーソード)を持たせたいと思います。

環境
Windows10
Unity 2020.1.f1
Step1 : レーザーソードの調達
まずはRobot Kyleに持たせる武器の調達をします。Asset Storeにはハイクオリティな武器が無料でたくさんありますが、今回は宇宙戦争っぽさを出そうとおもったのでRobot Kyleにレーザーソードを持たせようと思います。
いろいろ探したところ、こちらを使わせてもらうことにしました。
https://github.com/jjxtra/UnityLaserSword
The MIT License (MIT)
Copyright (c) 2016 Jeff Johnson
https://github.com/jjxtra/UnityLaserSword/blob/master/LICENSE
githubからダウンロードしたLaserSwordをUnityのAssetsの配下にimportします。windowsのディレクトリからドラッグ&ドロップで持ってこれます。

武器の調達は以上です。
Step2 : レーザーソードを持たせる
続いてLaserSwordをRobotKyleに持たせていきます。今回は一番手っ取り早い音やスクリプトもついたprefabを使用します。
LaserSwordフォルダの下にあるLaserSwordPrefab.prefabをドラッグ&ドロップでRobot Kyle > Ribs > Right_Shoulder > Right_Upper_Arm_joint1 > Right_Forearm_Joint1 > Right_Wrist_Joint_01の下にアタッチします。

次にLaserSwordのInspectorを調整していきます。
Transformはデフォルトだと刃先が変な法にでるので、Rotationなどもいい感じに調整してあります。
X | Y | Z | |
Position | 0.07 | 0 | 0 |
Rotation | -90 | 0 | 0 |
Scale | 0.3 | 0.3 | 0.3 |
Glow Intensity,Glow Power, Glow Sclaeレーザーソードのレーザーの部分の雰囲気なので、実物みながら好きなように調整という感じです。
Activation TimeはレーザーソードをONしてから完全に刃先まで出るまでの時間です。デフォルトだと少し遅かったので、0.2にしました。

Step3 : レーザーソードをON/OFFする
今回使用しているLaserSwordのPrefabはレーザーソードをOn/Offするためのメソッドが内包されています。これはpublicとして定義されているので外部のスクリプトから呼び出して使うことができます。そこで以下のようなLaserSwordをOn/Offするスクリプトを作成しました。
主な動きは以下です。
- GameObject.FindでLaserSwordPrefabを取得
- laserswordObj.GetComponent<DigitalRuby.LaserSword.LaserSwordScriptでLazserSwordのスクリプトを取得
- Cボタン押下→レーザーソードON(Activate())、withSwordOnをtrueにする
- 再度Cボタン押下→レーザーソードOFF(Deactivate())、withSwordOnをfalseにする
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LaserOnOff : MonoBehaviour { //LaserSword GameObject laserswordObj; bool withSwordOn = false; // Start is called before the first frame update void Start() { //Find Sword Object laserswordObj = GameObject.Find("LaserSwordPrefab"); } // Update is called once per frame void Update() { DigitalRuby.LaserSword.LaserSwordScript laserSwordScript = laserswordObj.GetComponent<DigitalRuby.LaserSword.LaserSwordScript>(); if (Input.GetKeyDown(KeyCode.C) && !withSwordOn) { laserSwordScript.Activate(); withSwordOn = true; } if (Input.GetKeyDown(KeyCode.C) && withSwordOn) { laserSwordScript.Deactivate(); withSwordOn = false; } }
これをRobot Kyleにアタッチし、GameをStartして、Cボタンを押すと最初のgif動画のような動きになります
まとめ
今回はRobot Kyleにレーザーソードをを持たせてON/OFFするところまでを実践しました。次回はレーザーソードを振り回すアニメーションをつけ足していきたいと思います。
[…] 【Unity】RobotKyleでいろいろ~その4~ レーザーソードを持たせる […]