コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

初心者だからデザインを学ぶことにした 6th

6回目です

僕はあと何回やれば初心者とかいうのを外していいんですかね…?まあ、それで食っていけなきゃ素人だし永遠と初心者を名乗らざる得ないんだろうな。まあいいや。某デザイン学習サイトのネタを終えたのでその話をしていきます。


前回記事
inujini.hatenablog.com


新たに色々と更新

そんなわけで久しぶりにデザインネタができました。

■ アイコンをつくった
・鉛筆アイコン編
今回はペンアイコンの作成です。ピクトグラム的なアイコンは四角や三角などのシンプルな図形の組み合わせで作れますってことだそうです。


f:id:andron:20191012092322p:plain
Inkscapeの場合は、回転と拡大・縮小がこんな感じになっているのでショートカットキーを忘れているとなかなか直感的に動かせない(1敗)。


f:id:andron:20191012092330p:plain
パーツを組み合わせて完成です。そんなこんなでこんなんできます。


・通知アイコン編
同じように図形を組み合わせていきます。イラレと違ってパーツの組み合わせが難しいので以下機能をつかって削ったりつけ足したりしながらアイコンを作っていきます。

f:id:andron:20191012094441p:plainf:id:andron:20191012094558p:plain
んで、できました。元ネタよりも大分丸っこいんですけど個人的にはこれでもありなんじゃねということでこれで。デザインって正解ないからね……。


■ バナーをつくった

f:id:andron:20191012121050p:plain
色々なサイズのバナーをつくろうってお題だったのでつくってみた。実践的やな(?)。納得いかない点もあるけどいじってると無限に時間が溶けるしでこれで。

このレッスンと関係ないけども、その昔僕が聞いた情報だとロゴ周りは絶対にいじって*1はいけないって聞いたことあるんですよね。そういうのをやるとクレームとかになるから。だから背景色で被ったりしたら良い感じの素材写真とかを工夫しないと云々みたいなことを聞いたことがある。まあ、真相は僕知らないです。



■ LP制作

某レッスン、これ実際にページまで作る感じなのかカンプで完成なのかよくわからない。とりあえずFigmaで「無農薬野菜の配達サービス」のLPつくってみた。

Figma
これで共有されるはず……。どうすかね?

ちなみに元のレッスンはPhotoshopで作るそうです。




といった感じの内容でした。久しぶりにFigma使った。ところどころ利用しているツール違うから学びになってるのかと言われたら謎。まあデザインツールはあくまでツールだから……。


つづく

*1:色を変更したり、ドロップシャドウをつけたり

おくりびと(※タイトルと記事内容は一切関係ありません)

僕はこういうテキスト送りを作りたいんだよ!

僕はバーバルコミュニケーションとかいうやつが致命的に苦手で口で説明することが出来ないのだ。だから、まずはこれを見てほしい。
f:id:andron:20191011002817g:plain
そう、僕は海外のインディーズゲームとかでよくでてくるこのふにゃふにゃ動きながら文字送りをするアニメーションが作りたかったんだよ!んでAviUtilいじっててようやく作れたわけだ。やっとできた。そして夜になってた。んでですね。僕は鳥頭に定評があるので、ここに記事投稿をしないとどうやって作るのか忘れてしまうので備忘録を兼ねた投稿をしようと思う。

つくりかた

まずAviUtilを起動して[メディアオブジェクトの追加 -> フィルタ効果の追加 -> スクリプト制御]を選択します。
f:id:andron:20191011003433p:plain

んでスクリプトに以下の記述をします。

l = 2.5
r = 360*obj.time/2
obj.ox = obj.ox + math.sin(r*math.pi/180)*l
obj.oy = obj.oy - math.cos(r*math.pi/180)*l

んでテキストの[文字毎の個別オブジェクト]にチェックします。
f:id:andron:20191011004414p:plain

これで先ほどの文字送りができます。やったぜ!


おわり。


今日は勢いだけでブログ書いてしまった……。むしゃくしゃしてやった。反省はしていない。

おくりびと [DVD]

おくりびと [DVD]

びぎなーいずふぉーえばー

おわらせた

