おせ~~て コンソールの疑問とTips

 ====   『OKと言わないジャバコンソール』====
Java script ってどうだっけ
昔にかじっただけなので 思い出せませんね
C#とかluaとか記憶がごっちゃになっているし・・・
そもそも、Unityは java廃止じゃなかったでしょうか
いまさらjavaなんでしょうか
    Var let Void  型宣言 とかどうなったのでしょうか

javaも変化していろんなversionがあるようです
今は java scriptは ES2015(ES6) 準拠でしょうか

例えば    [??]  って文字化けかと思ったら 演算子かなにからし
アロー関数ってなんだろう そんなのあったかな?
最初は不等号の一種かと思いましたが [    => ] なるほど矢印の形をしている
ちなみにこれは [ <= ] 不等号らしい 
《ちなみに 無名関数と アロー関数はちょっと違うらしい》

とりあえず ジャバコンソール(以下ジャバコン)をいじってみます
まず、ジャバコンを開発してくれた方に感謝です
1文字でも変更するとすぐに反応してくれます。早いです
早すぎて scriptを全文読まずに 半分ぐらい読んで実行するらしく
エラーのないはずのscriptでも コンソールにエラーを残してくれます

ですが 『OKとは 絶対に言わない』 ようです
何と言っても 入力待ち なのか フリーズ(応答なし)なのか
 ジャバコンでは 判別つきません
《 >1+1を入力すると <2 が返れば フリーズしていないと確認できるようです 》



コンソールは その前の 赤いエラー文字が表示されているだけで
今の状態を伝えてくれません
『返事しなさいよ』と叫びたくなります

うろ覚えの記憶で闇雲にエラーを試していてもラチがあかないのでtutorialをやってみることにします
ポケットさんの記事は 混乱している記憶を整理するのに役にたちました ありがたい
https://gist.github.com/pocketberserker/0a8d4c77780de8defd49ec88447205c8
スクリプト付きアイテム」のためのJavaScript入門(非公式)
@ポケットバーサーカーpocketberserker

> が入力のエコーで < が出力のようです
> --------------
 > let i = 10
 < undefined
 > i
 < 10
> --------------
[undefined]・・って、てっきり エラーかと思っていたら、違うようです
定義しているのに un-defined「未定義」とはどういう 返事なのでしょうか!
[undefined]は[understanded] のミスプリではないかと思いました
《たぶん null や Undefined は トラップに使うのであって OKの代用とは言い難い気がします》
とにかく、代入成功なら [  < OK   ]・・て言って欲しいな。
コマンドプロンプトが点滅して入力待ちを示してくれるイメージは
Basic インタープリタの記憶でしょうか

====『お返事なさい!ジャバコン』
《Cluster Javaコンソールの第一印象を愚痴りましたが
 開発された方々には感謝とお礼申し上げておきます》
ジャバコンソールが返事をしないなら
ユーザーが返事を書けばよい  と気づいたので 
以下の print文 相当の 行を挿入することにしました

$.log("----ok Initialize");
$.log("----ok intract");
$.log("----ok update");            
    //$.onUpdate() 用  注:流れるので 不要になったらレム文にする
$.log("----ok end of sentence");    
    //文末の点検用

これでやっと試行錯誤ができるようになってきました
具体例として 巨大水面 (20m100m)のscriptについて書きます
125個のOBJを並べるscriptです
「実質4x4x4m制限を超えたアイテム作れるようになった」
という記事に触発されて 闇雲に配列とかいじっていましたが、完成しないので
結局、hyoromoさんのscriptも参考にさせていただきました

 この記事は CCK2.0.0の頃の記事です
CCK2.0.0では 水面を 128個おけたのですが
CCK2.1.0でuploadしようとすると「Mesh renderer数32以下にせよ」
というエラーに引っかかるようになりました
巨大平面は今後 16mx32m ぐらいが 限界になるかもしれません

