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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

JavaScript

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

Unity

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

Q&A

2回答

320閲覧

javascriptをC#に直す

ShiR0

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

JavaScript

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

Unity

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

0グッド

1クリップ

投稿2018/11/07 15:15

前提・実現したいこと

unityでゲームを作っています。敵のステータスの作成を友人にお願いしたところ、Javaで作ってきて困っています。一応そのコードを使ってunityで実行したのですが、敵がplayerの近くを通ると挙動がおかしくなるなどが起きてしまいました。また敵が浮遊している状態で動いているなども確認しました。

該当のソースコード

var target : GameObject;//追いかけるターゲットを決める var speed :float = 1.0;//追いかけるスピード var gravity:float=2.0f;//重力(これは必要なのでしょうか?浮遊させず、変な挙動にしたくないため、リジッドボディが使いたいのですが) private var isEnable = false;//敵の認識範囲にいるかどうか function Update () { var controller : CharacterController = GetComponent(CharacterController); var moveDirection : Vector3 = Vector3.zero; if(isEnable==true){ if (Vector3.Distance(transform.position, target.transform.position)) { var targetDirection : Vector3 = target.transform.position; targetDirection.y = 0; transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(targetDirection - transform.position), Time.time * 0.1); moveDirection += transform.forward * 1; moveDirection.y -= gravity * Time.deltaTime; controller.Move(moveDirection * Time.deltaTime * speed); } } } function OnTriggerEnter( colobj : Collider ){//ボックスコライダーを範囲にしているので、その範囲にいるかどうか if(colobj.tag == 'Player'){ isEnable = true; target= colobj.gameObject; } } function OnTriggerExit( colobj : Collider ){ if(colobj.tag == 'Player'){ isEnable = false; } }

敵はunity公式のAdmを使用しています。勿論アニメーションもです。Admに入れているのは、ボックスコライダー、キャラクターコントローラーです。

補足情報(FW/ツールのバージョンなど)

unity2018.2.4f1

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

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

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

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

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

m.ts10806

2018/11/07 17:34

タグにある通り「JavaScript」では。 >Javaで作ってきて
m.ts10806

2018/11/07 17:36

具体的な仕様が不明瞭なので、現在提示の情報から他人が突っ込めるところはあまりなさそうです。なんとなく思うのは最初から作り直したほうが早いかもしれませんね。
y_waiwai

2018/11/07 22:08

で、しつもんはなんでしょうか。
fiveHundred

2018/11/08 04:05

mts10806さんの言う通り、C#で作り直したほうが早いとは思いますが、どのようにするにせよ、現在のバージョンではJavaScriptは非推奨であり、C#とJavaScriptの連携も面倒なところがあるので、今後はUnityでJavaScriptを使わないように友人に伝えたほうがいいですね。
guest

回答2

0

JavaScriptをC#に修正する件ですが、
この場合、targetはGameObject型で宣言するという意味です。
これをC#に直すにはvarを:の後の文字に変更します。

JavaScript

1var target : GameObject;

c#

1GameObject target;

こんな感じです。

これは型が省略されていますが、この型はboolですので、

JavaScript

1private var isEnable = false;//敵の認識範囲にいるかどうか

c#

1private bool isEnable = false;//敵の認識範囲にいるかどうか

関数の宣言方法ですが、
C#では返り値の型を明記する必要があります。
この場合何も返さないのでvoidと書いて下さい。

JavaScript

1function Update () { 2 //... 3}

c#

1void Update () { 2 //... 3}

上記のように修正し、MonoBehaviourを継承したclassの中に書けば動くと思います。

投稿2018/11/08 04:53

nakajimakotaro

総合スコア90

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

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

0

確かめたわけではないのですが、敵の挙動がおかしくなる原因は

Javascript

1transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(targetDirection - transform.position), Time.time * 0.1);

だと思います。

Time.timeはゲーム開始時からこのフレームが開始された時までの経過時間です。
Time.time
Quaternion.Slerpの第三引数は0~1である必要があります。
Quaternion.Slerp
ですが、この場合Time.time*0.1が渡されています。

対策として、Quaternion.RotateTowardsを使用する方法があります。
Quaternion.RotateTowards
この関数は定速で現在の向きから向きたい方向へ向くクォータニオンを返してくれます。
ですので、

Javascript

1Quaternion.RotateTowards( 2 transform.rotation, 3 Quaternion.LookRotation(targetDirection - transform.position), 4 1 //一フレームに回転する角度(度数法) 5);

こちらの関数を使用するときちんと回ってくれると思います。

投稿2018/11/08 04:38

nakajimakotaro

総合スコア90

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問