shopifyという凄いECプラットフォーム
こんにちは、のすけです。
ただの雑記なのですが、shopifyというECプラットフォームご存知でしょうか。
最近は、簡単に個人のショップを作れるサービスがいっぱいあって
例えば
・BASE
・STORES
とか便利で利用していました。
数クリックでWEBのECショップが簡単に作れて便利ですよね。
ただ、セール中のモーダルを出してみたりなど、ちょっとした複雑な機能を
追加したりなんかは難しくて
そうなってくると、他のECプラットフォームになってくるわけですが
たとえば
・WordPressにECプラグイン(WooCommerceとか)入れる
・ECcubeを使う
何かの選択肢が出てきたりします。
そんな中で、最近?2018年らしいけれど日本語にも対応したshopifyが中々凄いそう
利用間隔はBASEやSTORESのような感じでありながら
カスタマイズ性がWordPressやECcubeのような感じ。
つまり
サーバー不要で数クリックでショップを開けるけて
かつ細かいカスタマイズも色々できる!
APIもあって中々いじりがいがあるようです。
フロント部分はスクラッチで自前で作って、管理画面だけ利用するなんてこともできそうなので
期待が持てます。
海外性ということもあり、海外向けのEC作りたい場合にはかなり重宝しそうです。
ちょっと色々いじっていこうかなと
では!
【Unity道場5】衝突判定をせよ
問題1:衝突判定をせよ
キューブオブジェクトを上から落として、地面にぶつかった時にオブジェクトを削除してください。
回答例
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CollisionTest : MonoBehaviour { void OnCollisionEnter(Collision collision) { Destroy(gameObject); Debug.Log("当たったよ!"); } }
解説
OnCollisionEnterでイベントを検出して、オブジェクトを削除しています
実行結果
問題2:衝突先のオブジェクトを削除せよ
問題1を改良します。
キューブオブジェクトを上から落として、地面にぶつかった時に地面オブジェクトの方を削除してください。
回答例
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CollisionTest : MonoBehaviour { void OnCollisionEnter(Collision collision) { Debug.Log("当たったよ!" + collision.gameObject.name); Destroy(collision.gameObject); } }
解説
collision.gameObject
これで衝突先にgameObjectを取得できるので、それをDestroyします。
動作
地面に触れた瞬間に衝突して、地面が消えます
【Unity道場4】マウスクリックを検出せよ
問題:マウスクリックを検出せよ
ゲームオブジェクトのマウスクリックを検出してログを出力してください。
回答例
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class PrefabDestroyer : MonoBehaviour, IPointerClickHandler { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } public void OnPointerClick(PointerEventData pointerData) { Debug.Log(gameObject.name + " がクリックされました!"); } }
解説
マウスクリックを検出するためには、イベントシステムとカメラからのポインタークリックを検出します
そのために、まずはインスペクタービューでカメラにPhysics Raycasterを設定します
そして、クリックを検出したいオブジェクトにスクリプトをセットします。
using UnityEngine.EventSystems;
イベントシステムのライブラリの利用宣言。
public class PrefabDestroyer : MonoBehaviour, IPointerClickHandler
MonoBehaiviorの横に、IPointerClickHandlerを継承を記述します。
あとはOnPointerClick関数を定義して、クリックイベントを取得します。
public void OnPointerClick(PointerEventData pointerData) { Debug.Log(gameObject.name + " がクリックされました!"); }
【Unity道場3】ゲームオブジェクトを動的に生成せよ
こんにちは
Unityの書籍を何も考えずに言われるままにゲームを作っても
全く!!!覚えておらず
一向に手放しでゲームを作れるようになれる気がしないため始まった
Unity道場の3回目です。
問題1:ゲームオブジェクト動的に生成せよ
ゲームオブジェクト動的に生成するプログラムを書け。
動的生成するプレハブはInspectorビューから指定できるようにすること。
また出現位置をランダム化すること。
回答例
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PrefabCreater : MonoBehaviour { public GameObject prefab; void Start() { this.CreatePrefab(); } void Update() { } void CreatePrefab() { float x = Random.Range(-5.0f, 5.0f); float y = Random.Range(0.0f, 5.0f); float z = Random.Range(-5.0f, 5.0f); GameObject new_prefab = Instantiate( prefab, new Vector3(x, y, z), Quaternion.identity ); } }
解説
最初のこの部分で、まずUnityのUIから動的に生成したいPrefabを指定してあげます。
public GameObject prefab;
こう記述することで、Inspectorビューから事前に生成するプレハブを指定できます。
そして、適当な名前の動的生成用の関数(CreatePrefab)を作ります.
void CreatePrefab() { float x = Random.Range(-5.0f, 5.0f); float y = Random.Range(0.0f, 5.0f); float z = Random.Range(-5.0f, 5.0f); GameObject new_prefab = Instantiate( prefab, new Vector3(x, y, z), Quaternion.identity ); }
オブジェクトの動的な生成には、Instantiate関数を用います。
この関数は、プレハブからオブジェクトを生成する関数です。
Instantiate関数
- 第1引数:動的生成するプレハブを指定
- 第2引数:出現座標を指定(Vector3構造体)
- 第3引数:回転方向を指定(Quatenion構造体)
問題では、ランダムな座標を指定する必要があるため、float型の数値,x,y,xをRandom.Range関数を用いて生成しています。
Random.Range関数の引数は範囲を示しており、xは-5~5, yは0~5, zは-5~5の間で乱数が取得できるようにしてみました。
Instantiate関数の第3引数で指定しているQuaternion.identityは回転しないという意味になります。
問題2:動的生成したゲームオブジェクト削除せよ
問題1を拡張すること。
動的に生成したゲームオブジェクトが出現してから3秒後に削除するプログラムを書け。
回答例
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PrefabCreater : MonoBehaviour { public GameObject prefab; private GameObject new_prefab; // Start is called before the first frame update void Start() { this.CreatePrefab(); } // Update is called once per frame void Update() { } void CreatePrefab() { float x = Random.Range(-5.0f, 5.0f); float y = Random.Range(0.0f, 5.0f); float z = Random.Range(-5.0f, 5.0f); new_prefab = Instantiate( prefab, new Vector3(x, y, z), Quaternion.identity ); Invoke("DestroyPrefab", 3.0f); } void DestroyPrefab() { Destroy(new_prefab); } }
解説
消すためにはグローバル変数に動的生成したオブジェクトを置いておく必要があるので、以下を追加
private GameObject new_prefab;
消すための関数を適当な名前(DestroyPrefab)で作ります
void DestroyPrefab() { Destroy(new_prefab); } }
ゲームオブジェクト削除には、Destory関数を用います。
また、3秒後に消すために、メソッドを遅延実行させるInvoke関数を動的生成後に呼び出します。
Invoke("DestroyPrefab", 3.0f);
【Unity道場2】ゲームオブジェクトを表示、非表示
ゲームオブジェクトを表示、非表示をやります
【Unity道場1】座標を移動させる方法:問題文つき (Transformコンポーネント)
Unityの書籍を使っていくつかゲームを作った後に気付きました。
何も身についてねぇーーー!
本見ないと何にもできねxあーーー!
ということで、基本に立ち返って、ゲームを作る前にGameObjctの操作方法を
まず、1つ目!! Transformコンポーネント
問題1:ゲームオブジェクトのx座標を一定毎に増やせ
ゲームオブジェクトのx座標を一定毎に増やせ
解答例
using UnityEngine; public class Test : MonoBehaviour { Transform t; void Start() { t = this.gameObject.GetComponent<Transform>(); } // Update is called once per frame void Update() { Vector3 pos = t.position; pos.x += 0.1f; t.position = pos; } }
まず、取得したいゲームオブジェクトにこのTestスクリプトがAdd Componentされている前提です。
t = this.gameObject.GetComponent<Transform>();
この部分は、正確に書いたバージョンで、よく他の説明ページではより簡易的に
t = this.transform;
とか,さらにthisすら省略して
t = transform;
と書いている場合もありますが、こちらでもOK。だた、より内部構造を意識してプログラミングするなら前者の方がいいかと思います。
後、Update部の部分ですが
t.position.x += 0.1f
でもいいんじゃ。と思いがちですが、これだと動きません。
一度Vector3に入れて上げて、座標を修正し、元に戻すというような手順が必要
Vector3 pos = t.position; pos.x += 0.1f; t.position = pos;
問題2:ゲームオブジェクトのx座標を軸に回転させよ
ゲームオブジェクトのx座標を軸に回転させよ
解答例
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test2 : MonoBehaviour { Transform v; void Start() { v = this.gameObject.GetComponent<Transform>(); } // Update is called once per frame void Update() { Quaternion rot = v.rotation; rot.x += 0.01f; v.rotation = rot; } }
問題1との違いはVector3かQuaternionかの違いです。
あとはあんまり変わりません。
ちなみに、Quaternioは180が最大値なのでこのプログラムだと180まで行くと回転がとまります。
問題3:ゲームオブジェクトのx座標成分に大きさを変えよ!
ゲームオブジェクトのx座標成分に大きさを変えよ!
解答例
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test3 : MonoBehaviour { Transform v; void Start() { v = this.gameObject.GetComponent<Transform>(); Debug.Log(v); } // Update is called once per frame void Update() { Vector3 s = v.localScale; s.x += 0.01f; v.localScale = s; } }