ゴイサギ日記

東京でエンジニアとして頑張って何とか生きてます。。ゆる~く更新していきます

【Unity】Shuriken Particle Part1 概要とメインモジュール

Unity の「Shuriken」パーティクルについてまとめてみました。
確認バージョンは 2017.3.0f3

パーティクルとは?

大量の粒子(Particle)に様々な動きを設定することによって雨や雪等の自然現象、魔法のエフェクトや爆発演出などを表現します。また、粒子の発生源とパラメータを設定する対象を「エミッター(Emitter:放出器)」と呼びます。

f:id:aki517:20200529232359g:plain

とにかく使ってみる

実際にパーティクルを出してみましょう!Unityを起動して上部メニューの GameObject > Effects > Particle System を選択すると Hierarchyビュー に「Particle System」のオブジェクトが生成されます。

f:id:aki517:20200529232603p:plain

メインモジュール

ここからはエミッターに設定する各モジュールを説明します。 Inspectorビューから設定します。数が多いので覚えるのが大変そうですが全て設定する必要はなく、目的に応じたモジュールだけ設定すれば良いです。 まずは基本設定となるメインモジュールの説明をします。

Duration

パーティクルを発生させる時間(秒)を設定します。

f:id:aki517:20200529232654g:plain

Looping

Durationで設定した時間経過後にパーティクルの発生を停止するか継続するかを設定します。

Rewarm

チェックを入れると1ループが完了したような状態から開始します。 有効にするにはLoopingにチェックを入れる必要があります。

f:id:aki517:20200529232758g:plain

Start Delay

パーティクルの発生開始の待ち時間(秒)を設定します。

Start Lifetime

パーティクルの生存時間(秒)を設定します。

Start Speed

パーティクルの初速を設定します。

3D Start Size

XYZ軸ごとにスケール値を設定したい場合にチェックを入れます。

Start Size

発生時のサイズを設定します。3D Start Size にチェックを入れた場合はXYZ軸ごとにサイズを設定出来ます。

3D Start Rotation

XYZ軸ごとに回転を設定したい場合にチェックを入れます。

Start Rotation

発生時の回転角度を設定します。3D Start Rotation にチェックを入れた場合はXYZ軸ごとに回転角を設定出来ます。

Randomize Rotation

Start Rotationで設定した角度と反対方向にパーティクルを回転させます。例えばStart Rotation を45°とした場合、-45°から開始になります。影響を受けるパーティクルの範囲は0.0〜1.0で設定出来ます。

f:id:aki517:20200529232834p:plain

Start Color

発生時のパーティクルの色を設定します。

f:id:aki517:20200529232900p:plain

Gravity Modifier

重力による影響を設定します。プラスだと下方向、マイナスだと上方向に重力が働きます。0だと無重力になります。

f:id:aki517:20200529232922g:plain

Simulation Space

パーティクルの実行空間を設定します。

パラメータ
説明
Local パーティクルは親オブジェクトと一緒に動きます。
World パーティクルはワールド空間を基準に動きます。親オブジェクトの動きに影響されません。
Custom 実行空間となるオブジェクトを指定することができます。あまり使わないと思います。。

下図はキューブを親オブジェクトとして左右に動かしたものになります。

f:id:aki517:20200529232951g:plain

Simulation Speed

パーティクルの実行速度を設定します。変更がなければ基本は1です。2倍速にしたい場合は2、半分の速度にしたい場合は0.5を設定します。

Delta Time

Time.timeScale による影響を受けるかどうかの設定をします。基本的には変更する必要はなく、ポーズメニュー中もパーティクルを動かしたい場合はUnscaledを設定します。


Scaling Mode

パーティクルのスケールの影響を設定します。

パラメータ
説明
Hierarchy 親オブジェクトのスケール値の影響を受けてパーティクルサイズと発生範囲が変わります。
Local 親オブジェクトのスケール値の影響は受けずこのパーティクルが設定されているオブジェクトのスケール値のみ影響します。
Shape パーティクル自体のスケールは変わらず、後述するShapeのスケールのみを変更させるパーティクルの発生範囲が変化します。

f:id:aki517:20200529233036g:plain

Play On Awake

チェックを入れるとパーティクルのオブジェクトが生成されると即パーティクルを放出します。スクリプト側で放出させるタイミングを制御したい場合はチェックを外します。

Emitter Velocity

後述の Inherit Velocity と Emission で使用するベクトル計算方法を選択します。RigidbodyかTransformの動きを元に速度を計算します。