----------------巨大水面 (20m100m) の例 ----------------
$.onUpdate(deltaTime => {
let count1 = $.state.count1 ?? false;
 if (!count1) {                //初回だけ実行される
 $.log("----ok update");        //1回だけ表示されるはず
let index = 0;         

for (let i = 0; i < 5; i++) {
for (let j = 0; j < 25; j++) {
  let pos = new Vector3(4*i,1,-4 * j );    //高さYは1固定
  let tile = $.subNode("plane2side (" + index++ +")");    
  tile.setPosition(pos);        //これで 元のsubnodeにも値が入るらしい 不思議
  let rot = new Quaternion().setFromEulerAngles(new Vector3(-89.9, 0, 0));  //BlenderFBXあるある 
 tile.setRotation(rot);    
}
}
    $.state.count1 = true;
}else{}
});
 $.log("----ok end of sentence");    //文末の点検用

    ------------------



ちなみに OBJ名は水面ですが両面あるので2sideと命名しています
以下のような名前で 0~124まで用意しています
    plane2side (0)
    plane2side (1) 
    plane2side (2)
    ・・・・・
    plane2side (124)
もっとスマートにできそうですが現時点では無理でした
一つだけ用意して Create Itemで 増殖させたらスマートですが
ワールドクラフトではまだ そのコマンドは許可されていないと思います 残念
増殖するポップコーンをみて うっかり もう許可されたのかと錯覚してしまいました

どうせ一回しか実行しないなら onUPdate文の内で実行するのも無駄なので
onUPdateを省いてみたところ、 エラーでした
onUPdateは 必ず必要らしいです
それなら まあ、いいかと そのままにしています
このあたりはウロ覚えと 確証がないので 『java script わからん』
とサジをなげておきます
今後、負荷を考慮した 書き換え 講座とか 期待したいですね

引用して使って下さいというには自信がないですね
処理負荷がどうなのか わからないし 責任もてません
向きが勝手にかわると聞いたので 向きを指定していますが
不要だったかもしれません。恥を書いておきます

おまけ    

====「パッケージという用語が多すぎる」====
ワールドクラフトのアイテムにもパッケージという言葉がでてきますが
ここでは     パッケージマネージャ と *.unitypackage ファイルの話になります
2022年夏 Clusterが Unity2019から Unity2021 へ移行した 時の話題です

おおざっぱには 自分としては以下のよう理解しています
『CCKやプラグインなどのプログラムは パッケージマネージャ で操作する
  メニューでは    Window>packageManager
 ユーザーデータやアセットは  *.unitypackage ファイルを 操作する
  メニューでは    assets>importPackage>Custum    』




ですが厳密にはそうではないので 自分用に調べたことをまとてみました
間違っていたらごめんなさい。
*.unitypackage ファイルは データもプログラムも両方 梱包できる形式です
混乱があるなら、データのみのファイル形式と プログラムのみファイル形式を分ければ話しはすっきりしそうです
ですが    assetでは 3Dデータ以外に sampleシーンも同梱するように    ルールがあるようです
    scriptやプログラム的なデータも入れたいでしょう
またプラグインのほうでも sampleとして 3Dデータを同梱して 動作確認しやすくしたいようです
そういうわけで *.unitypackage ファイルは データもプログラムも両方 梱包できる形式としてスタートしたようです
たぶん当初は *.unitypackage ファイルの import exportの ひとつのメニューで済んでいたのかもしれません
Unity側のDocumentを読むと
Unity2019では あいまいでしたが Unity2021では メニューを分けて行こうという傾向が見えてきます
プラグインのインストールでは *.unitypackage ファイルも使いますが
他にもurlを指定したりいろんな仕掛けをくわえて 
データのimportとは 違う方向に手順が発達してきたのがパッケージマネージャーのようです

例えば CCKの導入方法は 3通りぐらいあるようです
> 1 CCKの入ったProjectフォルダごとZipでユーザーに提供する方法
> 2 パッケージマネージャで 「Add package from disk」
> 3 パッケージマネージャで 「Scoped Registries」云々の方法
3の新しい方法ではURLを入力するだけで 直接 *.unitypackage ファイルを見ることがないようになっています

古いプラグインによっては2の方法でしか利用できないものもありますね
2022年夏 Unity2021 への移行での 2022.0704~0717の約2週間
このときに、ちょっと古い方法  *.unitypackage ファイル で CCK1.15.0を配布するという
方法がとられました。メニューでいうと「Add package from disk」です。
これで多少の混乱がありました。  
・・・・・以上