code ソーシャル

Unityアプリcodetips(46)

スポンサーリンク

//tips

//sceneの一部が透明になる理由

Unityのシーンの一部が透明になる要因の一つにcameraの描画設定がある。

カメラのClipping Planesという設定で、

Near : どれくらい近さまでを描画するか
Far : どれくらい遠くまで描画するか

https://docs.unity3d.com/ja/2018.4/Manual/class-Camera.html

を調整することができる。

ただ、描画範囲を拡大することは負荷も増えるので動作が重くなることに注意する必要がある。

また、障害物にめり込んでしまった場合は、シェーダー(描画方法)を書き換える必要がある。

描画方法の変更は下記参照。

https://teratail.com/questions/82707

【Unity入門】Shaderってなんだ?誰でもわかるシェーダー解説!

//経路探索

経路探索とは、スタート地点からゴール地点までの最適経路をコンピュータ計算で求めるもの。NAVITIMEなどのスマホアプリでも使用されている。

一般的には距離をコストとし、コストが最も少ない経路が選ばれる。

動的な経路検索の場合、障害物が動くため移動するたびに最適経路を計算する必要がある。このゴールまでの移動するルート群を移動回数でランキング化することで、最短のゴール経路と最短の移動回数がわかる。

この考え方でいくと、必要なことは、
1.現在地におけるゴールまでのルートを全てリスト化できること
2.全ルートでゴールまでの移動回数のランキングor最小値を求められること
3.移動回数最短のルートをリストから取り出せること
4.enemyに当たったものはリストから削除できること
などがある。

//List型の使い方

リストを作る際にList型を使用する。使用の際にはusing System.Collections.Generic;を一番最初に宣言する必要がある。

これにより下記のような種類のリストを作成できる。

private List<GameObject> myList = new List<GameObject>();//gameobject型のリスト
private List<int> intList = new List<int>(); //int型のリスト
private List<float> floatList = new List<float>(); //float型のリスト
List<string> playerItemList = new List<string>();//string型のリスト

Listを使用してカウントダウンを作成する。今回は数字なのでintを使用。myList.Add(i);でリストの要素を追加。

Listは要素を追加できる配列のようなもので、リストの順番も0から始まる。

例えば、下記のスクリプトが上から順に流れていったとすると、

List<int> intList = new List<int>();
intList.Add(1); // リストの中身は、intList = {1}
intList.Add(2); // リストの中身は、intList = {1,2}
intList.Add(3); // リストの中身は、intList = {1,2,3}
intList.RemoveAt(1); // リストの中身は、intList = {1,3}

//myList.Add(i); //int型 iをList末尾に加える
//myList.RemoveAt(0); //Listの0番目の要素を消す

このようになることがわかる。

Startで1から9が入ったリストを作成し、1秒を切ったら、Listの中身の大きい要素から順にtext表示へと変えていくと下記になる。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

public class countDown : MonoBehaviour
{

private List<int> myList = new List<int>(); //Listの宣言
private float timeleft; //時間測定のための変数
private int count; //カウント変数

void Start()
{
for (int i = 0; i < 10; i++)
{
myList.Add(i); //int型 iをmyList末尾に加える
}
}

void Update()
{
timeleft -= Time.deltaTime;
if (timeleft <= 0.0)
{
timeleft = 1.0f;
this.GetComponent<Text>().text = myList[9 - count].ToString(); //テキストの変更
count++;
}
}
}

樹形図を作るにしろリストでルートを記録していく道のりが見えない(手作業の方が早い)ので他のやり方も模索する。

NavMesh.CalculatePathをうまく使えないか検討中。

https://docs.unity3d.com/ja/current/ScriptReference/AI.NavMesh.CalculatePath.html

https://qiita.com/ta-ka/items/a023a11efe17ab097433

一旦下記コードも分析。

struct edge {
int from;
int to;
int cost;
};

int V, E, d[MAX_V];
edge es[MAX_E];

bool has_negative_loop(int s) {
fill(d, d + V, INF);
d[s] = 0;
for (int i = 0; i < V; i++) {
for (int j = 0; j < E; j++) {
edge e = es[j];
if (d[e.to] > d[e.from] + e.cost) {
d[e.to] = d[e.from] + e.cost;
if (i == V - 1) {
return true;
}
}
}
}
return false;
}

 

 

 

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-code, ソーシャル
-,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.