SlideShare ist ein Scribd-Unternehmen logo
1 von 104
Downloaden Sie, um offline zu lesen
QGJ直前プログラミング講座
ゆゆ
今日やること
• 音声再生をするよ
• BGM
• 効果音
• マウス操作に対応させるよ
• マウスのクリックを検出する
• マウスの場所になんかする
ちょっと復習
• GameObject
• 世界の中にある「コア」みたいなもの
• それ自体は 触れない 見えない 何もしない
• ただ「そこにある」だけ
• Component
• GameObjectにくっつける「機能」みたいなもの
• 「触れる」という機能 Collider
• 「見える」という機能 Renderer
• 「ぶつかる」という機能 RigidBody
• その他、自作の機能(キーを押したら動くとか)
音声再生のために
• 以下の2つのComponentが必要
1. AudioListner
• 「流れている音を聴く」という機能(耳)
• 世界に1つだけ
2. AudioSource
• 「音を流す」という機能(音源)
• いくつあってもいい 耳側
音源側
音源側
音源側
音源側
BGMを流してみよう
BGMを流してみよう
• まずはUnityを起動、プロジェクトを新規作成
BGMを流してみよう
• はじまりの画面
BGMを流してみよう
• とりあえずBGMファイルを用意する
• 既に再生したいファイルがあるならそれで大丈夫
• http://musmus.main.jp/music_img2.html
• なければ ↑ の中から一曲ダウンロードしておこう
• 用意したファイルをフォルダに入れる
• 「Audio」とか「Sounds」みたいな
わかりやすい名前をつけておく
BGMを流してみよう
• 必要なもの1 : AudioListener
• 実はもうある
• どこ??
BGMを流してみよう
• 必要なもの1 : AudioListener
• 実はもうある
• どこ??
BGMを流してみよう
• 必要なもの1 : AudioListener
• 実はもうある
• どこ??
• あった!!!!!!!!
BGMを流してみよう
• 必要なもの1 : AudioListener
• はじめから Main Camera にアタッチされている
• 新たに作る必要はない
終
著作・制作
NHK
BGMを流してみよう
• 必要なもの2 : AudioSource
• ないので作ろう
• やり方
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
BGMを流してみよう
• 必要なもの2 : AudioSource
• ないので作ろう
• やり方
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
GameObject → Create Empty
BGMを流してみよう
• 必要なもの2 : AudioSource
• ないので作ろう
• やり方
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
適当に名前をつける
BGMを流してみよう
• 必要なもの2 : AudioSource
• ないので作ろう
• やり方
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
Add Component → Audio Source
BGMを流してみよう
• 必要なもの2 : AudioSource
• ないので作ろう
• やり方
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
Sceneビューになんかあるね
BGMを流してみよう
• 必要なもの2 : AudioSource
• ないので作ろう
• やり方
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
BGMを流してみよう
• 必要なもの2 : AudioSource
• ないので作ろう
• やり方
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
ドラッグアンドドロップ
BGMを流してみよう
• 必要なもの2 : AudioSource
• ないので作ろう
• やり方
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
できた
BGMを流してみよう
• 必要なもの2 : AudioSource
• ないので作ろう
• やり方
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
BGMは自動的に再生してほしいのでチェック
BGMを流してみよう
• やることはこれだけ
• シーンを再生してみよう
• 鳴らない場合
• Gameビューの「Mute Audio」が
設定されていませんか?
• オフにしておこう
効果音を流してみよう
効果音を流してみよう
• 例えば、「ジャンプした時」に効果音を鳴らすとして…
• 自動再生じゃだめ
• スクリプトから音声を鳴らしたい!!
• まずは効果音ファイルを用意
• https://soundeffect-lab.info/sound/anime/
• この辺りからDLしておく
• フォルダに入れておこう
効果音を流してみよう
• やり方
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
3. AudioSourceが代入された変数.Play();
効果音を流してみよう
• やり方
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
3. AudioSourceが代入された変数.Play();
効果音を流してみよう
• やり方
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
3. AudioSourceが代入された変数.Play();
Add Component → Audio Source
効果音を流してみよう
• やり方
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
3. AudioSourceが代入された変数.Play();
効果音を流してみよう
• やり方
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
3. AudioSourceが代入された変数.Play();
ドラッグアンドドロップ
効果音を流してみよう
• やり方
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
3. AudioSourceが代入された変数.Play();
できた
効果音を流してみよう
• やり方
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
3. AudioSourceが代入された変数.Play();
効果音を流してみよう
• やり方
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
3. AudioSourceが代入された変数.Play();
自動再生されると不味いので
チェックを外す
効果音を流してみよう
• やり方
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか
3. AudioSourceが代入された変数.Play();
効果音を流してみよう
AudioSourceが代入された変数.Play();
これをスクリプトに書けば音源が再生される
まずはスクリプトをアタッチしよう
1. Add Component をクリック
2. New Script をクリック
3. PlayerController と入力
4. Create and Add をクリック
効果音を流してみよう
• PlayerController を開く
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
効果音を流してみよう
• 変数 audioSource を追加(これに Component を代入する)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public AudioSource audioSource;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
Inspector から設定
できるように public
型は
AudioSource型
効果音を流してみよう
• Inspector になんか増えた
効果音を流してみよう
• Player をドラッグアンドドロップ
効果音を流してみよう
• これで変数 audioSource に代入完了
効果音を流してみよう
• スペースを押した時に再生するようにしてみる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public AudioSource audioSource;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
効果音を流してみよう
• スペースを押した時に再生するようにしてみる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public AudioSource audioSource;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
}
}
}
Input.GetKeyDown(対応するKeyCode)
押した瞬間にtrueになる
効果音を流してみよう
• スペースを押した時に再生するようにしてみる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public AudioSource audioSource;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
audioSource.Play();
}
}
}
AudioSourceが代入された変数.Play();
効果音を流してみよう
• 完成
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public AudioSource audioSource;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
audioSource.Play();
}
}
}
変数定義
Spaceを押すと
再生
効果音を流してみよう
• シーンを再生してスペースキーを押してみよう
音声再生まとめ
• BGM再生
1. BGM再生用の GameObject を作る
2. AudioSource をアタッチする
3. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか → ON
• 効果音再生
1. 効果音が出る GameObject に AudioSource をアタッチする
2. 以下の2箇所を設定する
• AudioClip 再生する音源
• PlayOnAwake シーン開始時に自動的に再生するか→ OFF
3. AudioSourceが代入された変数.Play(); をスクリプトに書く
音声再生おわり
マウス操作
マウスクリックを取得する
• Input.GetMouseButtonDown(ボタンの種類)
• ボタンの種類
• 左クリック: 0
• 右クリック: 1
• 中クリック: 2
• 確認してみる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public AudioSource audioSource;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
audioSource.Play();
}
}
}
マウスの左クリックで
再生
マウスクリックを取得する
• Input.GetMouseButtonDown の仲間
• Input.GetMouseButtonDown 押した瞬間 true
• Input.GetMouseButton 押してる間ずっと true
• Input.GetMouseButtonUp 離した瞬間 true
• Input.GetKeyDown と同じ
• Input.GetKeyDown 押した瞬間 true
• Input.GetKey 押してる間ずっと true
• Input.GetKeyUp 離した瞬間 true
マウスの座標を取得する
• Input.mousePosition;
• 関数ではないので()はいらない
• マウスをクリックしたところにGameObjectを生成してみる
適当にGameObjectを作って
SpriteRendererで見えるようにする
マウスの座標を取得する
• Input.mousePosition;
• 関数ではないので()はいらない
• マウスをクリックしたところにGameObjectを生成してみる
Projectビューにドラッグアンドドロップ
Prefab化しておく
マウスの座標を取得する
• Input.mousePosition;
• 関数ではないので()はいらない
• マウスをクリックしたところにGameObjectを生成してみる
新しくスクリプト「ObjectGenerator」
を作り、Playerにアタッチ
マウスの座標を取得する
• ObjectGeneratorを開く
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectGenerator : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
マウスの座標を取得する
• 生成する GameObject を代入する変数 prefab を追加
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectGenerator : MonoBehaviour
{
public GameObject prefab;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
マウスの座標を取得する
• Inspector から Test Sprite をドラッグアンドドロップ
マウスの座標を取得する
• マウスの左クリックで生成できるようにしてみる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectGenerator : MonoBehaviour
{
public GameObject prefab;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector2 position = Input.mousePosition;
Instantiate(prefab, position, Quaternion.identity);
}
}
}
マウスを左クリックした時
マウスの座標を変数に代入
GameObjectを生成
マウスの座標を取得する
• 確認してみよう
• ????????????????????????
• 生成されてはいるはず
マウスの座標を取得する
• 確認してみよう
• ????????????????????????
• 生成されてはいるはず
• よく見たら座標がヤバい
• 画面外にも程がある
マウスの座標を取得する
生成されたGameObject
カメラで映せる範囲
マウスの座標を取得する
• 実は、2つの座標は原点も単位も違う
Y
X
Input.mousePositionの座標
「スクリーン座標」
原点は画面左下(固定)
単位はPixcel
GameObjectの座標
「ワールド座標」
原点・軸方向はカメラ次第
単位はUnit
マウスの座標を取得する
• やるべきことは、「スクリーン座標」から「ワールド座標」への変換
Y
X
Input.mousePositionの座標
「スクリーン座標」
原点は画面左下(固定)
単位はPixcel
GameObjectの座標
「ワールド座標」
原点・軸方向はカメラ次第
単位はUnit
この点のワールド座標は?
マウスの座標を取得する
• やるべきことは、「スクリーン座標」から「ワールド座標」への変換
• そのための関数
• カメラが代入された変数.ScreenToWorldPoint(スクリーン座標);
• カメラはCamera.mainで取得可能
マウスの座標を取得する
• やってみる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectGenerator : MonoBehaviour
{
public GameObject prefab;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector2 position = Input.mousePosition;
Instantiate(prefab, position, Quaternion.identity);
}
}
}
マウスの座標を取得する
• やってみる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectGenerator : MonoBehaviour
{
public GameObject prefab;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector2 screenPosition = Input.mousePosition;
Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
Instantiate(prefab, worldPosition, Quaternion.identity);
}
}
}
マウスの座標を取得する
• 確認してみよう
マウスの先にあるGameObjectを取得する
• 取得対象にしたい GameObject に ○○Collider2D をアタッチ
マウスの先にあるGameObjectを取得する
• 毎フレームマウスの先のGameObjectを取得し、Consoleに出力
(重なってる場合は1つだけ取得)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class (クラス名) : MonoBehaviour
{
// Update is called once per frame
void Update()
{
Vector2 position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Collider2D collision = Physics2D.OverlapPoint(position);
Debug.Log(collision.gameObject);
}
}
マウスの先にあるGameObjectを取得する
• 毎フレームマウスの先のGameObjectを取得し、Consoleに出力
(重なってる場合は全部取得)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class (クラス名) : MonoBehaviour
{
// Update is called once per frame
void Update()
{
Vector2 position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Collider2D[] collisions = Physics2D.OverlapPointAll(position);
foreach (Collider2D collision in collisions)
{
Debug.Log(collision.gameObject);
}
}
}
マウスの先にあるGameObjectを取得する
• 使い途の例
• 右クリックした時にマウスの先にあるGameObjectを全て削除
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectDestroyer : MonoBehaviour
{
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(1))
{
Vector2 position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Collider2D[] collisions = Physics2D.OverlapPointAll(position);
foreach (Collider2D collision in collisions)
{
Destroy(collision.gameObject);
}
}
}
}
右クリックした時に マウスのワールド
座標を取得
マウスに重なっている
Collider2Dを全取得ひとつひとつ
に対して…
GameObjectを削除
ボタンを作る
• 押すと何かが起こるボタン
• ボタンの作り方
1. Hierarcyで右クリックし、UI → Button をクリック
2. 位置や大きさを指定
3. 中の文字列を指定
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
ボタンを作る
• ボタンの作り方
1. Hierarcyで右クリックし、
UI → Button をクリック
2. 位置や大きさを指定
3. 中の文字列を指定
ボタンを作る
• ボタンの作り方
1. Hierarcyで右クリックし、
UI → Button をクリック
2. 位置や大きさを指定
3. 中の文字列を指定
ボタンを作る
• ボタンの作り方
1. Hierarcyで右クリックし、
UI → Button をクリック
2. 位置や大きさを指定
3. 中の文字列を指定
ボタンを作る
• ボタンの作り方
1. Hierarcyで右クリックし、
UI → Button をクリック
2. 位置や大きさを指定
3. 中の文字列を指定
Buttonの子のText
のText
ボタンを作る
• ボタンの作り方
1. Hierarcyで右クリックし、
UI → Button をクリック
2. 位置や大きさを指定
3. 中の文字列を指定
変えた
ボタンを作る
• ボタンの作り方
1. Hierarcyで右クリックし、
UI → Button をクリック
2. 位置や大きさを指定
3. 中の文字列を指定
• クリックしても、
まだ何も起こらない
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
スクリプト「ClickHandler」
を作り、Buttonにアタッチした
名前は何でもいいし、
アタッチ先がButtonじゃなくても可
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ClickHandler : MonoBehaviour
{
public void SayHello()
{
Debug.Log("Hello, Unity!");
}
}
public関数
「SayHello()」を記述
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
これ
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
まずは+
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
なんかでた
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
行いたい処理を書いたスクリプトが
アタッチされているGameObjectを設定
今回はButton(ClickHandlerがアタッチされている)
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
できた
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
No Functionをクリックして
SayHello()をクリック
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
設定完了!
ボタンを作る
• 押したときの処理の設定の仕方
1. スクリプトに public 関数として書く
2. ボタンの OnClick() に設定
Consoleに表示された
ボタンを作る
• 引数付きの関数は設定できるのか?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ClickHandler : MonoBehaviour
{
public void SayHello()
{
Debug.Log("Hello, Unity!");
}
public void Say1(string message)
{
Debug.Log(message);
}
public void Say2(string message1, string message2)
{
Debug.Log(message1 + message2);
}
}
引数1つの関数
Say1(string)
引数2つの関数
Say2(string, string)
ボタンを作る
• 引数付きの関数は設定できるのか? → 引数1つまでなら可
Say1のみ表示された
ボタンを作る
• 引数付きの関数は設定できるのか? → 引数1つまでなら可
引数はここに入力可能
ボタンを作る
• 引数付きの関数は設定できるのか? → 引数1つまでなら可
ちゃんと表示される
ボタンを作る
• 2つ以上の処理を設定することも可能
ボタンを作る
• ボタンをクリックするとこうなる
マウス操作おわり
演習
演習
1. 左クリックでマウスがある座標にGameObjectを設置し、
右クリックでマウスが重なっているものだけ削除できるようにしよう
2. クリックすると効果音が再生されるボタンを作ろう
補足
補足 : 効果音再生について
• ここで説明した効果音の再生方法は、
「再生時にGameObjectが削除される」という場合には使えない
• 例えば、GameObject削除時に音を鳴らしたいとか……
• 対策方法は2種類
• AudioSource.PlayClipAtPoint(音源, 座標);を使う
• 消えない GameObject に AudioSource をアタッチしておいて
変数 audioSourceにはその AudioSource を指定しておく
補足 : 効果音再生について
• AudioSource.PlayClipAtPoint(音源, 座標);を使う
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public AudioClip clip;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
AudioSource.PlayClipAtPoint(clip, transform.position);
Destroy(gameObject);
}
}
}
再生する音源(Inspectorから指定)
マウスを左クリックした時
効果音再生
自身を削除
補足 : 効果音再生について
• 消えない GameObject に AudioSource をアタッチしておいて
変数 audioSourceにはその AudioSource を指定しておく
• 例えば、Main Camera に AudioSource をアタッチ
• 削除と同時に効果音を再生させたい GameObject には
その AudioSource を指定
補足 : 効果音再生について
• どちらにせよ、記述の順番には注意
• Destroy(gameObject) は効果音を再生する処理の後に書く
補足 : マウスの座標取得について
• これは動くが
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectGenerator : MonoBehaviour
{
public GameObject prefab;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector2 screenPosition = Input.mousePosition;
Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
Instantiate(prefab, worldPosition, Quaternion.identity);
}
}
}
補足 : マウスの座標取得について
• これは動かない
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectGenerator : MonoBehaviour
{
public GameObject prefab;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector2 screenPosition = Input.mousePosition;
Vector3 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
Instantiate(prefab, worldPosition, Quaternion.identity);
}
}
}
補足 : マウスの座標取得について
• ScreenToWorldPoint の返り値は Vector3 型
• Z座標の情報付き
• Z座標はカメラのZ座標
• つまり、カメラのZ座標が -10 だった場合、
Vector3型の worldPosition のZ成分は -10 になる
• この場合、生成したオブジェクトがカメラに近すぎて表示されない
• という理由で、worldPosition は Vector2 型にした
• そうすることでZ座標の情報が消える(0になる)

