20200912のUnityに関する記事は3件です。

2020年9月にclusterで何かを作って楽しむ方法

この記事でできること

  • 9月にclusterを楽しむアレコレを書きました。
  • 今月はclusterで何かを作りたいな−という方の参考になれば幸いです。

9月のお題企画は、「ひきこもりの秋」

  • ひきこもりの秋
  • clusterのワールド内に配置して、アバターが使用できるアイテムです。

2つのハッシュタグ「#cluster用アイテム #ひきこもりの秋」と
「アイテムがダウンロード可能なURL」を一緒にツイート!

  • たとえば、公式noteにも紹介されていますが、ねおソフトさんのハトソード

  • Blenderやマジカボクセル、tinkercadでモデリングしたり、
    Freeのアセットストアからの素材を改造するなどして、
    Package化してBOOTH出店するのが近道かと。(あるいはgitHub)

  • なお、「つかめるアイテムの作り方」は、コチラ公式で紹介されています。


clusterのサンプルプロジェクトを組み合わせる

  • たとえば、うのっちの名作「AddBalance」は、バランスゲームなので、clusterで対戦するにはもってこい。

これ↓
AddBalanceAniGif.gif

準備編

サンプルプロジェクトのダウンロード

  • 的あてゲーム」のサンプルプロジェクトをダウンロードしよう。
  • 的あてゲームのサンプル万能説。

クリエイターキットの更新

  • 最新版は常にコチラで確認しておこう。
  • zipファイルを解凍して、Packageマネージャーで、jsonファイルを選択する。
  • クリエイターキットのアップデート方法はコチラから。

目標のイメージ像

AddBalanceForCluster2.png
AddBalanceForCLusterAnim.gif
Scene画面↓
スクリーンショット 2020-09-12 23.43.50.png

clusterでのワールドはコチラから。
まずはプレイしてみて、どんな改造を施しているか、考えてみましょう。

アセットで時短

  • POLYGON – Starter Pack
  • すでに過去のプロジェクトで使用している場合は、Packageマネージャーからダウンロードすることができる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

(Unity)昔のプロジェクトを開いたら「Faild to load window layout」が出て詰んだときの対処

タイトル通りですがUnity2020で昔のプロジェクトを更新して開こうとした時に「Faild to load window layout」が出てどの選択肢を選んでもプロジェクトが開けない状態に陥入りました。色々調べるとUnityフォーラムに解決が載っていたので検索ヒット率を高めるために共有します。

こちらのスレッドに載ってます。ここでもなかなか迷走しているので自分がやって治った箇所だけピックアップします。
Can not Launch Unity Due to "Failed to load window layout"

原因?

なんとなくですが昔のプロジェクトのエディターのレイアウトデータ(2 by 3とかそういうやつを自分で大きさ変えたりしたのが保存されているはずなので)が読み込めなくなり、本来はデフォルトのレイアウトを読み込むところがなぜかデフォルトのレイアウトも読み込みすることができなくなっている状態だとみたいです(実際よくわからんけど、とりあえず開けないんだ。。。)

解決方法

ざっくり説明すると[Load Default Layout]を押すとCurrentLayout-default.dwltにデフォルトのデータが読み込まれるがどう操作しても開けないようになっている上にUnityを終了するとまたレイアウトデータが破壊される(!?)

なので読み込まれた正しいデフォルトのレイアウトデータ(破壊前の)をデスクトップか何かにコピーしておいて終了後にそのデータを上書きして起動時にコピーしておいたデータを読み込ませて正しく起動させているようです。


  1. Press [Load Default Layout]
  2. Unity copies the correct default layout to CurrentLayout-default.dwlt
  3. Unity complains that it still cannot load the layout
  4. Copy the now correct CurrentLayout-default.dwlt somewhere
  5. Press Quit
  6. Unity corrupts the file during quitting
  7. Copy back the correct CurrentLayout-default.dwlt
  8. Start Unity again

翻訳

  1. [Load Default Layout]を押します
  2. Unityは正しいデフォルトレイアウトをCurrentLayout-default.dwltにコピーします
  3. Unityはまだレイアウトをロードできないと表示される
  4. 正しいCurrentLayout-default.dwltをどこかにコピーします
  5. 終了を押します
  6. Unityが終了中にファイルを破壊する 7.正しいCurrentLayout-default.dwltをコピーして戻します
  7. Unityを再起動します