Max Particles

画面内に一度に発生できるパーティクル数を設定します。この値を超えた場合、古いパーティクルから表示されなくなります。この値は大きな値を設定すると負荷が掛かるのでデザイナーさんはエンジニアと相談してここの上限値をしっかり決めておいた方が良いです(初期値も1000と大きいので・・)

Auto Random Speed

このチェックを入れると、再生するたびにパーティクルの動きが違う結果になります。チェックを外すと何度再生してもパーティクルの動きが同じ結果になります。

Stop Action

エミッターから放出されたパーティクルが全て消えた際にどういった処理をするかを設定します。また、この処理を有効にするには Looping のチェックを外す必要があります。

パラメータ
説明
None 何もしないです。
Disable パーティクルが設定されているGameObjectを非アクティブにします。画面に表示されませんがシーン内に存在しています。
Destroy パーティクルが設定されているGameObjectを削除します。Hierarchyビューにも残らないです。
Callback OnParticleSystemStoppedを呼び出します。

さくらVPSにGitLabをインストール

環境

さくらVPS:メモリ1GB, HDD100GB
OS:CentOS release 6.9 (Final)
GitLab:Community Edition 9.1.0

1. パッケージインストール

$ sudo yum install curl openssh-server openssh-clients postfix cronie

2. postfix起動

$ sudo service postfix start

エラーが出たので sudo postfix check で原因を調べる

$ sudo postfix check
$ postfix: fatal: parameter inet_interfaces: no local interface found for ::1

どこかで ipv6 の設定がされているのだろうと予想
/etc/hosts に ipv6の設定が残っていたのでコメントアウト

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
# ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# lokkitはiptablesを書き換えるので注意
# sudo lokkit -s http -s ssh

3. GitLabダウンロード

$ sudo curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

4. GitLabインストール

$ sudo yum install gitlab-ce
# /etc/gitlab/gitlab.rb の external_url 設定
$ external_url 'http://example.com:8787'

初期ポートが 8787 なので iptables 更新も忘れないように

$ sudo vim /etc/sysconfig/iptables
$ sudo /etc/init.d/iptables restart

設定を適用

$ gitlab-ctl reconfigure
# GitLab再起動
$ gitlab-ctl restart

指定したURLでブラウザからログイン
初期設定は以下になっているのでログインしてパスワードを変更する事
Username : root
Password : 5iveL!fe

5. その他

gitlab-ctlコマンド一覧

# サービス停止
$ gitlab-ctl stop
# 再起動
$ gitlab-ctl restart
# ヘルプ
$ gitlab-ctl help

さくらVPSにssh接続 Mac版

タイトルの通りです。

VPSの初期設定は以下を参考にしました。 tadasy.hateblo.jp

1. [vps]sshディレクトリ作成

$ mkdir /home/hoge/.ssh
$ chmod 700 /home/hoge/.ssh
$ ls -al /home/hoge

2. [mac]公開鍵を作成

最初に鍵の置き場所を聞かれるので以下のように任意のパスを指定 /Users/hoge/.ssh/id_rsa_sakura

$ ssh-keygen -C 'for_sakura'
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hoge/.ssh/id_rsa): /Users/hoge/.ssh/id_rsa_sakura
Created directory '/Users/hoge/.ssh'.
Enter passphrase (empty for no passphrase):(パスワード入力) 
Enter same passphrase again:(パスワード再入力)
----省略----

3. [mac]公開鍵をvpsに転送

# wwwXXXX.sakura.ne.jpにhogeユーザーで公開鍵を転送
$scp ~/.ssh/id_rsa_sakura.pub hoge@wwwXXXX.sakura.ne.jp:/home/hoge/.ssh

4. [vps]公開鍵を設定

$cd /home/hoge/.ssh
$cat id_rsa_sakura.pub >>  authorized_keys
$chmod 600 authorized_keys
$ls -al
合計 16
drwx------ 2 hoge hoge 4096  423 17:33 2017 .
drwx------ 3 hoge hoge 4096  423 17:33 2017 ..
-rw------- 1 hoge hoge  392  423 16:42 2017 authorized_keys
-rw-r--r-- 1 hoge hoge  392  423 16:41 2017 id_rsa_sakura.pub

5. [mac]ssh接続を設定

ターミナルから ssh sakura で接続できるようにします。