Weitere ähnliche Inhalte

Was ist angesagt?

【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?
【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?
【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?historia_Inc
 
Unity study2018_1
Unity study2018_1Unity study2018_1
Unity study2018_1karakuridoh
 
連続再生アプリをつくろう Inside of attacca
連続再生アプリをつくろう  Inside of attacca連続再生アプリをつくろう  Inside of attacca
連続再生アプリをつくろう Inside of attaccaTakao Funami
 
CEDEC2012 sound workshop
CEDEC2012 sound workshopCEDEC2012 sound workshop
CEDEC2012 sound workshopTakashi Tanaka
 
Windows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについてWindows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについてKiyokazu Kaba
 
Photon勉強会(クライアントサイド)2015/8/4 発表資料
Photon勉強会(クライアントサイド)2015/8/4 発表資料Photon勉強会(クライアントサイド)2015/8/4 発表資料
Photon勉強会(クライアントサイド)2015/8/4 発表資料GMO GlobalSign Holdings K.K.
 
幽霊の棲む家 技術資料
幽霊の棲む家 技術資料幽霊の棲む家 技術資料
幽霊の棲む家 技術資料MaxNeetGames
 
ブロックバスター制作資料
ブロックバスター制作資料ブロックバスター制作資料
ブロックバスター制作資料MaxNeetGames
 
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】GMO GlobalSign Holdings K.K.
 
Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】
Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】
Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】GMO GlobalSign Holdings K.K.
 
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようUnity Technologies Japan K.K.
 
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーションビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - UnityステーションUnity Technologies Japan K.K.
 

