質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

961閲覧

unity5 javascript txt 配列 反映されない

sitappa

総合スコア7

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/12/28 10:37

###前提・実現したいこと
unityのjavascriptで、位置情報を入力してモデルを飛行させるプログラムを改良することになりました。
位置情報を外部txtを利用して配列を読み込みたいのですが、function start にある値が
function Update に反映されません。どう改良すればよろしいでしょうか?

###発生している問題・エラーメッセージ
function start にある xposition,yposition,zposition,fangle,tangle,pangle の値が
function Updateに反映されない。

エラーメッセージ
なし

###該当のソースコード
#pragma strict

import System;

import System.IO;

import System.Text;

var counter = 0;
var iposition = 0;
var delt = 0.01;
var mcount = 100;
var delx = 0.0;
var dely = 0.0;
var delz = 0.0;
var delf = 0.0;
var delth = 0.0;
var delp = 0.0;

var xposition = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0];
var yposition = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0];
var zposition = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0];
var fangle = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0];
var tangle = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0];
var pangle = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0];

function Start () {
iposition =0;
counter = 0;
mcount = 50;
delt = 1.0/mcount;
delx =0;
dely =0;
delz =0;
delf =0;
delth =0;
delp =0;

//read xposition

var srx:StreamReader;

srx = new StreamReader(Application.dataPath + "/xposition.txt"); var txtx = srx.ReadToEnd(); var xposition = txtx.Split(","[0]); srx.Close(); //read yposition var sry:StreamReader; sry = new StreamReader(Application.dataPath + "/yposition.txt"); var txty = sry.ReadToEnd(); var yposition = txty.Split(","[0]); sry.Close(); //read zposition var srz:StreamReader; srz = new StreamReader(Application.dataPath + "/zposition.txt"); var txtz = srz.ReadToEnd(); var zposition = txtz.Split(","[0]); srz.Close(); //read fangle var srf:StreamReader; srf = new StreamReader(Application.dataPath + "/fangle.txt"); var txtf = srf.ReadToEnd(); var fangle = txtf.Split(","[0]); srf.Close(); //read tangle var srt:StreamReader; srt = new StreamReader(Application.dataPath + "/tangle.txt"); var txtt = srt.ReadToEnd(); var tangle = txtt.Split(","[0]); srt.Close();

//read pangle

var srp:StreamReader; srp = new StreamReader(Application.dataPath + "/pangle.txt"); var txtp = srp.ReadToEnd(); var pangle = txtp.Split(","[0]); srp.Close();

}

function Update () {
if(counter >= mcount){
counter=0;
iposition++;
delx =deltxposition[iposition];
dely =delt
yposition[iposition];
delz =delt*zposition[iposition];

delf =180/3.14*(fangle[iposition]-fangle[iposition-1]);
delth =180/3.14*(tangle[iposition]-tangle[iposition-1]);
delp =180/3.14*(pangle[iposition]-pangle[iposition-1]);
transform.Rotate(delf,delp,-delth);
}else{
counter++;
}
transform.Translate(delx,delz,dely);

}
###試したこと
function Startにxposition,yposition,zposition,fangle,tangle,pangleの値を直接入力するとちゃんと動作した。
txtを配列化しないといけないと思い、Splitを追加してみたが、function Updateに反映されなかった。
print(xposition[iposition]);を使い、xposition[iposition]の動作を確認したが、0がずっと表示されるだけだった。

###補足情報(言語/FW/ツール等のバージョンなど)
unity5.6.1内のjavascriptを使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

UnityのJavaScriptは使ったこと無いのであれですが

var xposition = txtx.Split(","[0]);

の部分を

xposition = [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]; var _list = txtx.Split(","[0]); for(var i = 0; i < _list.length && i < xposition.length; i++) { xposition[i] = float.Parse(_list[i]); }

かなと思いました(var付けてるのでローカル変数のxpositionになるのかなと思いました)
あとtxtxを出力して値が想定のものは行ってるか確認するといいかもしれません。

※余談
UnityScript難しい・・・

var xposition = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0];

これではデータ何も入ってないんですね・・・(Single[]型だけどデータは空っぽ状態)
C#をおすすめしておきます

投稿2017/12/28 11:48

編集2017/12/28 12:44
rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sitappa

2017/12/28 11:57

解答ありがとうございます。var はずすのは試したのですが Cannot convert 'String[]' to 'float[]'. とエラーが出てしまいまいました。 一応txtxは毎回確認して、欲しい値が出てることは確認しています。
rururu3

2017/12/28 12:40

txtxがString[]型で変換するのが出来ない感じですね。 解答編集いたしますー
sitappa

2017/12/28 16:13

ありがとうございます。申し訳ないですが、しばらくunity触れそうにないので、 また来年になったら報告させていただきます。
sitappa

2018/01/09 07:25

確認報告します。 UNITYで値が入って動作していることを確認しました。 遅くなりましたが、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問