$cd /Users/hoge/.ssh
$vi config
----ここから----
# sakura VPS
Host sakura
  HostName        wwwXXXX.sakura.ne.jp
  IdentityFile    ~/.ssh/id_rsa_sakura
  User            hoge
----ここまで書く----

# 接続確認
$ssh sakura
Last login: Sun Apr 23 18:00:41 2017 from fdafefafea.ap.so-net.ne.jp

SAKURA Internet [Virtual Private Server SERVICE]

6. [vps]sshdの設定をする

#ssh接続でvpsに入る
$ssh sakura

# viでsshdの設定を以下のように変更
$sudo vi /etc/ssh/sshd_config

# ポート変更
Port 10022
# rootで直接ssh接続できないようにする
PermitRootLogin no
# パスワードなしでログイン禁止
PermitEmptyPasswords no
# 鍵認証許可
PubkeyAuthentication yes
# 鍵置き場
AuthorizedKeysFile .ssh/authorized_keys
# パスワード認証を無効化
PasswordAuthentication no

# sshd再起動
$sudo /etc/init.d/sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

更にポート番号を変更したのでmacssh設定を以下のように書き換えます。

$cd /Users/hoge/.ssh
$vi config

# sakura VPS
Host sakura
  HostName        wwwXXXX.sakura.ne.jp
  Port            10022 #ポート番号追加

※PermitRootLogin no
VPSコントロールパネルからは rootユーザーとパスワードで入れるが sshでは入れなくなる

※PasswordAuthentication no scpで転送したい時は yes に戻す必要があります。

※Port 10022
デフォルトポート番号 22 は攻撃され易いので セキュリティ面から 10021 〜 65535 で設定しておきます。

7. 最後に

これでさくらvpsMacからssh接続できるようになりました。 複数クライアントで接続したい場合は authorized_keys に 追加したいクライアントの公開鍵を追記すればOKです。 注意:上書きではなく追記です

【Python】備忘録

自分用メモ

リスト内包表記

リスト内包表記が便利なのか面倒なのか良く分からないので取りあえずメモ

コード

# if
list = [n for n in range( 10 ) if n % 2 == 0]
print u'\nif'
print list

# if-else
list = [i if (i % 2 == 0) else str(i) for i in range(10)]
print u'\nif-else'
print list

# loop:zip
print u'\nloop:zip'
list1 = [1,2,3]
list2 = [4,5,6]
for (a, b) in zip( list1, list2 ):
    print a,b

# loop:enumerate
print u'\nloop:enumerate'
list1 = ['a','b','c']
for (i, x) in enumerate( list1 ):
    print i,x

結果

if
[0, 2, 4, 6, 8]

if-else
[0, '1', 2, '3', 4, '5', 6, '7', 8, '9']

loop:zip
1 4
2 5
3 6

loop:enumerate
0 a
1 b
2 c

その他
リスト内包表記によるリスト作成はappendメソッドを呼ばないので
append呼び出しによるリスト作成に比べて実行速度が速い

list = [ i for i tmpList if is_valid_file( i ) ]

クラス

# HogeObjectクラス.
class HogeObject:

    def __init__(self):
        print('コンストラクタやで')
        self.num = 10

    def __del__(self):
        print('デストラクタやで')

    def func()
        print('numは{}やで' . format(self.num))
    
obj = HogeObject() # インスタンス生成.
obj.func() # 「numは10やで」表示.
del obj # インスタンス破棄.

空のクラスを定義する場合は pass を使う

class EmptyClass:
    pass

多値返却

関数の戻り値を複数にすることができる

status, data = hoge_func()
print status
print data
# False
# 15

def hoge_func():
    sum = 5 + 10
    return (True, sum);

辞書で返す事もできる、値が多くなってきたら便利そう

result = hoge_dict()
print result[ 'flag' ]
print result[ 'sum' ]
# True
# 15

def hoge_dict():
   sum = 5 + 10
   return {'flag':True, 'sum':sum }

*args,**kwargs について

関数の引数に指定したリストや辞書を分解して渡すことができる

def hoge_func( a = 0, b = 0, c = 1 )
    return a + b + c

args = [1, 2, 3]
kwargs = {'a':5, 'b':6, 'c':7}

print "none:", hoge_func()
print "*args:", hoge_func(*args)
print "**kwargs:", hoge_func(**kwargs)

# none:1
# *args:6
# **kwargs:18

その他

・tim.clock() はプロセッサのクロックタイムを返す、ベンチマークとかに使う