Was ist angesagt? (13)

【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?
【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?
【出張ヒストリア2017】新しいUnreal AudioEngineでインタラクティブサウンドコンテンツはどこまでつくれるか!?
 
Unity study2018_1
Unity study2018_1Unity study2018_1
Unity study2018_1
 
連続再生アプリをつくろう Inside of attacca
連続再生アプリをつくろう  Inside of attacca連続再生アプリをつくろう  Inside of attacca
連続再生アプリをつくろう Inside of attacca
 
CEDEC2012 sound workshop
CEDEC2012 sound workshopCEDEC2012 sound workshop
CEDEC2012 sound workshop
 
Windows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについてWindows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについて
 
Photon勉強会(クライアントサイド)2015/8/4 発表資料
Photon勉強会(クライアントサイド)2015/8/4 発表資料Photon勉強会(クライアントサイド)2015/8/4 発表資料
Photon勉強会(クライアントサイド)2015/8/4 発表資料
 
幽霊の棲む家 技術資料
幽霊の棲む家 技術資料幽霊の棲む家 技術資料
幽霊の棲む家 技術資料
 
ブロックバスター制作資料
ブロックバスター制作資料ブロックバスター制作資料
ブロックバスター制作資料
 
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】
 
Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】
Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】
Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】
 
Cedec2013 photon network engine
Cedec2013 photon network engineCedec2013 photon network engine
Cedec2013 photon network engine
 
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
 
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーションビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
 

