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

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

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

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

Unity

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

Q&A

解決済

4回答

3060閲覧

c# public関数とインスタンス

flan

総合スコア146

C#

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

Unity

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

0グッド

1クリップ

投稿2016/07/25 03:58

unityのRay ray = Camera.main.ScreenPointToRay(Input.mousePosition);について質問です。

ScreenPointToRayはpublic関数ですよね?public関数はインスタンス化しないと使えないと思うのですが・・・・
この場合mainはstatic変数なのでインスタンスを作らずそのまま呼び出せるのはわかりますが、そこからScreenPointToRayを呼び出しているのが理解できません・・・

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

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

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

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

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

guest

回答4

0

ベストアンサー

ScreenPointToRay()メソッドはCameraクラスの非staticメソッドですので、
Cameraクラスのインスタンス化されたオブジェクト(camera1とする)を使って呼び出す必要があります。

lang

1camera1.ScreenPointToRay(...);

一方、Camera.mainはreadonlyプロパティで、
これによりインスタンス化されたCameraオブジェクト(MainCameraオブジェクト)を取得することが出来ます。
ですので、文法的に誤った使い方ではありません。

lang

1Camera mainCamera = Camera.main; 2Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);

みたいに分けて書くと理解しやすくなりますでしょうか。

投稿2016/07/25 04:09

編集2016/07/25 04:14
TAKA_0921

総合スコア234

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

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

flan

2016/07/25 14:55

つまりmainプロパティは main{ get{ return GameObject.FindWithTag ("MainCamera").GetComponent<Camera>(); } } ということでしょうか?
TAKA_0921

2016/07/25 17:37

意味的にはそんな感じだと思いますが、実装の詳細は不明です。 コメントのようにFindWithTagメソッド等を使っているのかもしれませんし、 予めCameraクラスのstatic変数としてMainCameraオブジェクトを保持しておきそれを返しているだけなのかもしれません。
guest

0

インスタンス化してあると思いますよ?

Camera Camera = new Camera();
とかで。

あと、マルチポストはやめたほうがいいですよ。

投稿2016/07/25 04:12

mugicya

総合スコア1046

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

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

flan

2016/07/25 14:56

マルチポスト?複数投稿ということでしょうか? 以後きおつけます
mugicya

2016/07/25 16:08

はい。 他のサイトでも同じ質問を見かけたので。
guest

0

C#

1Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

=

C#

1Camera camera = Camera.main; 2Ray ray = camera.ScreenPointToRay(Input.mousePosition);

投稿2016/07/25 04:11

ozwk

総合スコア13521

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

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

flan

2016/07/25 14:59

なるほど。。ありがとうございます
guest

0

public 関数とお書きになっているのはインスタンスメソッドの間違いではないかと思いますので、そう仮定してお答えします。
Camera.main は Camera 型のインスタンスを返しますので、インスタンスメソッドを呼び出すことができます。

Camera.main

投稿2016/07/25 04:10

Zuishin

総合スコア28660

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

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

flan

2016/07/25 15:09 編集

すいませんほかの人と返信かぶるんですがこういうことでしょうか? main{ get{ return GameObject.FindWithTag ("MainCamera").GetComponent<Camera>(); } }
Zuishin

2016/07/25 15:42

リンク先にはこうあります。 "MainCamera" にタグ付けされている最初の有効なカメラ(読み取り専用)。 そのようなカメラがシーン内になければ null を返します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問