FC2ブログ
06 «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.» 08

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【ハルシオンブログ】最近またネタがないから、小ネタを2つ…1個は何回か書いたきがする! 

もう7月も終わりそうですね!
なんか今年はいつも以上に月の進みが早い気がします。坂内っす。

さて、本日はUnityでゲームを作る際のの小ネタでも書いていきますか。
あ、初心者さんのためのブログですので、中級者以上は見なくていいです。
え?元からみてない?ア、ハイ


●タップゲームや放置ゲームとかでオブジェクトをタップする際にちょっと工夫を
オブジェクトをタップした時に、何かアクションをさせようと、オブジェクトにボタンを付けたくなります。

ボタンとは。
タップ>離す

このアクションをされた時に、ボタンの押されたというイベントが発生します。

これだと、押した瞬間にアクションが起きない&スワイプでの回収等アクションが不可能という問題が起きてしまいます。
UIのボタンなどではボタンのままで良いかと思いますが、ゲームのアクション部分では次の方法を使うのがいいかもです。

【EventTrigger】



EventTriggerのPointerEnter。
これは、PC等のカーソルがある実機では「カーソルがオブジェクトに触れたら」という動作をするのですが、スマホ等の場合は「オブジェクトに指が触れたら」という動作をします。

そのため、オブジェクトを触れたした瞬間(スワイプで触れても)にアクションを実行できます。

コインをばらまいて、それをスワイプで回収。
それこそキノコをスワイプで回収。
色々とこれで作れますね!

あ、このネタ何回も書いた記憶がでてきたぞ・・・

●画面を揺らしてみよう!with Dotween

これは簡単ですね。

CameraをDotweenで揺らすだけ。

Camera.main.DOShakePosition(0.4f,1f);


DOShakePositionの1個目の引数が時間。
2個目の引数が揺れ幅。

Camera.mainの書き方は、Cameraの中でもTagに「MainCamera」が付いているもののみデフォルトで適用されてます。

やべえ、もうすぐに出てくるネタがない!

ってことで、今日はこの辺にしますが、何かリクエストあったらコメントくださいね!

ってことであでゅ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Unity2018にしてVS開いたらなんか怒られた 

こんにちは。
大坂です。

週末に台風が来そうですね。
土曜日出かける予定があるのでやめていただきたい。。

このまえUnity2018を入れたときの話。
適当にC#のコードを作って開いたら、プロジェクトにslnファイルができてなくてVS側で
slnファイルがないから読み込めないてきなポップアップが出てくる…。

うーんと思いながらUnityの方を見たら、
コンソールにこんなエラーも。最初のほうだけですが。。


ArgumentException: Value does not fall within the expected range.
SyntaxTree.VisualStudio.Unity.Bridge.CompilationUnit.LanguageOf


Unityの設定を見てもExternalScriptEditorはVS2017になってるしなぁと思いながら、
エラーをもとに色々調べて、VS更新したらええで的なのを見つけたので、
ここから最新版のVS取ってきて更新してあげたら直ったってだけの話です。
https://www.visualstudio.com/ru/vs/unity-tools/

なんか変なところでちょと嵌った感時だったのでメモです。
ではまたノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】DoTweenのSequenceにOnCompleteつけてやりたいんだけど、うまくいかなかったんよ。結果できました! 

こんにちは!くっそ暑い日が続いてますね!
部屋から出たら死にそうになります。坂内です。

さて、本日はDoTweenの話。
DoTweenSequenceって皆さんお使いになられてますか?

簡単に連続してTweenができる優れもの。

例えば、こんな感じにImageを並べて



こんな感じにコードを書けば。

DoTweenTest.cs】
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class DoTweenTest : MonoBehaviour {

public Image[] tiles;

private void Start() {
Sequence tileSeq = DOTween.Sequence();
tileSeq.Append(tiles[0].DOFade(0f, 2f));
tileSeq.Append(tiles[1].DOFade(0f, 2f));
tileSeq.Append(tiles[2].DOFade(0f, 2f));
tileSeq.Play();
}
}


こうなります。



DoTweenのTweenスタート時、Tween終了時に処理を加えることができます。