その他

自分でも色々やってその上でスレッドに載っていた他こともちょっとやってダメで上のを試したら解決したのでもダメだったら以下も試してみてください。

  • 大元のデフォルトレイアウトデータでLastLayout.dwltを消す
  • プロジェクトのLibraryフォルダを消す
  • 日本語から英語エディターに切り替える(他のプロジェクト開いて)

などです(多分効いてないと思いますが)。

同じ症状が出た人は試してみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityエディタ拡張 Drag & Drop 領域をちょっと便利にする ( 備忘録 )

個人的に便利なDrag & Dropのエディタ拡張をメモ

完成図

完成系はこんな感じです、テスト用にターゲットとする拡張子を変更できるようにしてます。

image.png

スクリプト

using System.IO;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Events;
using UnityEditor;

namespace Sample
{
    public class DragAndDropEditor : EditorWindow
    {
        [MenuItem("Custom/DragAndDropEditor")]
        static void ShowWindow()
        {
            var window = GetWindow<DragAndDropEditor>();
            window.titleContent = new GUIContent("DragAndDropEditor");
        }


        // テスト用.
        StringBuilder stringBuilder = new StringBuilder(512);
        string targetExtension = ".unity";


        // UI描画.
        void OnGUI()
        {
            // テスト用,ターゲットの拡張子を変更する.
            targetExtension = EditorGUILayout.TextField("targetExtension", targetExtension);

            // 目的とするファイルの拡張子を指定してDrag & Dropの領域を描画する.
            // 複数ファイルドロップに対応し、指定した拡張子以外のファイルがマスクされた配列がコールバックで呼ばれる.
            DrawFileDragArea(
                GUILayoutUtility.GetRect(0.0f, 75.0f, GUILayout.ExpandWidth(true)),
                "Drag & Drop",
                targetExtension,
                (objs) =>
                {
                    stringBuilder.Clear();
                    foreach (var obj in objs)
                    {
                        stringBuilder.AppendLine(obj.name);
                    }
                });

            if (GUILayout.Button("Clear"))
            {
                stringBuilder.Clear();
            }

            // 取得したアイテムのリストを描画.
            EditorGUILayout.LabelField(stringBuilder.ToString(), GUILayout.Height(300));
        }


        /// <summary>
        /// ドラッグアンドドロップ領域を描画,コールバックで取得したオブジェクトを得る.
        /// </summary>
        /// <param name="dropArea"> Drag & Dropを受け付ける範囲. </param>
        /// <param name="dropAreaMessage"> Drag & Dropを受け付ける領域に描画する文字列. </param>
        /// <param name="targetFileExtension"> 目的のファイルの拡張子. </param>
        /// <param name="dropCallback"> Dropされた時のコールバック.  </param>
        /// <param name="visualMode"> マウスカーソルの見ため,基本的にGenericでよいと思われる. </param>
        private void DrawFileDragArea(
            Rect dropArea,
            string dropAreaMessage,
            string targetFileExtension,
            UnityAction<UnityEngine.Object[]> dropCallback,
            DragAndDropVisualMode visualMode = DragAndDropVisualMode.Generic)
        {
            Event evt = Event.current;
            GUI.Box(dropArea, dropAreaMessage);

            switch (evt.type)
            {
                // ドラッグ中.
                case EventType.DragUpdated:
                case EventType.DragPerform:
                    if (!dropArea.Contains(evt.mousePosition))  break;

                    // Dragされている間のカーソルの見た目を変更.
                    DragAndDrop.visualMode = visualMode;

                    if (evt.type == EventType.DragPerform)
                    {
                        // オブジェクトを受け入れる.
                        DragAndDrop.AcceptDrag();
                        if (0 < DragAndDrop.objectReferences.Length)
                        {
                            var dropObjects = new List<UnityEngine.Object>();
                            for (var i = 0; i < DragAndDrop.paths.Length; ++i)
                            {
                                if (Path.GetExtension(DragAndDrop.paths[i]) == targetFileExtension)
                                    dropObjects.Add(DragAndDrop.objectReferences[i]);
                            }

                            if (0 < dropObjects.Count)
                                dropCallback?.Invoke(dropObjects.ToArray());
                        }
                        DragAndDrop.activeControlID = 0;
                    }
                    Event.current.Use();
                    break;
            }
        }

    }    
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む