Ähnlich wie プログラミング講座

「Adx2 LE」Unity活用編 初~中級編
「Adx2 LE」Unity活用編 初~中級編「Adx2 LE」Unity活用編 初~中級編
「Adx2 LE」Unity活用編 初~中級編Takaaki Ichijo
 
㉓cocos2dでゲームを作ろう!その1
㉓cocos2dでゲームを作ろう!その1㉓cocos2dでゲームを作ろう!その1
㉓cocos2dでゲームを作ろう!その1Nishida Kansuke
 
KLabCreativeSeminar#3_Unityサウンドエキスパート養成講座
KLabCreativeSeminar#3_Unityサウンドエキスパート養成講座KLabCreativeSeminar#3_Unityサウンドエキスパート養成講座
KLabCreativeSeminar#3_Unityサウンドエキスパート養成講座KLab sound team
 
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくりDIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくりUnity Technologies Japan K.K.
 
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくりUnite2017Tokyo
 
Unity チュートリアル
Unity チュートリアルUnity チュートリアル
Unity チュートリアルMasaki Katoh
 
わんくま勉強会東京#67 セッション資料
わんくま勉強会東京#67 セッション資料わんくま勉強会東京#67 セッション資料
わんくま勉強会東京#67 セッション資料Kenji Daikoku
 

Ähnlich wie プログラミング講座 (7)

「Adx2 LE」Unity活用編 初~中級編
「Adx2 LE」Unity活用編 初~中級編「Adx2 LE」Unity活用編 初~中級編
「Adx2 LE」Unity活用編 初~中級編
 
㉓cocos2dでゲームを作ろう!その1
㉓cocos2dでゲームを作ろう!その1㉓cocos2dでゲームを作ろう!その1
㉓cocos2dでゲームを作ろう!その1
 
KLabCreativeSeminar#3_Unityサウンドエキスパート養成講座
KLabCreativeSeminar#3_Unityサウンドエキスパート養成講座KLabCreativeSeminar#3_Unityサウンドエキスパート養成講座
KLabCreativeSeminar#3_Unityサウンドエキスパート養成講座
 
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくりDIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
 
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
 
Unity チュートリアル
Unity チュートリアルUnity チュートリアル
Unity チュートリアル
 
わんくま勉強会東京#67 セッション資料
わんくま勉強会東京#67 セッション資料わんくま勉強会東京#67 セッション資料
わんくま勉強会東京#67 セッション資料
 

プログラミング講座