ながながといろいろ書いてきましたが最後にLineに送る方法について書いていきます。Lineに送る方法はiOSとAndroid両方ともURLスキームを開くだけなので簡単です。
iOSでLineに送る
まずネイティブプラグインを作成します。内容としては画像を保存したパスから画像を取得し、クリップボードに貼り付けます。そして、そクリップボードのパスをURLスキームに組み込んで渡しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
extern "C" void _PostLine(const char *textureURL){ NSString *_textureURL = [NSString stringWithUTF8String:textureURL ? textureURL : ""]; NSString *contentType; NSString *contentKey; UIImage *image = [UIImage imageWithContentsOfFile:_textureURL]; UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.image = image; contentType = @"image"; contentKey = pasteboard.name; NSURL *lineUrl = [NSURL URLWithString:[NSString stringWithFormat:@"line://msg/%@/%@", contentType, contentKey]]; [[UIApplication sharedApplication] openURL:lineUrl]; } |
Unity側は普通にネイティブプラグインを呼び出してファイルのパスを渡すだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using UnityEngine; using System.Collections; using System.Runtime.InteropServices; using System.IO; public class test : MonoBehaviour { static string filePath; [DllImport ("__Internal")] private static extern void _PostLine(string textureUrl); void Start () { } void Update () { } public void lineShareAction(){ saveImage (); _PostLine (filePath); } private void saveImage(){ var tex = Resources.Load("hackist_icon") as Texture2D; byte[] screenshot = tex.EncodeToPNG(); filePath = Application.persistentDataPath + "/image.png"; if (!System.IO.File.Exists (filePath)) { File.WriteAllBytes (filePath, screenshot); } } } |
AndroidでLineに送る
Androidの場合もっと簡単に送ることができ、直接URLスキームを作成して開くことで送ることが出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
string filePath; public void linwShareAction(){ saveImage (); var lineUrl = string.Format("line://msg/image/" + filePath); Application.OpenURL(lineUrl); } private void saveImage(){ var tex = Resources.Load("hackist_icon") as Texture2D; byte[] screenshot = tex.EncodeToPNG(); filePath = Application.persistentDataPath + "/hackist_icon.png"; if (!System.IO.File.Exists (filePath)) { File.WriteAllBytes (filePath, screenshot); } } |
ただしこれも前回のTwitterの時と同じようにApplication.persistentDataPathが動作しないためUnity4.6までとなっています。
終わりに
今回はLineに送る方法について書きました。LineはURLスキームで送るだけなので簡単ですが、iOS9からはURLスキームを作るときは設定が増えたり、Unity5だとAndroidで書き出すときにApplication.persistentDataPathが動かないため余計に工数が増えたりなど、まだすべてをUnityで作るには難しそうです。
今回までUnityの基礎的なあれこれということでいろいろ書いてきました。本当に基礎的なところしか書いてませんが、デモを作ったりするときは逆に書いたような内容くらいしか使いません。今まで一般的なプログラミングしかしてなかった人には、Unityはかなり変な動作をすると思いますが、それでも3Dコンテンツを作るにはかなり簡単に扱えると思うので、軽くでもいいので触ってみるといいと思います。
次からはまたぱらぱらとその時作ったものだったりハマったことなんかを書いていくと思います。多分いまだとiOS9についてになるような気もします。
では、また。