DoTweenTest.cs】
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class DoTweenTest : MonoBehaviour {

public Image[] tiles;

private void Start() {
Sequence tileSeq = DOTween.Sequence()
.OnStart(() => {
StartProc();
});
tileSeq.Append(tiles[0].DOFade(0f, 2f));
tileSeq.Append(tiles[1].DOFade(0f, 2f));
tileSeq.Append(tiles[2].DOFade(0f, 2f));
tileSeq.Play();
}

void StartProc() {
Debug.Log("はじまり");
}

void EndProc() {
Debug.Log("終わり");
}
}


OnStartはちゃんと入るのですが、OnCompleteを書こうとすると、エラーになって書けない…
書き方がいけないのかな?


ここじゃない?
ここ?


ここも違う?どこ?

ここも違う!!

こうなったら先生がゴロゴロしているツイッターにきいてやれ!

で、先生がいうには。


なんだって!?ヽ(゚Д゚;)ノ!!

【DoTweenTest.cs】
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class DoTweenTest : MonoBehaviour {

public Image[] tiles;

private void Start() {
Sequence tileSeq = DOTween.Sequence();
tileSeq.OnStart(() => StartProc());
tileSeq.Append(tiles[0].DOFade(0f, 2f));
tileSeq.Append(tiles[1].DOFade(0f, 2f));
tileSeq.Append(tiles[2].DOFade(0f, 2f));
tileSeq.OnComplete(() => EndProc());
tileSeq.Play();
}

void StartProc() {
Debug.Log("はじまり");
}

void EndProc() {
Debug.Log("終わり");
}
}


こんな書き方できるらしいっす。

さすが先生。

これで、シーケンス使ったDoTweenで、最初や最後に別関数を呼べますね!

それでは今日はこれくらいでお暇します。

あでゅ~ノシ

Category: 開発日記(Unity)

Tag: Unity  DoTween  Sequence  uGUI  ゲーム開発 
tb 0 : cm 0   

【ハルシオンブログ】uGUIのオブジェクトのフェードとかの話 

こんにちは。
大坂です。

今週も適当に...

オブジェクトのフェードとかやるときにDoTweenとかを使ってますが、他の方法も。
まぁ別に必要ないといえばないですが。

Unityでこんなのが用意されてますね。
CrossFadeAlpha
https://docs.unity3d.com/jp/current/ScriptReference/UI.Graphic.CrossFadeAlpha.html

まぁ書いてある通りの使い方ですね。
こんな感じで書くとフェードで透過していってくれます。
  public Image img;

void Start () {
img.CrossFadeAlpha(0, 1f, true);
}




リファレンスにも書いてありますが、CanvasRendereのアルファ値を変更していて、
Image自体のColorのアルファを変えているわけではないので少し注意が必要ですかね。
確かに実行後のImageのColorを見ても変わってませんね。


あとは、フェードで色を変えてくれる
CrossFadeColor
https://docs.unity3d.com/ja/current/ScriptReference/UI.Graphic.CrossFadeColor.html
もあります。
  public Image img;

void Start () {
img.CrossFadeColor(Color.gray, 1f, true, true);
}




使いどころがあるといいですね!
ではまたノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】ポケガ1のアプデが近々あるよ!着せ替えに水着が追加!!!あ、ほんとネタないのでそれくらいですorz 

おはようございま!坂内っす。
3連休ごっつ暑かったですね!熱中症で14人もなくなったとか・・・
まだまだ暑い日が続きます、みなさんお気をつけてくださいませ。

毎日が暑いので、近々ポケガ1に水着の着せ替え入れますね!
ちょっと初期の値段高いんだけど、イベントで水着の素材を集めればタダでもらえるってシステムいれてみた!
全部集めなくても素材を集めた分安くなるよ!
詳しくはホーム画面のインフォボタンを押してみて!
(近々アップデートするver3.50のお話です)


それと、魚津のゲームつくーるイベントにわたくし参加します。(たぶん)
https://www.uozugame.com/
あのモヒカン開発者(@pouhiroshi)と某魚津の開発者(@mkzk_develop)さんとなんか作ります。
お楽しみに!(作ったものが一般公開される日があるかわかりませんが)

そしてネタがなくて、なにもでないのでこれくらいで許してください。

それでは皆さん、暑さに負けないで頑張りましょう!

あでゅ~ノシ

Category: Androidアプリ紹介

tb 0 : cm 0   

【ハルシオンブログ】Startってvoidじゃなくてもいいんすね。 

こんにちは。
大坂です。

なんかよくわかりませんが体調崩しました。
皆さんも体調管理にはお気を付けを。