はい、おはようございます。そんなわけでポエム投稿兼Unityチュートリアル進捗報告用に使っていた連続エントリーをみなさまの熱い声援(?)のおかげでおわらせることができました。

以前の記事
inujini.hatenablog.com


それではお作法の確認を

今回はただの終了報告なのでポエムはなしです。なしだけど終わらせたので早速やっていきたいと思います。

22. クラス
前回どこまで進んでたか分かりませんが、クラスの使い方についてのお話からはじめていきます。

using UnityEngine;
using System.Collections;

public class SingleCharacterScript : MonoBehaviour
{
    public class Stuff
    {
        public int bullets;
        public int grenades;
        public int rockets;
        
        public Stuff(int bul, int gre, int roc)
        {
            bullets = bul;
            grenades = gre;
            rockets = roc;
        }
    }
       
    public Stuff myStuff = new Stuff(10, 7, 25);
    public float speed;
    public float turnSpeed;
    public Rigidbody bulletPrefab;
    public Transform firePosition;
    public float bulletSpeed;
    
    
    void Update ()
    {
        Movement();
        Shoot();
    }
       
    void Movement ()
    {
        float forwardMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime;
        float turnMovement = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime;
        
        transform.Translate(Vector3.forward * forwardMovement);
        transform.Rotate(Vector3.up * turnMovement);
    }
       
    void Shoot ()
    {
        if(Input.GetButtonDown("Fire1") && myStuff.bullets > 0)
        {
            Rigidbody bulletInstance = Instantiate(bulletPrefab, firePosition.position, firePosition.rotation) as Rigidbody;
            bulletInstance.AddForce(firePosition.forward * bulletSpeed);
            myStuff.bullets--;
        }
    }
}




using UnityEngine;
using System.Collections;
public class Inventory : MonoBehaviour
{
    public class Stuff
    {
        public int bullets;
        public int grenades;
        public int rockets;
        public float fuel;
        
        public Stuff(int bul, int gre, int roc)
        {
            bullets = bul;
            grenades = gre;
            rockets = roc;
        }
        
        public Stuff(int bul, float fu)
        {
            bullets = bul;
            fuel = fu;
        }
        
        public Stuff ()
        {
            bullets = 1;
            grenades = 1;
            rockets = 1;
        }
    }
    
    // Stuffクラスより
    public Stuff myStuff = new Stuff(50, 5, 5);
    public Stuff myOtherStuff = new Stuff(50, 1.5f);
    void Start()
    {
        Debug.Log(myStuff.bullets); 
    }
}




using UnityEngine;
using System.Collections;

public class MovementControls : MonoBehaviour
{
    public float speed;
    public float turnSpeed;
        
    void Update ()
    {
        Movement();
    }

    void Movement ()
    {
        float forwardMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime;
        float turnMovement = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime;
        
        transform.Translate(Vector3.forward * forwardMovement);
        transform.Rotate(Vector3.up * turnMovement);
    }
}




using UnityEngine;
using System.Collections;

public class Shooting : MonoBehaviour
{
    public Rigidbody bulletPrefab;
    public Transform firePosition;
    public float bulletSpeed;   
    private Inventory inventory;
       
    void Awake ()
    {
        inventory = GetComponent<Inventory>();
    }
       
    void Update ()
    {
        Shoot();
    }
   
    void Shoot ()
    {
        if(Input.GetButtonDown("Fire1") && inventory.myStuff.bullets > 0)
        {
            Rigidbody bulletInstance = Instantiate(bulletPrefab, firePosition.position, firePosition.rotation) as Rigidbody;
            bulletInstance.AddForce(firePosition.forward * bulletSpeed);
            inventory.myStuff.bullets--;
        }
    }
}


雑にクラス図をつくってみる。多分こんな感じ、つながりがない……。Unity特有のStart()とかRigidbodyとかそういうのを加えた方がいいのだろうか……。それをやるとごちゃごちゃしてきて何をしたい設計なのか分からなくなる気がする……。まあ、大規模なもの作ったことないからいらぬ心配なんですけどね(笑)。


23. Instantiate

オブジェクトの生成とかにかかわるInstantiateな話。

