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

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

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

 

【ハルシオンブログ】3Dキャラの頭の上とかにUIとか出すじゃないですか。アレ 

こんにちは。坂内です。
さて、今週は木曜日~日曜日と東京ゲームショー2018が待っております。
弊社は金曜日に遊びにいっちゃおうかなぁーって感じです。
インディーコーナーは行くとして、他どこ見に行こうかなぁ~

さてUnityのネタですが。
「3Dのキャラの頭の上にHPバーを追従させる」方法について。

こんな感じね。




この玉は3Dです。(わかりにくいですね)
で、上のHPバーの代わりのImageはuGUIです。

やりかたは簡単。

【Plate.cs】
using UnityEngine;

public class Plate : MonoBehaviour {

[SerializeField]
Transform SphereTran;

RectTransform rectTrans;

private void Awake() {
rectTrans = GetComponent<RectTransform>();
}

void Update () {
Vector3 position = RectTransformUtility.WorldToScreenPoint(Camera.main, SphereTran.position);
position.y += 30f;
rectTrans.position = position;
}
}


このコードをHPバーの方につけてあげます。

RectTransformUtility.WorldToScreenPoint
ここで、3Dの座標をUIの座標に変えています。

これを使えばアクションゲームとか色々なところで使えますね!

と、簡単ですがこれにて!あでゅ~ノシ

スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】データ保存をJsonでやってみた。 

こんにちは。
大坂です。

秋らしくなってきたようなそうでもないような?
関東でまだ30度超える日がるみたいなので早く涼しくなってほしいですね。

今更ですがデータの保存をJsonにしてやってみたのでこんな感じだったよというお話。

まぁ簡単にこんな感じでゲームの情報を持ってるクラスを作って。
using System;

[Serializable]
public class GameData {

public int money;
public CharacterData charaData;

[Serializable]
public class CharacterData {
public int level;
public int hp;

public void Init() {
level = 1;
hp = 100;
}
}

public void Init() {
money = 500;
charaData = new CharacterData();
charaData.Init();
}
}


こんな感じでセーブとロードのクラスも作ってあげれば終わりです。
using System.IO;
using UnityEngine;

public class SaveTest : MonoBehaviour {

string filePath;
public GameData gameData;

private void Start() {
filePath = Application.persistentDataPath + "/SaveData.json";
Load();
}

public void Save() {
using(FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) {
using(StreamWriter sw = new StreamWriter(fs)) {
sw.WriteLine(JsonUtility.ToJson(gameData));
}
}
}

public void Load() {
if(!File.Exists(filePath)) {
gameData = new GameData();
gameData.Init();
return;
}

using(FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) {
using(StreamReader sr = new StreamReader(fs)) {
GameData data = JsonUtility.FromJson(sr.ReadToEnd());
gameData = data;
}
}
}
}


セーブしてあげると、指定したパスこんな感じの内容のファイルができてますね!



取り合ずこんな感じで簡単にできたよというお話でした。

あ、ついでにデータ消すときにわざわざ作った場所に行って消すのが面倒な場合は
こんなメソッド作って実行すればいいですね。
    public void Delete() {
if(File.Exists(filePath)) {
FileInfo fi = new FileInfo(filePath);
fi.Delete();
}
}


では今週もこんな感じで終わりです。
またノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】複数シーンをまとめて呼ぶ方法。1画面が複数シーンでつくられている場合、Additiveでシーンを呼びますよね。 

おはようございます。坂内っす。

複数のシーンをまとめて呼んだりします?
複数人での開発等で、「UI」「メイン画面」とかを別シーンとして作成した場合に、まとめて呼ぶ方法。



タイトルシーンからメインシーンを呼ぶ。
メインシーンはMainSceneとUISceneの2つのシーンからできている時の呼び方。

とりあえずこんなシーンを作成

【TitleScene】


【UIScene】


【MainScene】


そして、TitleSceneにはこんなコード。

【TitleScene.cs】
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class TitleScene : MonoBehaviour {

public void OnClickNextScene() {
StartCoroutine(TransitionMainScene());
}

private IEnumerator TransitionMainScene() {
var sceneNames = new List<string> {"MainScene", "UIScene"};

foreach(string sceneName in sceneNames) {
yield return SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
}

// Titleシーンをアンロード
SceneManager.UnloadSceneAsync("TitleScene");
}
}



タイトルのNEXTボタンを押したときに、OnClickNextSceneを呼んでます。
シーンの読み込みが全て終わるまで、今のシーンを消さないよう、コルーチンで動かしています。

これを動かすとこうなります。




ちゃんとやるならば、ボタンを押した時にマスクとかで画面を暗くしたり、ローディング画面とか挟んでやるといいですよね。

とりあえずこんな感じで、複数シーンをロードできます。

ってことで、今日はここまで!あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Unity2018で終了時のコールバック機能が増えたらしいよ 

こんにちは。
大坂です。

さて、今日も適当に書いていきますよ。
Unity2018で「Application.quitting」「Application.wantsToQuit」なんて言うコールバックが増えたらしいです。

Application.quittingは終了時に呼ばれるコールバックですね。
    void Start () {
Application.quitting += ApplicationQuit;
}

void ApplicationQuit() {
Debug.Log("終了だよ");
}


「Application.wantsToQuit」も終了時に呼ばれるコールバックで、
戻り値でFalseを返すと終了プロセスをキャンセルできるらしいです。
    void Start () {
Application.wantsToQuit += ApplicationWantsToQuit;
}

bool ApplicationWantsToQuit() {
Debug.Log("Falseでプロセスをキャンセル");
return false;
}

APIにありますけどIOSでは無理みたいです。
Application.wantsToQuit

こんなのが増えたらしいよってだけの話です!
何かに使えるかもしれないですね!

ではまたノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】Layoutを使ってリストを作成。スクロールもできるようにしてみよう!って昔からよく書いてるネタになってきた・・・・ 

こんにちは。坂内っす。

Unityでリストみたいな感じのを作る方法。
色々あると思うんですが、うちはこうやってますよーって紹介。



こんな感じのリストを作る時はこうやってます。

①リストのサイズを作成
空のGameObjectでリストのサイズを作成します。


②1行のサイズを作成


③1行の中身を作成


④itemを量産
③で作ったitemをCtrl+Dで量産します。


⑤縦に並べたいのでVertical Layout Group追加
itemが入っているGameObjectにVerticalLayoutGroupを追加し、ChildForceExpandのHeightのチェックを外す。





はい、これで完成。
あとは文字変えてください。

メニューとかで、この部分をスクロールできるようにしたい場合は、以下の様にやります。

⑥GameObjectにContentSizeFitterをつける
ContentSizeFitterをつけて、VerticalFitを「Preferred Size」に変更する。


⑦GameObjectの親を作る
⑥までのGameObjectの名前をcontentに変更しました。
その親にListという、空のGameObjectを用意


⑧Listオブジェクトにスクロール関連のコンポーネント追加
Listオブジェクトに「Scroll Rect」「Mask」「Image」をつけます。


ScrollRectのContentにcontentオブジェクトをアサインします。


はい、これで完成。

文字のリストを作成し、スクロールできるようになりました。

ということで、本日はUnityでリストを作る方法でした。

では、あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0