今週もタイトル通りの大した話ではないですが書いていきますよ。

UnityでC#スクリプトを作るとフォーマット変えてなければ大体こんな感じでStartとかがデフォルトで書いてありますね。
  // Use this for initialization
void Start () {

}

でまぁ、使うかどうかは別としてStartをコルーチンにしたりできるようですね。
  // Use this for initialization
IEnumerator Start () {

}

適当なゲームオブジェクトにつけてやるだけでちゃんとStartがコルーチンとして呼ばれます。
Startの処理で他のコルーチンを待ってから処理させたいとかあれば使えるかもしれませんね。

まぁコード書く手間がちょっと減るくらいなもんですが。。
  // Use this for initialization
void Start () {
StartCoroutine(Init());
}

private IEnumerator Init() {
yield return StartCoroutine(BlogTest());
Debug.Log("BlogTest");
}

private IEnumerator BlogTest() {
yield return new WaitForSeconds(3f);
}
こう書くか。

  // Use this for initialization
IEnumerator Start () {
yield return StartCoroutine(BlogTest());
Debug.Log("BlogTest");
}

private IEnumerator BlogTest() {
yield return new WaitForSeconds(3f);
}
こう書くかってくらいの差ですかね?

ちなみにAwakeとかUpdateはコルーチンにするとエラーが出ますよ。


こんなことができるよってだけの話ですが今週もこれにてノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】UnityCollabとCloudBuild試してみたった。意外と簡単ですね? 

おはようございます。坂内っす。
なんか朝方雷が鳴ってたような気がしましたが、夢だったのかなんなのか。

さて、今日の話題は「Collab」と「Cloud Build」の方法について。

以前から嘆いている「うちのMacMini古すぎて、XCode9にアップグレードできないよぉぉぉー!2018年7月からXCode9じゃないとAppStoreにアプリあげれないよおおお!」に対処すべく(新しいMac買うお金ないです)、「CloudBuildならいけるんでは!?」に思考がたどり着きました。

今までやったことのないCollabとCloudBuildに手を付けてみました。

【Unity Collab】
なんかUnity5辺りからある機能らしいっす。
イメージ的にはGitとかそういう感じ?
どこまで何ができるかは分からないけど、まぁプロジェクトを上げておくことができるぽいっす。

もちろんUnityのアカウントにプロジェクトが紐づけられていること前提。

①Collabボタンを押し、出てきたウィンドウの「Start Now!」を押してみる



Collabの準備ができると、青いマークが各ファイルや上のCollabのところにつきます。



②準備ができたらもう一度Collabボタンを押す
コメントを書いて、Publish Now!!



プロジェクトによってですが、はじめは長いです。

んで、これが100%になり、以下のようになったら終わり。


以上でUnityCollabにファイルをアップロードできました。

あとは、メンバー追加したり色々できるぽいですが、Collabはここまで。

【Cloud Build】
①ServiceタブのCloudBuildをONにします



ONにするとこんな画面になります。

ここで何ビルドをするのか選ぶことができます。
AndroidやIOS等。

今回はAndroidビルドなので、Keystoreの情報等を入力して、Next:Buildボタンを押すと、ビルドしてくれちゃうんです!


これがビルド中の画面


青文字でQueuedって書いてるところがステータスですね。
ビルドが失敗もしくは成功したときにはメールで知らせてくれます。

ビルドが失敗したときは、Logを見て手直ししての繰り返しになります。

今回はAndroidをやりましたが、IOSもできるのでこれでMacなくてもリリースできますね!

ってことで、ちょー簡単ですがCollabとCloudBuild触ってみました!
思ったより簡単に使えていいかなーってのが感想。

ちゃんと使うと違うのかもしれないけど、とりあえずクラウドビルドはこれでできましたよ!

それじゃ あでゅ~ノシ

Category: Androidアプリ紹介

tb 0 : cm 0   

【ハルシオンブログ】またコルーチンで嵌るの巻 オブジェクト非表示でも動かなくなるんすね。 

こんにちは。
大坂です。

関東もまた雨が続くみたいですね。
ちょっと涼しくなるといいんですけど。

以前こんなことを書いてコルーチンで嵌ってましたが、
似たようなことをまたやったのでメモですよ。
【ハルシオンブログ】コルーチン使っててちょっと嵌ったのでメモ

