IT Learning

実践形式でITのお勉強

Unity

【Unity】キャラクター操作その4 –  レーザーソードを持たせてON/OFFする

投稿日:2020年10月9日 更新日:

概要

前回は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などもいい感じに調整してあります。

XYZ
Position0.0700
Rotation-9000
Scale0.30.30.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を一から学ぶのにおすすめの本はコチラ

Related

-Unity

執筆者:


  1. […] 【Unity】RobotKyleでいろいろ~その4~ レーザーソードを持たせる […]

【Unity】RobotKyleでいろい~その5~ レーザーソードにアニメーションをつける – IT Learning へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です