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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

3627閲覧

Unityのメインカメラのスクリプトについて

Dawei

総合スコア10

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2016/10/04 01:42

###前提・実現したいこと
360°カメラの画像を球体に張り付けてカメラを動かして中を見ようと思い、カメラにアタッチするスクリプトで、とりあえず以下のものを作ろうとしています。
1.座標を取得して、変数に代入する。
2.条件判断式を作ってspaceボタンを押されたときx座標が300を超えていれば、x座標に30たす。
3.押されたとき超えていたら0に戻る。
4.0に戻るときオブジェクト球体を消す。

###発生している問題・エラーメッセージ
アタッチ自体はでき、エラーも出ないもののupdateの部分が作動せず、startの部分も動いているかどうかわかりません。座標の取得もできているのかわからず、4.に関してはどこにどう書けばいいのかもわからずに困っています。知恵をお貸しいただけないでしょうか。
###該当のソースコード
using UnityEngine;
using System.Collections;

public class mvcam : MonoBehaviour {
public Vector3 pos = new Vector3(-11,0,0);
// Use this for initialization
void start () {
pos = transform.position; //位置保持
}

void update () { if(Input.GetKeyDown(KeyCode.Space) && pos.x < 300 ){ //spaceキーの入力があり、かつx座標が300以下の場合にという条件文(動いていない) transform.position = pos; //位置更新 pos.x += 30; //x座標を+30する(移動する) print(transform.position.x); //コンソールを開くと座標が今どこにいるのかわかるのか書いてくれる } else if(Input.GetKeyDown(KeyCode.Space) && pos.x > 300){ transform.position = pos; pos.x = 0; print(transform.position.x); } }

}

###補足情報(言語/FW/ツール等のバージョンなど)
C#

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

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

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

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

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

sakura_hana

2016/10/04 02:16

質問1:カメラの初期位置(インスペクタで表示される座標)はどうなっていますか?  質問2:Update内の条件分岐を「if(Input.GetKeyDown(KeyCode.Space) && pos.x < 300 ){」から「if(Input.GetKeyDown(KeyCode.Space)){」に変更すると動作しますか?
Dawei

2016/10/04 02:25

1:(0,1,-10)ですね 2:しませんでした
guest

回答1

0

ベストアンサー

Start関数、Update関数が共に小文字になっています。
start()Start()
update()Update()

また、posの値をtransform.positionに代入してからposの値を変更してますが、順序が逆だと思います。
このままでは初回動作時に値が更新されません。

4についてですが、球体のオブジェクトを破棄したいのか非表示にしたいのかで変わってきます。
まずは球体のオブジェクトを取得する必要があります。

C#

1using UnityEngine; 2using System.Collections; 3 4public class mvcam : MonoBehaviour { 5public Vector3 pos = new Vector3(-11,0,0); 6private GameObject sphereObject; // 球体のオブジェクトを格納するGameObject型の変数 7 // Use this for initialization 8 void Start () { 9 pos = transform.position; //位置保持 10 11 // 追加 12 // タグを使って取得 13 sphereObject = GameObject.FindObjectWithTag("タグ名"); 14 // オブジェクト名で取得する場合 15 // sphereObject = GameObject.Find("オブジェクト名"); 16 } 17 18 void Update () { 19 if(Input.GetKeyDown(KeyCode.Space) && pos.x < 300 ){ //spaceキーの入力があり、かつx座標が300以下の場合にという条件文(動いていない 20 pos.x += 30; //x座標を+30する(移動する)順序を入れ替え 21 transform.position = pos; //位置更新 22 print(transform.position.x); //コンソールを開くと座標が今どこにいるのかわかるのか書いてくれる 23 } 24 else if(Input.GetKeyDown(KeyCode.Space) && pos.x > 300){ 25 pos.x = 0; // 順序を入れ替え 26 transform.position = pos; 27 print(transform.position.x); 28 29 // 追加 30 // オブジェクトを破棄する場合 31 if(sphereObject != null){ // オブジェクトがnullではないときに処理 32 Destroy(sphereObject); 33 } 34 // オブジェクトを非表示にする場合 35 // sphereObject.SetActive(false); 36 } 37 } 38}

オブジェクト名ではなく、タグを使って球体のオブジェクトを取得する場合は、球体のオブジェクトにあらかじめタグを設定しておく必要があります。
しかし、同じタグを付けているオブジェクトが他にもある場合は、GameObject.FindWithTag()では不十分なので、指定したオブジェクトを取得する処理も必要になります。

オブジェクトを破棄する場合は、破棄したあとに、また球体(同じオブジェクトのプレハブか別かはともかく)を見る必要がある場合は、再びオブジェクトを取得する処理が必要になります。
非表示にするだけの場合に、再び表示させるにはsphereObject.SetActive(true)でオブジェクトをアクティブにすればOKです。

投稿2016/10/04 02:24

編集2016/10/04 02:25
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Dawei

2016/10/04 02:44

ありがとうございました。やり方ごとに書いてもらえたおかげで、かなりわかりやすかったです。おかげで動くようになりました。 まだまだ勉強不足ですが、精進していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問