前回はDestroyしたらコルーチンが動かなくなる―って話でしたが、
オブジェクトを非表示にしても動かなくなるって話。

こんなことをしてると途中で動かなくりますね。
public class BlogTest : MonoBehaviour {

public GameObject blogTest2;

void Start () {
StartCoroutine(blogTest2.GetComponent<BlogTest2>().Test());
Debug.Log("Test_3");
blogTest2.SetActive(false);
}
}

public class BlogTest2 : MonoBehaviour {

public IEnumerator Test() {
Debug.Log("Test_1");
yield return new WaitForSeconds(3f);
Debug.Log("Test_2");
}
}



Test_2のログが出てませんね。

対策も同じですが、コルーチンが終わるの待ってから非表示にしたらいいですね。
public class BlogTest : MonoBehaviour {

public GameObject blogTest2;

IEnumerator Start () {
yield return StartCoroutine(blogTest2.GetComponent<BlogTest2>().Test());
Debug.Log("Test_3");
blogTest2.SetActive(false);
}
}


変更点は太字赤のところですね。


これでTest_2のログも出ましたね。

今週もこれで終わり。
ではまたノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】シーン移動の際に、次のシーンが重いとき。ローディング画面的なのをかましたくなりますよね?そのやり方。 

こんにちは!坂内っす。
熱い!暑い!夏ですね!梅雨もあけました。
熱射病、日射病にお気をつけをば。

Unityでローディング画面とか作ってみましょう。
次のシーンに移動する際に、次シーンのロード(始めに色々ロードとかすると長いよね)が長くて、「タップしたのにシーン移動しないよー」って時に、簡単なロード画面を挟む方法。

①初期画面(StartSceneシーン)でボタンを押す
②シーン移動
③次画面(NextSceneシーン)で音楽データ(4曲)、画像データ(1枚)を読み込んでメモリにいれて、画面に表示する。

あ、そういえばソシャゲ「メギド72」の楽曲無料ダウンロードとかのイベントやってるんですね。
https://app.famitsu.com/20180702_1318019/

あ、メギドやったことないっすけどね。

ってことで、4曲遊びで落としてみたのを、読み込んでみます。



1ファイル1ファイルがでかいっすね。
あと1枚絵を置いてます。

コードはこんな感じ。
【StartScene.cs】(始めのシーンにつけてね)
using UnityEngine;
using UnityEngine.SceneManagement;

public class StartScene : MonoBehaviour {

public void OnClickNext() {
SceneManager.LoadScene("NextScene");
}
}


【NextScene.cs】(ボタン押した後に開かれるシーンにつけてね)
using UnityEngine;
using UnityEngine.UI;

public class NextScene : MonoBehaviour {

public AudioClip[] audios;
public Image imgTest;
public Sprite testSprite;

private void Start() {
imgTest.sprite = testSprite;
}
}



こんな感じで、曲をアサインしているだけ。



実際に動かすと、こうなります。

実際にどれくらいボタンを押してから次シーンが開くまで時間がかかるか試してみましょう。

PCなのでそれなりに早いですが、スマホだとクリックした後の反応がない。

こんな時はローディング画面を使うといいですよね。

まぁ、他のサイトが書いてるので2番煎じになりますが。

①ローディング画面をシーン移動の前のシーン(StartScene)につけます。
ローディング画面にはプログレス用のSliderを付けてます。
また、ローディング画面ははじめActiveを外しておきます。


②StartScene.csをいじります。
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class StartScene : MonoBehaviour {
private AsyncOperation async;
public GameObject loadingSetPref;
public Slider gage;

public void OnClickNext() {
loadingSetPref.SetActive(true);
StartCoroutine(LoadScene());
}

IEnumerator LoadScene() {
yield return new WaitForSeconds(0.1f);
async = SceneManager.LoadSceneAsync("NextScene");
async.allowSceneActivation = false;

while(async.progress < 0.9f) {
gage.value = async.progress;
yield return null;
}
gage.value = 1f;
yield return new WaitForSeconds(1f);
async.allowSceneActivation = true;
}
}



こんな感じでやれば、ローディング画面ができます。

では実際に実行してみよう。

なんかあんまりロード長くないからかもだけど、一応それぽくなりました?
実機だとちゃんとローディング画面として機能してますよ!



ってことで、簡単にですが、ローディング画面の作り方でした!

ではあでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0