using UnityEngine;
using System.Collections;
public class UsingInstantiate : MonoBehaviour
{
    public Rigidbody rocketPrefab;
    public Transform barrelEnd;
    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Rigidbody rocketInstance;
            // オブジェクトの生成
            rocketInstance = Instantiate(rocketPrefab, barrelEnd.position, barrelEnd.rotation) as Rigidbody;
            rocketInstance.AddForce(barrelEnd.forward * 5000);
        }
    }
}
using UnityEngine;
using System.Collections;

public class RocketDestruction : MonoBehaviour
{
    void Start()
    {
        // オブジェクトの破壊
        Destroy(gameObject, 1.5f);
    }
}

―と、おまけのデストロイ。


24. Array

なんで後半で配列の話なんだろう。

using UnityEngine;
using System.Collections;

public class Arrays : MonoBehaviour
{
    public GameObject[] players;
    void Start ()
    {
        players = GameObject.FindGameObjectsWithTag("Player");
        for(int i = 0; i < players.Length; i++)
        {
            Debug.Log("Player Number "+i+" is named "+players[i].name);
        }
    }
}

複雑なことをやろうとすると事故るやつだけど、この例だと特に話すことは多分ないです。


25. Invoke
僕の中ではJavaScriptsetTimeoutみたいな認識のやつ。個人的にInvokeって単語はPowerShellの方でよく見かける。あっちはこういう機能なかった気がするけど……。

using UnityEngine;
using System.Collections;
public class InvokeScript : MonoBehaviour
{
    public GameObject target;
    void Start()
    {
        // SpawnObject()
        Invoke("SpawnObject", 2);
    }
    void SpawnObject()
    {
        Instantiate(target, new Vector3(0, 2, 0), Quaternion.identity);
    }
}
using UnityEngine;
using System.Collections;

public class InvokeRepeating : MonoBehaviour
{
    public GameObject target;
    void Start()
    {
        // SpawnObject()
        InvokeRepeating("SpawnObject", 2, 1);
    }

    void SpawnObject()
    {
        float x = Random.Range(-2.0f, 2.0f);
        float z = Random.Range(-2.0f, 2.0f);
        Instantiate(target, new Vector3(x, 2, z), Quaternion.identity);
    }
}

とりあえず該当部分にコメントを入れてはみたものの語ることがない。細かい仕様はリファレンス見ておけばいいような気がする。
MonoBehaviour-Invoke - Unity スクリプトリファレンス
MonoBehaviour-InvokeRepeating - Unity スクリプトリファレンス



26. Enumerations

僕の中ではIDEに任意の文字列を紐づけて補間させるためのタグみたいな認識。次に出てくるSwitch文と併用して使用すると良い感じに使えるって思ってる。IDE使わなければ不要な存在なのでとも思ってたりする……、補間しないし。

using UnityEngine;
using System.Collections;

public class EnumScript : MonoBehaviour 
{
    enum Direction {North, East, South, West};
        void Start () 
    {
        Direction myDirection;
        
        myDirection = Direction.North;
    }   
    Direction ReverseDirection (Direction dir)
    {
        if(dir == Direction.North)
            dir = Direction.South;
        else if(dir == Direction.South)
            dir = Direction.North;
        else if(dir == Direction.East)
            dir = Direction.West;
        else if(dir == Direction.West)
            dir = Direction.East;       
        return dir;     
    }
}


27. Switch Statements

なぜか最後はSwitch文。僕の中ではラベル付きif文。

using UnityEngine;
using System.Collections;

public class ConversationScript : MonoBehaviour 
{
    public int intelligence = 5;
    void Greet()
    {
        switch (intelligence)
        {
        case 5:
            print ("Why hello there good sir! Let me teach you about Trigonometry!");
            break;
        case 4:
            print ("Hello and good day!");
            break;
        case 3:
            print ("Whadya want?");
            break;
        case 2:
            print ("Grog SMASH!");
            break;
        case 1:
            print ("Ulg, glib, Pblblblblb");
            break;
        default:
            print ("Incorrect intelligence level.");
            break;
        }
    }
}

例文のintelligence分岐、文章内容酷すぎるんだけど元ネタあったりするんですかね?

てことで終了です。
f:id:andron:20191009211434p:plain


今回はポエムはなしのでこれで終了です。おそまつさまでした!