Squashed 'popcorn/Assets/USAYAUnityLib/' content from commit 6e43be2d

git-subtree-dir: popcorn/Assets/USAYAUnityLib
git-subtree-split: 6e43be2dcf989af48263279c749e9799fb6c8c9d
This commit is contained in:
水谷圭吾 2021-06-15 15:21:39 +09:00
commit 8fe090a3af
431 changed files with 21098 additions and 0 deletions

9
AnimationValidator.meta Executable file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 5ef5cb85bff006b48b311c18b5b66ec9
folderAsset: yes
timeCreated: 1524593791
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

10
AnimationValidator/Editor.meta Executable file
View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 9117919f6e527984394914b0933e1c09
folderAsset: yes
timeCreated: 1524310466
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,279 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;
namespace StaTech.AnimationValidator {
public static class AnimationValidator {
private static Animator _animator;
private static readonly string[] CurveNames = {
"m_PositionCurves",
"m_ScaleCurves",
"m_FloatCurves",
"m_PPtrCurves",
"m_EditorCurves",
"m_EulerEditorCurves"
};
private static readonly string PathPropName = "path";
private static readonly string AttributePropName = "attribute";
private static List<ClipValidationContainer> _clipValidations;
public static List<ClipValidationContainer> ValidateAnimation(){
if(Selection.activeGameObject == null){
return null;
}
var selectedTransform = Selection.activeGameObject.transform;
// アニメーションクリップを取り出すAnimator
_animator = selectedTransform.GetComponent<Animator>();
if(_animator == null){
// 警告window出す
EditorUtility.DisplayDialog("エラー", "選択したオブジェクトにAnimatorがついていません", "閉じる");
return null;
}
var runTimeAnimatorController = _animator.runtimeAnimatorController;
var animationController = runTimeAnimatorController as AnimatorController;
if(animationController == null){
// 警告window出す
EditorUtility.DisplayDialog("エラー", "AnimatorにAnimationControllerが設定されていません", "閉じる");
return null;
}
if(_clipValidations == null){
_clipValidations = new List<ClipValidationContainer>();
}else{
_clipValidations.Clear();
}
// 全てのレイヤーを取り出す
for(var i = 0; i < animationController.layers.Length; ++i){
var layer = animationController.layers[i];
var stateMachine = layer.stateMachine;
// 全てのステートを取り出す
for(var j = 0; j < stateMachine.states.Length; ++j){
var state = stateMachine.states[j];
var clip = state.state.motion as AnimationClip;
if(clip){
var validationData = FindLostAnimations(clip, selectedTransform);
_clipValidations.Add(validationData);
}
}
}
return _clipValidations;
}
public static void ExecuteUnitRecovery(GameObject selected, ClipValidationContainer container, Action<string, float> onProgressChanged){
var childObjectsNames = GetChildObjectNames(selected);
Recovery(container, ref childObjectsNames, onProgressChanged);
EditorUtility.ClearProgressBar();
}
public static void ExecuteAllRecovery(GameObject selected, List<ClipValidationContainer> containers, Action<string, float> onProgressChanged){
var childObjectsNames = GetChildObjectNames(selected);
var targetCount = containers.Count;
for(var i = 0; i < containers.Count; ++i){
var container = containers[i];
Recovery(container, ref childObjectsNames);
if(onProgressChanged != null){
onProgressChanged.Invoke(container.ClipName, (float)i / targetCount);
}
}
AssetDatabase.SaveAssets();
EditorUtility.ClearProgressBar();
}
private static ClipValidationContainer FindLostAnimations(AnimationClip clip, Transform root){
var lostAnimations = new List<LostProperty>();
var serializedClip = new SerializedObject(clip);
// clipはいくつかのカーブをもっている
foreach(var curveName in CurveNames){
var curves = serializedClip.FindProperty(curveName);
var curveCount = curves.arraySize;
for(var i = 0; i < curveCount; ++i){
var curve = curves.GetArrayElementAtIndex(i);
var pathProperty = curve.FindPropertyRelative(PathPropName);
var attributeProperty = curve.FindPropertyRelative(AttributePropName);
var attribute = attributeProperty != null ? attributeProperty.stringValue : "Position";
// ルートの直下からの相対パスが入ってる
var path = pathProperty.stringValue;
var result = root.Find(path);
if(result == null){
var lost = new LostProperty {
ObjectName = GetObjectName(path),
PropPath = path,
AttributeName = attribute,
SerializedProperty = pathProperty,
SerializedClip = serializedClip,
State = FixState.Lost
};
lostAnimations.Add(lost);
}
}
}
var clipLost = new ClipValidationContainer(lostAnimations, clip);
return clipLost;
}
private static void Recovery(ClipValidationContainer validationContainer, ref List<PathModel> paths, Action<string, float> onUnitProgressChanged = null){
for(var i = 0; i < validationContainer.LostProperties.Count; ++i){
var anim = validationContainer.LostProperties[i];
var pathInHierarchy = paths.Where(path => path.ObjectName == anim.ObjectName).ToList();
var hierarchyCount = pathInHierarchy.Count;
if(onUnitProgressChanged != null){
onUnitProgressChanged.Invoke(anim.ObjectName, (float)i / validationContainer.LostProperties.Count);
}
if(hierarchyCount == 0){
//同名のobjectNameが存在しない
anim.State = FixState.ErrorNoSameName;
continue;
}
if(hierarchyCount >= 2){
// 複数のobjectが存在するから修正出来ない
anim.State = FixState.ErrorDuplicate;
continue;
}
// 修復処理
var correctPath = pathInHierarchy.First().RelativePath;
Debug.Log(anim.PropPath + "を" + correctPath + "に修正");
anim.State = FixState.Fixed;
anim.SerializedProperty.stringValue = correctPath;
anim.SerializedClip.ApplyModifiedProperties();
}
}
public static string GetObjectName(string path){
if(string.IsNullOrEmpty(path)){
return "";
}
var separated = path.Split('/');
return separated[separated.Length - 1];
}
private static List<PathModel> GetChildObjectNames(GameObject root){
var children = GetAllObjects(root);
return children.Select(obj => {
// なんか進捗とか出す
return new PathModel(obj, root.name);
}).ToList();
}
public static List<GameObject> GetAllObjects(GameObject obj){
var allChildren = new List<GameObject>();
GetChildren(obj, ref allChildren);
return allChildren;
}
public static void GetChildren(GameObject obj, ref List<GameObject> allChildren){
var children = obj.GetComponentInChildren <Transform>();
// 子要素がいなければ終了
if(children.childCount == 0){
return;
}
foreach(Transform ob in children){
allChildren.Add(ob.gameObject);
GetChildren(ob.gameObject, ref allChildren);
}
}
public static string ParentRelativePath(Transform t, string path, string rootName){
var parent = t.parent;
if(parent == null){
if(t.name != rootName){
Debug.LogError("不正な階層指定してます" + rootName);
}
return path;
}
if(parent.name == rootName){
return path;
}
path = parent.name + "/" + path;
return ParentRelativePath(parent, path, rootName);
}
private class PathModel {
public readonly string ObjectName;
public readonly string RelativePath;
public PathModel(GameObject go, string rootName){
ObjectName = go.name;
RelativePath = ParentRelativePath(go.transform, ObjectName, rootName);
}
}
}
public class ClipValidationContainer{
public ClipValidationContainer(List<LostProperty> lostAnims, AnimationClip clip){
LostProperties = lostAnims;
ClipName = clip.name;
}
public string ClipName {
get;
set;
}
public bool HasNoError {
get{
return LostProperties.Count == 0 || LostProperties.All(p => p.State == FixState.Fixed);
}
}
public List<LostProperty> LostProperties {
get;
private set;
}
}
public class LostProperty {
public string AttributeName;
/// <summary>
/// オブジェクトの名前
/// 一意である必要がある
/// </summary>
public string ObjectName;
/// <summary>
/// アニメーション内のプロパティのパス
/// </summary>
public string PropPath;
public SerializedObject SerializedClip;
public SerializedProperty SerializedProperty;
/// <summary>
/// 修復済みフラグ
/// </summary>
public FixState State;
}
public enum FixState {
None,
Lost,
ErrorNoSameName,
ErrorDuplicate,
Fixed
}
}

View File

@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: d44c737829d86874d922d82403ef21c2
timeCreated: 1523983104
licenseType: Free
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,204 @@
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace StaTech.AnimationValidator {
public class AnimationValidatorView : EditorWindow {
private Texture2D _successIcon;
private Texture2D SuccessIcon {
get{
if(_successIcon == null){
_successIcon = GetBuiltInIcon("testpassed.png");
}
return _successIcon;
}
}
private Texture2D _errorIcon;
private Texture2D ErrorIcon {
get{
if(_errorIcon == null){
_errorIcon = GetBuiltInIcon("testfailed.png");
}
return _errorIcon;
}
}
private const float DetailSpace = 30f;
private const float RightPadding = 30f;
private static List <ClipValidationContainer> _clipValidations;
private static GameObject _selectedObject;
private static AnimationValidatorView _window;
private static Vector2 _scrollPos;
[MenuItem("GameObject/アニメーションクリップ修正", false, -1)]
public static void Open(){
_clipValidations = AnimationValidator.ValidateAnimation();
if(_clipValidations == null){
return;
}
_window = GetWindow <AnimationValidatorView>();
_window.titleContent = new GUIContent("anim修正");
_selectedObject = Selection.activeGameObject;
}
private void OnGUI(){
if(_clipValidations == null || _clipValidations.Count == 0){
GUILayout.Label("AnimationClipがありません");
return;
}
_scrollPos = EditorGUILayout.BeginScrollView(_scrollPos, true, true);
GUILayout.Label("=====================================");
GUILayout.Label("Animationでmissingになっているものを表示します");
GUILayout.Label("オブジェクトの名前が他と被っていなれば自動で修正します");
GUILayout.Label("=====================================");
if(_clipValidations.Count > 1){
foreach(var result in _clipValidations){
if(!result.HasNoError){
DrawButton("全部まとめて修正", () => {
AnimationValidator.ExecuteAllRecovery(_selectedObject, _clipValidations, ShowProgress);
_window.Repaint();
EditorApplication.RepaintAnimationWindow();
});
break;
}
}
}
foreach(var result in _clipValidations){
DrawResult(result);
}
DrawButton("閉じる", () => _window.Close());
EditorGUILayout.EndScrollView();
}
private void DrawResult(ClipValidationContainer result){
if(result.HasNoError){
using(new EditorGUILayout.VerticalScope("box", GUILayout.Width(position.width - RightPadding))){
DrawOnSuccess(result);
}
}else{
using(new EditorGUILayout.VerticalScope("box", GUILayout.Width(position.width - RightPadding))){
DrawOnError(result);
}
}
}
private void DrawOnSuccess(ClipValidationContainer result){
DrawIconAndLabel(SuccessIcon, result.ClipName, "→正常です");
DrawDetail(result.LostProperties);
}
private void DrawOnError(ClipValidationContainer result){
DrawIconAndLabel(ErrorIcon, result.ClipName);
DrawDetail(result.LostProperties);
DrawButton("自動修正", () => {
AnimationValidator.ExecuteUnitRecovery(_selectedObject, result, ShowProgress);
_window.Repaint();
EditorApplication.RepaintAnimationWindow();
});
}
private void ShowProgress(string content, float progress){
EditorUtility.DisplayProgressBar("実行中", content, progress);
}
private void DrawDetail(List <LostProperty> Props){
using(new GUILayout.VerticalScope()){
foreach(var prop in Props){
var icon = prop.State == FixState.Fixed ? SuccessIcon : ErrorIcon;
DrawSpaceAndText(DetailSpace, prop.PropPath + " : " + prop.AttributeName, icon, prop.State);
}
}
}
private void DrawIconAndLabel(Texture image, string content, string detail = ""){
using(new GUILayout.HorizontalScope()){
GUILayout.Label(image, GUILayout.Height(18f), GUILayout.Width(20f));
GUILayout.Label(content);
if(!string.IsNullOrEmpty(detail)){
GUIStyle s = new GUIStyle(EditorStyles.label){
normal = { textColor = Color.green }
};
GUILayout.Label(detail, s);
GUILayout.FlexibleSpace();
}
}
}
private void DrawSpaceAndText(float space, string content, Texture headIcon, FixState state = FixState.None){
using(new GUILayout.HorizontalScope()){
GUILayout.Space(space);
if(headIcon){
GUILayout.Label(headIcon, GUILayout.Height(18f), GUILayout.Width(20f));
}
GUILayout.Label(content);
var detail = GetDetail(state);
if(!string.IsNullOrEmpty(detail)){
// 黄色文字で足す
var color = GetColor(state);
if(color != Color.white){
GUIStyle s = new GUIStyle(EditorStyles.label){
normal = { textColor = color }
};
GUILayout.Label(detail, s);
GUILayout.FlexibleSpace();
}
}
}
}
private static Color GetColor(FixState state){
switch(state){
case FixState.ErrorDuplicate:
case FixState.ErrorNoSameName:
return Color.yellow;
case FixState.Fixed:
return Color.green;
default:
return Color.white;
}
}
private static string GetDetail(FixState state){
switch(state){
case FixState.ErrorDuplicate:
return "→同じ名前のオブジェクトが子階層上に複数あります";
case FixState.ErrorNoSameName:
return "→同じ名前のオブジェクトが見つかりませんでした";
case FixState.Lost:
return " ";
case FixState.Fixed:
return "→Animationのパスを変更しました";
default:
return "";
}
}
private void DrawButton(string buttonName, System.Action callback = null){
if(GUILayout.Button(buttonName, GUILayout.Width(200f))){
if(callback != null){
callback.Invoke();
}
}
}
private void OnDestroy(){
if(_clipValidations != null){
_clipValidations.Clear();
_clipValidations = null;
}
}
private static Texture2D GetBuiltInIcon(string name){
System.Reflection.MethodInfo mi = typeof(EditorGUIUtility).GetMethod("IconContent", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public, null, new System.Type[] { typeof(string) }, null);
if(mi == null){
mi = typeof(EditorGUIUtility).GetMethod("IconContent", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic, null, new System.Type[] { typeof(string) }, null);
}
return (Texture2D)((GUIContent) mi.Invoke(null, new object[] { name })).image;
}
}
}

View File

@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: f37417dd83a19b64ba497a3247d7d0b7
timeCreated: 1524310971
licenseType: Pro
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

9
Attributes.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 6507f0123e30443a3a79145e5f979d8d
folderAsset: yes
timeCreated: 1469076906
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Attributes/Editor.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 819b5f6b5a15345c8a3ce047055b1c02
folderAsset: yes
timeCreated: 1475126980
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,25 @@
using UnityEngine;
using UnityEditor;
[CustomPropertyDrawer(typeof(PrefabFieldAttribute))]
public class PrefabFieldDrawer : PropertyDrawer {
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){
if(property.objectReferenceValue != null){
var prefabAssetType = PrefabUtility.GetPrefabAssetType(property.objectReferenceValue);
switch(prefabAssetType){
case PrefabAssetType.Regular:
case PrefabAssetType.Model:
case PrefabAssetType.Variant:
break;
default:
// Prefab以外がアタッチされた場合アタッチを外す
property.objectReferenceValue = null;
break;
}
}
label.text += " (Prefab Only)";
EditorGUI.PropertyField(position, property, label);
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 0ff00e08698044c2db627525064d0472
timeCreated: 1475127005
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,15 @@
using UnityEngine;
using UnityEditor;
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
public class ReadOnlyDrawer : PropertyDrawer {
public override float GetPropertyHeight(SerializedProperty property, GUIContent label){
return EditorGUI.GetPropertyHeight(property, label, true);
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){
GUI.enabled = false;
EditorGUI.PropertyField(position, property, label, true);
GUI.enabled = true;
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 65b425c14c5094e27a20e2a2ee78db06
timeCreated: 1475126989
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,3 @@
using UnityEngine;
public class PrefabFieldAttribute : PropertyAttribute {}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 05d68fb980e084628ac781ed8182d48a
timeCreated: 1470027454
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,3 @@
using UnityEngine;
public class ReadOnlyAttribute : PropertyAttribute {}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c47b0faab6f8c405abdb31811ce5f733
timeCreated: 1469076924
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

8
CameraFilters.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b821feb572d0d4ddca587a8dbc61ba4e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1baf84e9b399949f98fce3fcf8577d42
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,79 @@
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Hidden/USAYALib/Outline/Blur" {
Properties {
_MainTex ("Main", 2D) = "white" {}
}
SubShader {
ZTest Always Cull Off ZWrite Off Blend Off
Fog { Mode off }
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 uv01 : TEXCOORD1;
float4 uv23 : TEXCOORD2;
float4 uv45 : TEXCOORD3;
float4 uv67 : TEXCOORD4;
float4 uv89 : TEXCOORD5;
};
sampler2D _MainTex;
float2 _Offsets;
v2f vert(appdata_img v){
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv.xy = v.texcoord.xy;
o.uv01 = v.texcoord.xyxy + _Offsets.xyxy * float4(1,1, -1,-1) * (1 / _ScreenParams.xyxy);
o.uv23 = v.texcoord.xyxy + _Offsets.xyxy * float4(2,2, -2,-2) * (1 / _ScreenParams.xyxy);
o.uv45 = v.texcoord.xyxy + _Offsets.xyxy * float4(3,3, -3,-3) * (1 / _ScreenParams.xyxy);
o.uv67 = v.texcoord.xyxy + _Offsets.xyxy * float4(4,4, -4,-4) * (1 / _ScreenParams.xyxy);
o.uv89 = v.texcoord.xyxy + _Offsets.xyxy * float4(5,5, -5,-5) * (1 / _ScreenParams.xyxy);
return o;
}
float4 frag(v2f i) : SV_Target {
float4 sum = float4(0, 0, 0, 0);
float w = 0;
float weights = 0;
const float G_WEIGHTS[9] = { 1.0, 0.8, 0.65, 0.5, 0.4, 0.2, 0.1, 0.05, 0.025 };
float4 sampleA = tex2D(_MainTex, i.uv.xy);
float4 sampleB = tex2D(_MainTex, i.uv01.xy);
float4 sampleC = tex2D(_MainTex, i.uv01.zw);
float4 sampleD = tex2D(_MainTex, i.uv23.xy);
float4 sampleE = tex2D(_MainTex, i.uv23.zw);
float4 sampleF = tex2D(_MainTex, i.uv45.xy);
float4 sampleG = tex2D(_MainTex, i.uv45.zw);
float4 sampleH = tex2D(_MainTex, i.uv67.xy);
float4 sampleI = tex2D(_MainTex, i.uv67.zw);
float4 sampleJ = tex2D(_MainTex, i.uv89.xy);
float4 sampleK = tex2D(_MainTex, i.uv89.zw);
w = G_WEIGHTS[0]; sum += sampleA * w; weights += w;
w = G_WEIGHTS[1]; sum += sampleB * w; weights += w;
w = G_WEIGHTS[1]; sum += sampleC * w; weights += w;
w = G_WEIGHTS[2]; sum += sampleD * w; weights += w;
w = G_WEIGHTS[2]; sum += sampleE * w; weights += w;
w = G_WEIGHTS[3]; sum += sampleF * w; weights += w;
w = G_WEIGHTS[3]; sum += sampleG * w; weights += w;
w = G_WEIGHTS[4]; sum += sampleH * w; weights += w;
w = G_WEIGHTS[4]; sum += sampleI * w; weights += w;
w = G_WEIGHTS[5]; sum += sampleJ * w; weights += w;
w = G_WEIGHTS[5]; sum += sampleK * w; weights += w;
sum /= weights + 1e-4f;
return sum;
}
ENDCG
}
}
Fallback Off
}

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: db183b7cc1b7049d4bc355d6958bbe9b
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,45 @@
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Hidden/USAYALib/Outline/FlatColor" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
}
SubShader {
Blend One One
Cull Off
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert(appdata v){
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
float4 frag(v2f i) : SV_TARGET {
return step(0.5, (tex2D(_MainTex, i.uv)).a);
}
ENDCG
}
}
FallBack Off
}

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 60851fe30c623421b8015141412be220
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,33 @@
Shader "Hidden/USAYALib/Outline/Halo" {
Properties {
_MainTex ("Main", 2D) = "black" {}
_GlowTex ("Glow Object", 2D) = "black" {}
_GlowColor ("Glow Color", Color) = (0, 1, 1, 1)
_CutOut ("Cut Out", Float) = 0.5
}
SubShader {
Blend SrcAlpha OneMinusSrcAlpha
Pass {
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex, _GlowTex;
float4 _GlowColor;
float _CutOut;
float4 frag(v2f_img i) : SV_Target {
float r = tex2D(_GlowTex, i.uv).r;
clip(-r);
float4 result = _GlowColor;
// result.a *= (r < 1.0 && tex2D(_MainTex, i.uv).r > _CutOut) ? 1.0 : 0.0;
result.a *= (1.0 - step(1.0, r)) * (1.0 - step(tex2D(_MainTex, i.uv).r, _CutOut));
return result;
}
ENDCG
}
}
}

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 22146d67b54ae4183a260c05b86f647f
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,76 @@
using UnityEngine;
using UnityEngine.Rendering;
[RequireComponent(typeof(Camera))]
public sealed class OutlineFilter : MonoBehaviour {
[SerializeField]
private Color color = Color.white;
[SerializeField, Range(0.1f, 10.0f)]
private float width = 1.0f;
[SerializeField, Range(0f, 1f)]
private float cutOut = 0f;
[SerializeField]
private LayerMask outlineLayer = default;
private Shader flatColorShader;
private Material haloMaterial;
private Material blurMaterial;
private Camera _camera;
private Camera renderTextureCamera;
private int idOffsets = 0;
private int idGlowTex = 0;
private int idGlowColor = 0;
private int idCutOut = 0;
void Awake(){
_camera = GetComponent<Camera>();
flatColorShader = Shader.Find("Hidden/USAYALib/Outline/FlatColor");
blurMaterial = Shader.Find("Hidden/USAYALib/Outline/Blur").CreateHiddenMaterial();
haloMaterial = Shader.Find("Hidden/USAYALib/Outline/Halo").CreateHiddenMaterial();
renderTextureCamera = new GameObject("OutlineRendererTextureCamera").AddComponent<Camera>();
renderTextureCamera.transform.parent = _camera.gameObject.transform;
renderTextureCamera.enabled = false;
idOffsets = Shader.PropertyToID("_Offsets");
idGlowTex = Shader.PropertyToID("_GlowTex");
idGlowColor = Shader.PropertyToID("_GlowColor");
idCutOut = Shader.PropertyToID("_CutOut");
}
void OnRenderImage(RenderTexture src, RenderTexture dst){
Graphics.Blit(src, dst); // prepare main back framebuffer
renderTextureCamera.CopyFrom(_camera);
renderTextureCamera.clearFlags = CameraClearFlags.Color;
renderTextureCamera.backgroundColor = Color.black; // r as mask, should be black here
var renderTexture1 = RenderTexture.GetTemporary(src.width, src.height, 16, RenderTextureFormat.R8);
renderTextureCamera.targetTexture = renderTexture1;
renderTextureCamera.cullingMask = outlineLayer;
renderTextureCamera.RenderWithShader(flatColorShader, "");
// blur pass
int shrink = 1; // shrink == 1 for best quality, try 2 or 4 for low quality but better performance
var renderTexture2 = RenderTexture.GetTemporary(Screen.width / shrink, Screen.height / shrink, 0);
var renderTexture3 = RenderTexture.GetTemporary(Screen.width / shrink, Screen.height / shrink, 0);
DoBlurPass(renderTexture1, renderTexture2, Vector2.up);
DoBlurPass(renderTexture2, renderTexture3, Vector2.right);
// copy the temporary RT to the final image
haloMaterial.SetTexture(idGlowTex, renderTexture1);
haloMaterial.SetColor(idGlowColor, color);
haloMaterial.SetFloat(idCutOut, cutOut);
Graphics.Blit(renderTexture3, dst, haloMaterial);
RenderTexture.ReleaseTemporary(renderTexture1);
RenderTexture.ReleaseTemporary(renderTexture2);
RenderTexture.ReleaseTemporary(renderTexture3);
}
private void DoBlurPass(RenderTexture input, RenderTexture output, Vector2 direction){
var blurPixelOffset = width * input.height / 1920.0f;
blurMaterial.SetVector(idOffsets, direction * blurPixelOffset);
Graphics.Blit(input, output, blurMaterial);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7023f26e2ff004e119537b8c822726e1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

8
DebugOption.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 13829856eb3944aeebcb498ec23022d3
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
DebugOption/Prefabs.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0bc2c9b816cc0431ea5ae4363cd040ac
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,193 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4621217213727453643
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1687065005769937004}
- component: {fileID: 7161669052425278145}
- component: {fileID: 5062447477614030396}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1687065005769937004
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4621217213727453643}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4063882079711355622}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -10, y: -10}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7161669052425278145
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4621217213727453643}
m_CullTransparentMesh: 0
--- !u!114 &5062447477614030396
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4621217213727453643}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
m_FontStyle: 0
m_BestFit: 1
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 0
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u6A5F\u80FD\u540D"
--- !u!1 &5850834825256791800
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4063882079711355622}
- component: {fileID: 1841557246581323496}
- component: {fileID: 1877055874433787818}
- component: {fileID: 502413859327355263}
m_Layer: 5
m_Name: Button
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4063882079711355622
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5850834825256791800}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1687065005769937004}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1841557246581323496
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5850834825256791800}
m_CullTransparentMesh: 0
--- !u!114 &1877055874433787818
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5850834825256791800}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
--- !u!114 &502413859327355263
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5850834825256791800}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 1877055874433787818}
m_OnClick:
m_PersistentCalls:
m_Calls: []

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f19992fe2069b4e16b2f83277fb189cb
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,801 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2541661407703704363
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2541661407703704362}
- component: {fileID: 2541661407703704364}
- component: {fileID: 2541661407703704365}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2541661407703704362
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661407703704363}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2541661408982824309}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2541661407703704364
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661407703704363}
m_CullTransparentMesh: 0
--- !u!114 &2541661407703704365
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661407703704363}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
m_FontStyle: 0
m_BestFit: 1
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u623B\u308B"
--- !u!1 &2541661408295226766
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2541661408295226753}
- component: {fileID: 2541661408295226755}
- component: {fileID: 2541661408295226752}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2541661408295226753
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408295226766}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2541661408536301877}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2541661408295226755
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408295226766}
m_CullTransparentMesh: 0
--- !u!114 &2541661408295226752
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408295226766}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
m_FontStyle: 0
m_BestFit: 1
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u5371\u967A"
--- !u!1 &2541661408357901930
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2541661408357901934}
- component: {fileID: 2541661408357901935}
- component: {fileID: 2541661408357901932}
- component: {fileID: 2541661408357901933}
m_Layer: 5
m_Name: Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2541661408357901934
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408357901930}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_Children:
- {fileID: 2541661408570683701}
- {fileID: 2541661409141469743}
- {fileID: 2541661408982824309}
- {fileID: 2541661408536301877}
- {fileID: 2541661409648867662}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!223 &2541661408357901935
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408357901930}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_AdditionalShaderChannelsFlag: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!114 &2541661408357901932
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408357901930}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 1
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 750, y: 1334}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 1
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
--- !u!114 &2541661408357901933
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408357901930}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!1 &2541661408536301873
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2541661408536301877}
- component: {fileID: 2541661408536301874}
- component: {fileID: 2541661408536301875}
- component: {fileID: 2541661408536301872}
m_Layer: 5
m_Name: ResetButton
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2541661408536301877
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408536301873}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 2541661408295226753}
m_Father: {fileID: 2541661408357901934}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 250, y: -500}
m_SizeDelta: {x: 100, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2541661408536301874
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408536301873}
m_CullTransparentMesh: 0
--- !u!114 &2541661408536301875
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408536301873}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 0.45882353, b: 0.5058824, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
--- !u!114 &2541661408536301872
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408536301873}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 2541661408536301875}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!1 &2541661408982824306
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2541661408982824309}
- component: {fileID: 2541661408982824311}
- component: {fileID: 2541661408982824308}
- component: {fileID: 2541661408982824310}
m_Layer: 5
m_Name: BackButton
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2541661408982824309
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408982824306}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 2541661407703704362}
m_Father: {fileID: 2541661408357901934}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -500}
m_SizeDelta: {x: 160, y: 90}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2541661408982824311
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408982824306}
m_CullTransparentMesh: 0
--- !u!114 &2541661408982824308
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408982824306}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
--- !u!114 &2541661408982824310
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661408982824306}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 2541661408982824308}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!1 &2541661409141469740
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2541661409141469743}
- component: {fileID: 2541661409141469742}
m_Layer: 5
m_Name: Buttons
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2541661409141469743
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661409141469740}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2541661408357901934}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -100, y: 400}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2541661409141469742
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661409141469740}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -2095666955, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 0
m_StartCorner: 0
m_StartAxis: 0
m_CellSize: {x: 100, y: 100}
m_Spacing: {x: 0, y: 0}
m_Constraint: 0
m_ConstraintCount: 2
--- !u!1 &2541661409648867663
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2541661409648867662}
- component: {fileID: 2541661409648867651}
- component: {fileID: 2541661409648867648}
- component: {fileID: 2541661409648867649}
m_Layer: 5
m_Name: CoverButton
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2541661409648867662
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661409648867663}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2541661408357901934}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 250, y: -500}
m_SizeDelta: {x: 100, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2541661409648867651
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661409648867663}
m_CullTransparentMesh: 0
--- !u!114 &2541661409648867648
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661409648867663}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19215688, g: 0.19215688, b: 0.19215688, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 316fe626d2dfa490ca675da5c1c648b4, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
--- !u!114 &2541661409648867649
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2541661409648867663}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 2541661409648867648}
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 2541661409648867663}
m_MethodName: SetActive
m_Mode: 6
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1001 &9095851792703994660
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 2541661408357901934}
m_Modifications:
- target: {fileID: 6737172384967821846, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_Name
value: StageInputField
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchoredPosition.x
value: -170
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 550
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_SizeDelta.x
value: 120
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_SizeDelta.y
value: 80
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384039791724, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_Text
value: "\u30B9\u30C6\u30FC\u30B8"
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 485257dfeb2144672bcc21b704b6ca0f, type: 3}
--- !u!224 &2541661408570683701 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
m_PrefabInstance: {fileID: 9095851792703994660}
m_PrefabAsset: {fileID: 0}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 32f8e8f0ced494daeb0f218e6be9d9db
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,291 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6737172384039791730
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6737172384039791725}
- component: {fileID: 6737172384039791727}
- component: {fileID: 6737172384039791724}
m_Layer: 5
m_Name: NameText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6737172384039791725
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384039791730}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 6737172384967821841}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 0}
m_Pivot: {x: 1, y: 0.5}
--- !u!222 &6737172384039791727
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384039791730}
m_CullTransparentMesh: 0
--- !u!114 &6737172384039791724
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384039791730}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 32
m_FontStyle: 0
m_BestFit: 1
m_MinSize: 10
m_MaxSize: 32
m_Alignment: 5
m_AlignByGeometry: 0
m_RichText: 0
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u540D\u524D"
--- !u!1 &6737172384848310723
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6737172384848310722}
- component: {fileID: 6737172384848310780}
- component: {fileID: 6737172384848310781}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6737172384848310722
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384848310723}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 6737172384967821841}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -0.5}
m_SizeDelta: {x: -20, y: -13}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &6737172384848310780
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384848310723}
m_CullTransparentMesh: 0
--- !u!114 &6737172384848310781
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384848310723}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 32
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 0
m_HorizontalOverflow: 1
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: 0
--- !u!1 &6737172384967821846
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6737172384967821841}
- component: {fileID: 6737172384967821843}
- component: {fileID: 6737172384967821840}
- component: {fileID: 6737172384967821842}
m_Layer: 5
m_Name: IntInputField
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6737172384967821841
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384967821846}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 6737172384039791725}
- {fileID: 6737172384848310722}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -170, y: 550}
m_SizeDelta: {x: 120, y: 80}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &6737172384967821843
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384967821846}
m_CullTransparentMesh: 0
--- !u!114 &6737172384967821840
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384967821846}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
--- !u!114 &6737172384967821842
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6737172384967821846}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 6737172384967821840}
m_TextComponent: {fileID: 6737172384848310781}
m_Placeholder: {fileID: 0}
m_ContentType: 2
m_InputType: 0
m_AsteriskChar: 42
m_KeyboardType: 4
m_LineType: 0
m_HideMobileInput: 0
m_CharacterValidation: 1
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
m_Calls: []
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_CustomCaretColor: 0
m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
m_Text: 0
m_CaretBlinkRate: 0.85
m_CaretWidth: 1
m_ReadOnly: 0

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 485257dfeb2144672bcc21b704b6ca0f
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,75 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1418391247242195742
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1418391247242195739}
- component: {fileID: 1418391247242195736}
m_Layer: 0
m_Name: MainCamera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1418391247242195739
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1418391247242195742}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!20 &1418391247242195736
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1418391247242195742}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.19215687, b: 0.19215687, a: 0}
m_projectionMatrixMode: 1
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_GateFitMode: 2
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 1
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 0
m_AllowMSAA: 0
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 0
m_StereoConvergence: 10
m_StereoSeparation: 0.022

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8dee1e67eb6fa45268e20133acc68259
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,161 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &6962151599299144406
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 6737172384848310781, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_Text
value:
objectReference: {fileID: 0}
- target: {fileID: 6737172384848310781, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_FontData.m_BestFit
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6737172384848310781, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_FontData.m_HorizontalOverflow
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_SizeDelta.x
value: 120
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_SizeDelta.y
value: 80
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchoredPosition.x
value: -170
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 550
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821841, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821842, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_Text
value:
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821842, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_LineType
value: 2
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821842, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_ContentType
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821842, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_KeyboardType
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821842, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_CharacterValidation
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6737172384967821846, guid: 485257dfeb2144672bcc21b704b6ca0f,
type: 3}
propertyPath: m_Name
value: StringInputField
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 485257dfeb2144672bcc21b704b6ca0f, type: 3}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 81de4ed12e3874110b42569fd8f3c162
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,306 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1907863346325523399
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8789217124120630612}
- component: {fileID: 8246534116929882156}
m_Layer: 5
m_Name: Toggle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8789217124120630612
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1907863346325523399}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 937410549135013519}
- {fileID: 4969098926396769855}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -170, y: 390}
m_SizeDelta: {x: 80, y: 80}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &8246534116929882156
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1907863346325523399}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 5530625025939557361}
toggleTransition: 1
graphic: {fileID: 9069741319519684883}
m_Group: {fileID: 0}
onValueChanged:
m_PersistentCalls:
m_Calls: []
m_IsOn: 1
--- !u!1 &4732693032646562594
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 937410549135013519}
- component: {fileID: 3161523647402802971}
- component: {fileID: 6855072136971505580}
m_Layer: 5
m_Name: NameText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &937410549135013519
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4732693032646562594}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8789217124120630612}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: -20, y: 0}
m_SizeDelta: {x: 100, y: 0}
m_Pivot: {x: 1, y: 0.5}
--- !u!222 &3161523647402802971
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4732693032646562594}
m_CullTransparentMesh: 0
--- !u!114 &6855072136971505580
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4732693032646562594}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 32
m_FontStyle: 0
m_BestFit: 1
m_MinSize: 10
m_MaxSize: 32
m_Alignment: 5
m_AlignByGeometry: 0
m_RichText: 0
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u540D\u524D"
--- !u!1 &7953774624198755404
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4969098926396769855}
- component: {fileID: 935700448316683054}
- component: {fileID: 5530625025939557361}
m_Layer: 5
m_Name: Background
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4969098926396769855
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7953774624198755404}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 3450878312509628740}
m_Father: {fileID: 8789217124120630612}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -20, y: -20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &935700448316683054
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7953774624198755404}
m_CullTransparentMesh: 0
--- !u!114 &5530625025939557361
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7953774624198755404}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
--- !u!1 &8621330901285670047
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3450878312509628740}
- component: {fileID: 8336172991856618550}
- component: {fileID: 9069741319519684883}
m_Layer: 5
m_Name: Checkmark
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3450878312509628740
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8621330901285670047}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 4969098926396769855}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -20, y: -20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8336172991856618550
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8621330901285670047}
m_CullTransparentMesh: 0
--- !u!114 &9069741319519684883
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8621330901285670047}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: bc0b42d29ba9f4568aa0b803c18574c5
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

9
Editor.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 9eeda945de99842c98da2bfc3b32d5c3
folderAsset: yes
timeCreated: 1464664292
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,148 @@
#if UNITY_EDITOR
using UnityEngine;
using System.IO;
using System.Xml;
using UnityEditor;
public static class BitmapFontGenerater
{
static string DEFAULT_SHADER = "Unlit/Transparent";
[MenuItem("Assets/Create/Bitmap Font")]
public static void GenerateBitmapFont()
{
Object[] textAssets = Selection.GetFiltered(typeof(TextAsset), SelectionMode.DeepAssets);
Object[] textures = Selection.GetFiltered(typeof(Texture2D), SelectionMode.DeepAssets);
if(textAssets.Length < 1)
{
Debug.LogError("BitmapFont Create Error -- XML File is not Selected. (XMLファイルを選択してください)");
return;
}
if(textures.Length < 1)
{
Debug.LogError("BitmapFont Create Error -- Texture File is not selected. (フォントテクスチャを選択してください)");
return;
}
Generate((TextAsset)textAssets[0] , (Texture2D)textures[0]);
}
static void Generate(TextAsset textAsset , Texture2D texture)
{
XmlDocument xml = new XmlDocument();
xml.LoadXml(textAsset.text);
XmlNode common = xml.GetElementsByTagName("common")[0];
XmlNodeList chars = xml.GetElementsByTagName("chars")[0].ChildNodes;
CharacterInfo[] charInfos = new CharacterInfo[chars.Count];
float textureW = float.Parse(GetValue(common , "scaleW"));
float textureH = float.Parse(GetValue(common , "scaleH"));
for (int i=0; i < chars.Count; i++)
{
XmlNode charNode = chars[i];
if(charNode.Attributes != null)
{
charInfos[i].index = int.Parse(GetValue(charNode, "id"));
Rect vertRect = new Rect();
vertRect.width = float.Parse(GetValue(charNode, "width"));
vertRect.height = -(float.Parse(GetValue(charNode, "height")));
vertRect.x = float.Parse(GetValue(charNode, "xoffset"));
vertRect.y = -(float.Parse(GetValue(charNode, "yoffset")));
float charX = float.Parse(GetValue(charNode, "x")) / textureW;
float charWidth = float.Parse(GetValue(charNode, "width")) / textureW;
float charHeight = float.Parse(GetValue(charNode, "height"));
float charY = (textureH - float.Parse(GetValue(charNode, "y")) - charHeight) / textureH;
charHeight = charHeight / textureH;
// UnFlipped.
charInfos[i].uvBottomLeft = new Vector2(charX, charY);
charInfos[i].uvBottomRight = new Vector2(charX + charWidth, charY);
charInfos[i].uvTopLeft = new Vector2(charX, charY + charHeight);
charInfos[i].uvTopRight = new Vector2(charX + charWidth, charY + charHeight);
charInfos[i].minX = (int)vertRect.xMin;
charInfos[i].maxX = (int)vertRect.xMax;
charInfos[i].minY = (int)vertRect.yMax;
charInfos[i].maxY = (int)vertRect.yMin;
charInfos[i].advance = int.Parse(GetValue(charNode, "xadvance"));
}
}
string rootPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(textAsset));
string exportPath = rootPath + "/" + Path.GetFileNameWithoutExtension(textAsset.name);
Material material = GenerateMaterial(exportPath, texture);
Font font = GenerateFont(exportPath, textAsset.name, material);
font.characterInfo = charInfos;
// Save m_LineSpacing.
XmlNode info = xml.GetElementsByTagName("info")[0];
SerializedObject serializedFont = new SerializedObject(font);
SerializedProperty serializedLineSpacing = serializedFont.FindProperty("m_LineSpacing");
serializedLineSpacing.floatValue = Mathf.Abs(float.Parse(GetValue(info, "size")));
serializedFont.ApplyModifiedProperties();
}
static Material GenerateMaterial(string materialPath , Texture2D texture)
{
Shader shader = Shader.Find(DEFAULT_SHADER);
Material material = LoadAsset<Material>(materialPath + ".mat", new Material(shader));
material.shader = shader;
material.mainTexture = texture;
SaveAsset(material, materialPath + ".mat");
return material;
}
static Font GenerateFont(string fontPath, string fontName, Material material)
{
Font font = LoadAsset<Font>(fontPath + ".fontsettings", new Font(fontName));
font.material = material;
SaveAsset(font, fontPath + ".fontsettings");
return font;
}
static string GetValue(XmlNode node, string name)
{
return node.Attributes.GetNamedItem(name).InnerText;
}
static void SaveAsset(Object obj, string path)
{
Object existingAsset = AssetDatabase.LoadMainAssetAtPath(path);
if(existingAsset != null)
{
EditorUtility.CopySerialized(obj, existingAsset);
EditorUtility.SetDirty(existingAsset);
AssetDatabase.SaveAssets();
}
else
{
AssetDatabase.CreateAsset(obj, path);
}
}
static T LoadAsset<T>(string path , T defaultAsset) where T : Object
{
T existingAsset = AssetDatabase.LoadMainAssetAtPath(path) as T;
if(existingAsset == null)
{
existingAsset = defaultAsset;
}
return existingAsset;
}
}
#endif

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d9177045eec804d9198f1af54374656c
timeCreated: 1465548788
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,22 @@
using UnityEngine;
using UnityEditor;
public class BuildCompressedPlayer : MonoBehaviour {
[MenuItem("Build/BuildAndroid")]
static void BuildAndroid(){
Build(string.Format("{0}_{1}_{2}.apk", PlayerSettings.productName, PlayerSettings.bundleVersion, PlayerSettings.Android.bundleVersionCode), BuildTarget.Android);
}
[MenuItem("Build/BuildIOS")]
static void BuildIOS(){
Build("xcode", BuildTarget.iOS);
}
static void Build(string locationPathName, BuildTarget buildTarget){
BuildOptions opt = BuildOptions.SymlinkLibraries;
// opt |= BuildOptions.Development;
opt |= BuildOptions.CompressWithLz4;
BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, locationPathName, buildTarget, opt);
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 73c0cd415ede34cf0b5ab558028a71d8
timeCreated: 1526896269
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
/* kjems - http://answers.unity3d.com/questions/221651/yielding-with-www-in-editor.html
I made a ContinuationManager to handle the cases where I want to wait for a condition and then do something with an object.
The snippet below is an example of WWW using the ContinuationManager where the condition to trigger the continuation is www.isDone.
The lambda closure captures the www object so it can be used when the www is done. The code is non-blocking.
var www = new WWW("someURL");
ContinuationManager.Add(() => www.isDone, () => {
if(!string.IsNullOrEmpty(www.error)){
Debug.Log("WWW failed: " + www.error);
}
Debug.Log("WWW result : " + www.text);
});
*/
internal static class ContinuationManager {
private class Job {
public Job(Func<bool> completed, Action continueWith){
Completed = completed;
ContinueWith = continueWith;
}
public Func<bool> Completed { get; private set; }
public Action ContinueWith { get; private set; }
}
private static readonly List<Job> jobs = new List<Job>();
public static void Add(Func<bool> completed, Action continueWith){
if(!jobs.Any()){
EditorApplication.update += Update;
}
jobs.Add(new Job(completed, continueWith));
}
private static void Update(){
for(int i = 0; i >= 0; --i){
var jobIt = jobs[i];
if(jobIt.Completed()){
jobIt.ContinueWith();
jobs.RemoveAt(i);
}
}
if(!jobs.Any()){
EditorApplication.update -= Update;
}
}
}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 160bb54b28f45e14592818dfa8d093bf
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -0,0 +1,16 @@
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
public class DevelopmentBuilder : IPreprocessBuildWithReport {
// 実行順
public int callbackOrder {
get{ return 0; }
}
public void OnPreprocessBuild(BuildReport report) {
UnityEditor.EditorUserBuildSettings.development = true;
UnityEditor.EditorUserBuildSettings.iOSBuildConfigType = UnityEditor.iOSBuildType.Debug;
UnityEditor.AssetDatabase.SaveAssets();
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f93a50b4f5aa34178a7078755b891745
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,13 @@
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Diagnostics;
public class EditorRestartUnity{
[MenuItem("File/Restart")]
static void RestartUnity(){
// 別のUnityを起動したあとに自身を終了
Process.Start(EditorApplication.applicationPath);
EditorApplication.Exit(0);
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 9e272b580454b439996f43d8c6e7d64e
timeCreated: 1470385604
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

349
Editor/EditorUtils.cs Normal file
View File

@ -0,0 +1,349 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEditor.Experimental.SceneManagement;
using UnityEditor.SceneManagement;
using UnityEditorInternal;
using UnityEngine;
public static class EditorUtils {
public static void OpenAllScene(Func<float, EditorBuildSettingsScene, GameObject[], bool> editFunc){
var currentScenePath = EditorSceneManager.GetActiveScene().path;
var scenes = EditorBuildSettings.scenes.Where(s => s.enabled).ToArray();
for(int i = 0; i < scenes.Length; ++i){
var scene = scenes[i];
EditorSceneManager.OpenScene(scene.path);
var gameObjectArray = Resources.FindObjectsOfTypeAll<GameObject>().Where(go => string.IsNullOrEmpty(AssetDatabase.GetAssetPath(go)) && go.hideFlags == HideFlags.None).ToArray();
var isChanged = editFunc((float)i / scenes.Length, scene, gameObjectArray);
if(isChanged){
EditorSceneManager.SaveScene(EditorSceneManager.GetActiveScene());
}
}
EditorSceneManager.OpenScene(currentScenePath);
}
public static GameObject[] GetAllAssets(){
var pathArray = AssetDatabase.GetAllAssetPaths().Where(path => path.StartsWith("Assets/")).ToArray();
return pathArray.Select(a => AssetDatabase.LoadAssetAtPath(a, typeof(GameObject)) as GameObject).Where(a => a != null).ToArray();
}
public static void FindAllPrefabPath(string folderPath, Action<float, string> action){
var pathArray = Directory.GetFiles(folderPath, "*.prefab");
for(int i = 0; i < pathArray.Length; ++i){
action((float)i / pathArray.Length, pathArray[i].Replace(Application.dataPath, "Assets"));
}
}
public static void FindAllChildrensPrefabPath(string folderPath, Action<float, string> action){
FindAllPrefabPath(folderPath, action);
foreach(var childPath in Directory.GetDirectories(folderPath)){
FindAllChildrensPrefabPath(childPath, action);
}
}
public static void EditPrefab(string folderPath, Func<GameObject, bool> editFunc){
var prefab = PrefabUtility.LoadPrefabContents(folderPath);
var isChanged = editFunc(prefab);
if(isChanged){
PrefabUtility.SaveAsPrefabAsset(prefab, folderPath);
}
PrefabUtility.UnloadPrefabContents(prefab);
}
public static void FindAllChildrensPrefab(Transform transform, Action<Transform> action){
for(int i = transform.childCount - 1; i >= 0; --i){
Transform child = transform.GetChild(i);
if(PrefabUtility.IsAnyPrefabInstanceRoot(child.gameObject)){
action(child);
}else{
FindAllChildrensPrefab(child, action);
}
}
}
public static void SwapPrefab(Transform target, GameObject swapPrefab){
var to = (UnityEditor.PrefabUtility.InstantiatePrefab(swapPrefab) as GameObject).transform;
to.parent = target.parent;
to.localPosition = target.localPosition;
to.localRotation = target.localRotation;
to.localScale = target.localScale;
GameObject.DestroyImmediate(target.gameObject);
}
public static string MigratePrefabToPrefabVariant(GameObject basePrefab, GameObject migrationPrefab){
var basePath = AssetDatabase.GetAssetPath(basePrefab);
var path = AssetDatabase.GetAssetPath(migrationPrefab).Replace(".prefab", " Variant.prefab");
var instance = PrefabUtility.InstantiatePrefab(basePrefab) as GameObject;
PrefabUtility.SaveAsPrefabAsset(instance, path);
GameObject.DestroyImmediate(instance);
var prefab = PrefabUtility.LoadPrefabContents(path);
var result = Migrate(prefab.transform, migrationPrefab.transform);
if(!result){
FixField(prefab.transform, migrationPrefab.transform);
PrefabUtility.SaveAsPrefabAsset(prefab, path);
}
PrefabUtility.UnloadPrefabContents(prefab);
return path;
}
private static bool Migrate(Transform targetTransform, Transform migrationTransform){
var targetChildCount = targetTransform.childCount;
for(int i = 0; i < migrationTransform.childCount; ++i){
var migrationChild = migrationTransform.GetChild(i);
Transform targetChild;
if(i < targetChildCount){
targetChild = targetTransform.GetChild(i);
if(migrationChild.name != targetChild.name){
var containsNameCount = ChildContaintsNameCount(targetTransform, migrationChild.name);
if(containsNameCount == 0){
targetChild = GameObject.Instantiate(migrationChild.gameObject, targetTransform).transform;
targetChild.name = migrationChild.name;
targetChild.SetSiblingIndex(migrationChild.GetSiblingIndex());
++targetChildCount;
}else if(containsNameCount == 1){
for(int j = 0; j < targetChildCount; ++j){
if(targetTransform.GetChild(j).name == migrationChild.name){
targetChild = targetTransform.GetChild(j);
targetChild.SetSiblingIndex(migrationChild.GetSiblingIndex());
break;
}
}
}else{
Debug.LogError("同一階層に同じ名前のオブジェクトがある為中止します。");
return true;
}
}
}else{
targetChild = GameObject.Instantiate(migrationChild.gameObject, targetTransform).transform;
targetChild.name = migrationChild.name;
++targetChildCount;
}
CopyComponents(targetChild, migrationChild);
var result = Migrate(targetChild, migrationChild);
if(result){
return true;
}
targetChild.gameObject.SetActive(migrationChild.gameObject.activeSelf);
}
for(int i = 0; i < targetChildCount; ++i){
var toChild = targetTransform.GetChild(i);
var containsNameCount = ChildContaintsNameCount(migrationTransform, toChild.name);
if(containsNameCount == 0){
toChild.gameObject.SetActive(false);
Debug.LogWarning("Change disable " + toChild.GetPath());
}
}
return false;
}
private static void FixField(Transform targetTransform, Transform migrationTransform){
var targetChildCount = targetTransform.childCount;
for(int i = 0; i < migrationTransform.childCount; ++i){
var migrationChild = migrationTransform.GetChild(i);
var targetChild = targetTransform.GetChild(i);
if(migrationChild.name != targetChild.name){
for(int j = 0; j < targetChildCount; ++j){
if(targetTransform.GetChild(j).name == migrationChild.name){
targetChild = targetTransform.GetChild(j);
break;
}
}
}
FixField(targetChild, migrationChild);
ProcessReflection(migrationChild, targetChild, targetTransform);
migrationChild.FindComponent<ParticleSystem>(fromPS => {
if(fromPS.subEmitters.enabled){
var fromSub = fromPS.subEmitters;
FindChildrensByPath(targetTransform, migrationChild.GetPath(), t => {
t.FindComponent<ParticleSystem>(toPS => {
var toSub = toPS.subEmitters;
for(int index = 0; index < fromSub.subEmittersCount; ++index){
var fromTarget = fromSub.GetSubEmitterSystem(index);
FindChildrensByPath(targetTransform, fromTarget.transform.GetPath(), toTarget => {
toSub.SetSubEmitterSystem(index, toTarget.GetComponent<ParticleSystem>());
});
}
});
});
}
});
}
}
private static int ChildContaintsNameCount(Transform transform, string name){
var counter = 0;
foreach(Transform child in transform){
if(child.name == name){
++counter;
}
}
return counter;
}
private static void CopyComponents(Transform to, Transform from){
var components = from.gameObject.GetComponents<Component>();
var targetComponents = to.gameObject.GetComponents<Component>();
var currentComponentCount = new Dictionary<System.Type, int>();
foreach(var component in components){
var componentType = component.GetType();
var componentCount = targetComponents.Count(c => c.GetType() == componentType);
ComponentUtility.CopyComponent(component);
if(componentCount == 0){
ComponentUtility.PasteComponentAsNew(to.gameObject);
}else if(componentCount == 1){
var targetComponent = targetComponents.First(c => c.GetType() == componentType);
ComponentUtility.PasteComponentValues(targetComponent);
}else{
if(!currentComponentCount.ContainsKey(componentType)){
currentComponentCount.Add(componentType, 0);
}
var count = currentComponentCount[componentType];
var targetComponentsWithType = targetComponents.Where(c => c.GetType() == componentType);
if(count < targetComponentsWithType.Count()){
var targetComponent = targetComponents.Where(c => c.GetType() == componentType).ElementAt(count);
currentComponentCount[componentType] += 1;
ComponentUtility.PasteComponentValues(targetComponent);
}else{
ComponentUtility.PasteComponentAsNew(to.gameObject);
}
}
}
foreach(var component in targetComponents){
var componentType = component.GetType();
var componentCount = components.Count(c => c.GetType() == componentType);
if(componentCount == 0){
Debug.LogWarning("Deestroy component " + to.GetPath() + " " + componentType);
GameObject.DestroyImmediate(component);
}
}
}
private static void ProcessReflection(Transform from, Transform to, Transform parent){
var fromComponents = from.GetComponents<Component>();
for(int i = 0; i < fromComponents.Length; ++i){
var fromType = fromComponents[i].GetType();
var toComponent = to.GetComponent(fromType);
if(toComponent == null){
continue;
}
MemberInfo[] members = fromType.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
foreach(var m in members){
if(m.MemberType != MemberTypes.Field){
continue;
}
System.Type fieldType = ((FieldInfo)m).FieldType;
if(fieldType == typeof(Transform) || fieldType == typeof(GameObject)){
string targetPath;
FieldInfo field = fromType.GetField(m.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
if(fieldType == typeof(Transform)){
Transform t = (Transform)field.GetValue(fromComponents[i]);
if(t == null){
continue;
}
targetPath = t.GetPath();
}else if(fieldType == typeof(GameObject)){
GameObject obj = (GameObject)field.GetValue(fromComponents[i]);
if(obj == null){
continue;
}
targetPath = obj.transform.GetPath();
}else{
continue;
}
FindChildrensByPath(parent, targetPath, targetTransform => {
FieldInfo setField = fromType.GetField(m.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
if(setField == null){
Debug.Log("setField is null " + m.Name);
}else{
if(fieldType == typeof(Transform)){
setField.SetValue(toComponent, targetTransform);
}else if(fieldType == typeof(GameObject)){
setField.SetValue(toComponent, targetTransform.gameObject);
}
}
});
}else if(fieldType == typeof(Transform[])){
FieldInfo field = fromType.GetField(m.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
Transform[] t = (Transform[])field.GetValue(fromComponents[i]);
if(t == null){
continue;
}
var targetPathArray = new string[t.Length];
for(int j = 0; j < t.Length; ++j){
if(t[j] == null){
targetPathArray[j] = null;
}else{
targetPathArray[j] = t[j].GetPath();
}
}
var newTransformArray = new Transform[t.Length];
for(int j = 0; j < t.Length; ++j){
if(targetPathArray[j] == null){
continue;
}
FindChildrensByPath(parent, targetPathArray[j], targetTransform => {
newTransformArray[j] = targetTransform;
});
}
FieldInfo setField = fromType.GetField(m.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
if(setField == null){
Debug.Log("setField is null " + m.Name);
}else{
setField.SetValue(toComponent, newTransformArray);
}
}else if(fieldType == typeof(GameObject[])){
FieldInfo field = fromType.GetField(m.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
GameObject[] t = (GameObject[])field.GetValue(fromComponents[i]);
if(t == null){
continue;
}
var targetPathArray = new string[t.Length];
for(int j = 0; j < t.Length; ++j){
if(t[j] == null){
targetPathArray[j] = null;
}else{
targetPathArray[j] = t[j].transform.GetPath();
}
}
var newArray = new GameObject[t.Length];
for(int j = 0; j < t.Length; ++j){
if(targetPathArray[j] == null){
continue;
}
FindChildrensByPath(parent, targetPathArray[j], targetTransform => {
newArray[j] = targetTransform.gameObject;
});
}
FieldInfo setField = fromType.GetField(m.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
if(setField == null){
Debug.Log("setField is null " + m.Name);
}else{
setField.SetValue(toComponent, newArray);
}
}
}
}
}
private static bool FindChildrensByPath(Transform t, string path, Action<Transform> callback){
for(int i = 0; i < t.childCount; ++i){
Transform child = t.GetChild(i);
if(child.GetPath().Replace(" Variant", "") == path){
callback(child);
return true;
}
}
for(int i = 0; i < t.childCount; ++i){
Transform child = t.GetChild(i);
if(FindChildrensByPath(child, path, callback)){
return true;
}
}
return false;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d534ae6e5c0ae498088916e672848230
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,38 @@
using UnityEngine;
using UnityEditor;
using System.IO;
[InitializeOnLoad]
public class EmptyFolderDestroyer {
static EmptyFolderDestroyer(){
EditorApplication.playModeStateChanged += state => {
if(state == PlayModeStateChange.EnteredEditMode){
DirectoryInfo directory = new DirectoryInfo(Application.dataPath);
CheckFolder(directory);
}
};
}
private static bool CheckFolder(DirectoryInfo directory){
DirectoryInfo[] childrens = directory.GetDirectories();
if(childrens.Length > 0){
bool deleted = false;
foreach(DirectoryInfo childDirectory in childrens){
deleted = CheckFolder(childDirectory);
}
return deleted ? CheckFolder(directory) : false;
}else if(directory.GetFiles().Length <= 0){
DeleteFolder(directory.FullName);
return true;
}else{
return false;
}
}
private static void DeleteFolder(string path){
Debug.Log(string.Format("空フォルダを削除 : {0}", path));
System.IO.Directory.Delete(path, true);
System.IO.File.Delete(string.Format("{0}.meta", path));
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 14638c40afaa74329bacee043a65e015
timeCreated: 1490339018
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,26 @@
using UnityEngine;
using UnityEditor;
using System.Linq;
[CustomEditor(typeof(MeshRenderer))]
public class MeshRendererInspector : Editor {
public override void OnInspectorGUI(){
serializedObject.Update();
EditorGUILayout.BeginHorizontal();
// sorting order
SerializedProperty sortOrderProperty = serializedObject.FindProperty("m_SortingOrder");
sortOrderProperty.intValue = EditorGUILayout.IntField("Order in Layer", sortOrderProperty.intValue);
// sorting layer
// SerializedProperty layerIDProperty = serializedObject.FindProperty("m_SortingLayerID");
// var index = System.Array.FindIndex(SortingLayer.layers, layer => layer.id == layerIDProperty.intValue);
// index = EditorGUILayout.Popup(index, (from layer in SortingLayer.layers select layer.name).ToArray());
// layerIDProperty.intValue = SortingLayer.layers[index].id;
EditorGUILayout.EndHorizontal();
serializedObject.ApplyModifiedProperties();
base.OnInspectorGUI();
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7b02150d276f346c084d16910016c901
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,34 @@
using UnityEngine;
using UnityEditor;
[ExecuteInEditMode]
public class ObliqueProjection : MonoBehaviour {
[Range(-1f, 1f)]
public float horizontal;
[Range(-1f, 1f)]
public float vertical;
public float distance;
private Vector3 orgPosition;
void OnEnable(){
EditorApplication.update += EditorUpdate;
orgPosition = transform.localPosition;
}
void OnDisable(){
EditorApplication.update -= EditorUpdate;
}
void EditorUpdate(){
var cam = GetComponent<Camera>();
var proj = cam.projectionMatrix;
proj.m02 = horizontal;
proj.m12 = vertical;
cam.projectionMatrix = proj;
var tan = Mathf.Tan(cam.fieldOfView * 0.5f * Mathf.Deg2Rad);
var rect = cam.pixelRect;
var ratio = (float)rect.width / (float)rect.height;
transform.localPosition = orgPosition + new Vector3(-horizontal * distance * tan * ratio, -vertical * distance * tan, 0f);
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d0f55f0fdd4aa4d1594e6024b695b52e
timeCreated: 1521183141
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

30
Editor/OverrideFile.cs Normal file
View File

@ -0,0 +1,30 @@
using UnityEngine;
using System.Text.RegularExpressions;
using System.IO;
using UnityEditor;
public class OverrideFile : AssetPostprocessor {
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromPath){
if(Event.current == null || Event.current.type != EventType.DragPerform) return;
foreach(var asset in importedAssets){
var rootAsset = ParentFile(asset);
if(rootAsset == null) continue;
if(EditorUtility.DisplayDialog("override", rootAsset + "を上書きしますか?", "上書き", "両方残す")){
File.Copy(asset, rootAsset, true);
AssetDatabase.DeleteAsset(asset);
AssetDatabase.ImportAsset(rootAsset);
AssetDatabase.Refresh();
}
}
}
static string ParentFile(string name){
var match = Regex.Match(name, @"(?<item>.*) 1.(?<extension>.*)");
if(!match.Success) return null;
else return string.Format("{0}.{1}", match.Groups["item"], match.Groups["extension"]);
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 7139f64bf261d41ed806517599cf7ed4
timeCreated: 1461068180
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

36
Editor/SceneReloader.cs Normal file
View File

@ -0,0 +1,36 @@
using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
[InitializeOnLoad]
class SceneReloader : AssetPostprocessor {
private static bool isReload = false;
static SceneReloader(){
EditorApplication.update += Update;
}
private static void Update(){
if(isReload){
isReload = false;
EditorSceneManager.OpenScene(EditorSceneManager.GetActiveScene().path);
}
}
// 反応しない
// static void OnPreprocessAsset(){
// isReload = true;
// Debug.Log("PreprocessAsset");
// }
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths){
// 暫定対応
// Assetインポート->Scene更新確認Dialog->更新になるので途中での保存には対処出来ない
foreach(var importedAsset in importedAssets){
if(importedAsset.Contains(".unity")){
isReload = true;
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3506533d15c8d4f2f9cb831c2870c717
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

89
Editor/TextureModifier.cs Normal file
View File

@ -0,0 +1,89 @@
using UnityEngine;
using UnityEditor;
class TextureModifier : AssetPostprocessor {
void OnPostprocessTexture (Texture2D texture){
if (!assetPath.EndsWith ("Dither.png")) {
return;
}
var texw = texture.width;
var texh = texture.height;
var pixels = texture.GetPixels ();
var offs = 0;
var k1Per15 = 1.0f / 15.0f;
var k1Per16 = 1.0f / 16.0f;
var k3Per16 = 3.0f / 16.0f;
var k5Per16 = 5.0f / 16.0f;
var k7Per16 = 7.0f / 16.0f;
for (var y = 0; y < texh; y++) {
for (var x = 0; x < texw; x++) {
float a = pixels [offs].a;
float r = pixels [offs].r;
float g = pixels [offs].g;
float b = pixels [offs].b;
var a2 = Mathf.Clamp01 (Mathf.Floor (a * 16) * k1Per15);
var r2 = Mathf.Clamp01 (Mathf.Floor (r * 16) * k1Per15);
var g2 = Mathf.Clamp01 (Mathf.Floor (g * 16) * k1Per15);
var b2 = Mathf.Clamp01 (Mathf.Floor (b * 16) * k1Per15);
var ae = a - a2;
var re = r - r2;
var ge = g - g2;
var be = b - b2;
pixels [offs].a = a2;
pixels [offs].r = r2;
pixels [offs].g = g2;
pixels [offs].b = b2;
var n1 = offs + 1;
var n2 = offs + texw - 1;
var n3 = offs + texw;
var n4 = offs + texw + 1;
if (x < texw - 1) {
pixels [n1].a += ae * k7Per16;
pixels [n1].r += re * k7Per16;
pixels [n1].g += ge * k7Per16;
pixels [n1].b += be * k7Per16;
}
if (y < texh - 1) {
pixels [n3].a += ae * k5Per16;
pixels [n3].r += re * k5Per16;
pixels [n3].g += ge * k5Per16;
pixels [n3].b += be * k5Per16;
if (x > 0) {
pixels [n2].a += ae * k3Per16;
pixels [n2].r += re * k3Per16;
pixels [n2].g += ge * k3Per16;
pixels [n2].b += be * k3Per16;
}
if (x < texw - 1) {
pixels [n4].a += ae * k1Per16;
pixels [n4].r += re * k1Per16;
pixels [n4].g += ge * k1Per16;
pixels [n4].b += be * k1Per16;
}
}
offs++;
}
}
texture.SetPixels (pixels);
#if UNITY_2018_1_OR_NEWER
EditorUtility.CompressTexture (texture, TextureFormat.RGBA4444, UnityEditor.TextureCompressionQuality.Best);
#else
EditorUtility.CompressTexture (texture, TextureFormat.RGBA4444, TextureCompressionQuality.Best);
#endif
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 755998079b2404170980be49465fda06
timeCreated: 1474456189
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

9
Editor/Tools.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 0dd5f0e8659264f84ba2e86340d856aa
folderAsset: yes
timeCreated: 1474347172
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,18 @@

using UnityEngine;
using UnityEditor;
using System.IO;
public class ExportAssetBundle {
[MenuItem("Tools/Export AssetBundle")]
static void Export(){
Build("/iOS/", BuildTarget.iOS);
// Build("/Android/", BuildTarget.Android);
}
private static void Build(string path, BuildTarget targetPlatform){
Directory.CreateDirectory(Application.streamingAssetsPath + path);
BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath + path, BuildAssetBundleOptions.ChunkBasedCompression, targetPlatform);
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 7c335a6145daa4e5ba9a31c7e31f20c7
timeCreated: 1459322533
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,42 @@
using System.IO;
using UnityEngine;
using UnityEditor;
public static class PlayerPrefsResetter {
[MenuItem("Tools/ResetTool/Reset PlayerPrefs")]
public static void ResetPlayerPrefs(){
PlayerPrefs.DeleteAll();
PlayerPrefs.Save();
Debug.Log("Reset PlayerPrefs");
}
[MenuItem("Tools/ResetTool/Reset Data")]
public static void ResetData(){
UsayaStorageManager.Remove(UsayaStorageFilename.Main_Data, Const.GameDataTag);
UsayaStorageManager.Remove(UsayaStorageFilename.Settings_Data, Const.GameDataTag);
UsayaStorageManager.Remove(UsayaStorageFilename.Wallet_Data, Const.GameDataTag);
UsayaStorageManager.Remove(UsayaStorageFilename.Purchaser_Data, Const.GameDataTag);
Debug.Log("Reset Data");
}
[MenuItem("Tools/ResetTool/Reset All Data")]
public static void ResetAllData(){
UsayaStorageManager.Remove(UsayaStorageFilename.Main_Data, Const.GameDataTag);
UsayaStorageManager.Remove(UsayaStorageFilename.Settings_Data, Const.GameDataTag);
UsayaStorageManager.Remove(UsayaStorageFilename.Wallet_Data, Const.GameDataTag);
UsayaStorageManager.Remove(UsayaStorageFilename.Purchaser_Data, Const.GameDataTag);
PlayerPrefs.DeleteAll();
PlayerPrefs.Save();
Debug.Log("Reset All Data");
}
[MenuItem("Tools/ResetTool/Delete All Data")]
public static void DeleteAllData(){
if(!Directory.Exists(Application.persistentDataPath)){
Debug.Log("Aready deleted.");
return;
}
Directory.Delete(Application.persistentDataPath, true);
Debug.Log("Delete All Data");
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6aa4e9af91459451db718ca557fe66cd
timeCreated: 1474347100
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

9
Editor/Window.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 43a39b010bb1b4f089436a00bfbc830b
folderAsset: yes
timeCreated: 1475475984
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

117
Editor/Window/UVChecker.cs Normal file
View File

@ -0,0 +1,117 @@
using System.Collections;
using System.Text;
using UnityEditor;
using UnityEngine;
public class UVChecker : EditorWindow {
private GameObject targetGameObject;
private MeshFilter targetMeshFilter;
private Texture2D tex;
[MenuItem("Window/UVChecker")]
private static void Open(){
GetWindow<UVChecker>();
}
private void OnGUI(){
targetGameObject = EditorGUILayout.ObjectField("TargetMesh", targetGameObject, typeof(GameObject), true) as GameObject;
if(GUILayout.Button("Execute")){
targetMeshFilter = targetGameObject.GetComponent<MeshFilter>();
tex = new Texture2D(256, 256);
var mesh = targetMeshFilter.sharedMesh;
DrawUV(mesh);
}
if(tex != null){
EditorGUI.DrawPreviewTexture(new Rect(10, 50, tex.width, tex.height), tex);
}
}
private void DrawUV(Mesh mesh){
var uvs = mesh.uv;
var tri = mesh.triangles;
for(int i_base = 0; i_base < tri.Length; i_base += 3){
int i_1 = i_base;
int i_2 = i_base + 1;
int i_3 = i_base + 2;
Vector2 uv1 = uvs[tri[i_1]];
Vector2 uv2 = uvs[tri[i_2]];
Vector2 uv3 = uvs[tri[i_3]];
DrawLine(uv1, uv2);
DrawLine(uv2, uv3);
DrawLine(uv3, uv1);
}
tex.Apply(false);
UVLog(uvs);
}
private void UVLog(Vector2[] uvs){
StringBuilder sb = new StringBuilder();
foreach(var uv in uvs){
sb.AppendLine(uv.ToString());
}
Debug.Log(sb.ToString());
}
private void DrawLine(Vector2 from, Vector2 to){
int x0 = Mathf.RoundToInt(from.x * tex.width);
int y0 = Mathf.RoundToInt(from.y * tex.height);
int x1 = Mathf.RoundToInt(to.x * tex.width);
int y1 = Mathf.RoundToInt(to.y * tex.height);
DrawLine(x0, y0, x1, y1, Color.red);
}
private void DrawLine(int x0, int y0, int x1, int y1, Color col){
int dy = y1 - y0;
int dx = x1 - x0;
int stepx, stepy;
if(dy < 0){
dy = -dy;
stepy = -1;
}else{
stepy = 1;
}
if(dx < 0){
dx = -dx;
stepx = -1;
}else{
stepx = 1;
}
dy <<= 1;
dx <<= 1;
float fraction = 0;
tex.SetPixel(x0, y0, col);
if(dx > dy){
fraction = dy - (dx >> 1);
while(Mathf.Abs(x0 - x1) > 1){
if(fraction >= 0){
y0 += stepy;
fraction -= dx;
}
x0 += stepx;
fraction += dy;
tex.SetPixel(x0, y0, col);
}
}else{
fraction = dx - (dy >> 1);
while(Mathf.Abs(y0 - y1) > 1){
if(fraction >= 0){
x0 += stepx;
fraction -= dy;
}
y0 += stepy;
fraction += dx;
tex.SetPixel(x0, y0, col);
}
}
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d5ec281105a8a4d83928a39475a0e015
timeCreated: 1475475744
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

9
Java.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: f1b645066b4c14f2da8a355d54b2d42b
folderAsset: yes
timeCreated: 1505305681
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,76 @@
package jp.usaya.lib;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.v4.app.NotificationCompat;
/**
* Created by sutoatsushi on 2018/03/23.
*/
public class NotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//値の取得
Integer primary_key = intent.getIntExtra("PRIMARY_KEY", 0);
String ticker = intent.getStringExtra("TICKER");
String content_title = intent.getStringExtra("CONTENT_TITLE");
String content_text = intent.getStringExtra ("CONTENT_TEXT");
String sound_path = intent.getStringExtra("SOUND_PATH");
// intentからPendingIntentを作成
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
// LargeIcon の Bitmap を生成
final PackageManager pm = context.getPackageManager();
ApplicationInfo applicationInfo = null;
try {
applicationInfo = pm.getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
e.printStackTrace();
return;
}
final int appIconResId = applicationInfo.icon;
Bitmap largeIcon = BitmapFactory.decodeResource(context.getResources(), appIconResId);
// NotificationBuilderを作成
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setContentIntent(pendingIntent);
builder.setTicker(ticker); //通知到着時に通知バーに表示(4.4まで)
builder.setSmallIcon(appIconResId); //アイコン
builder.setContentTitle(content_title); // タイトル
builder.setContentText(content_text); // 本文(サブタイトル)
builder.setLargeIcon(largeIcon); //開いた時のアイコン
builder.setWhen(System.currentTimeMillis()); //通知に表示される時間(※通知時間ではない!)
// 通知時の音・バイブ・ライト
if( sound_path.equals("Default") ){
builder.setDefaults(Notification.DEFAULT_SOUND);
}else{
builder.setSound( Uri.parse(sound_path));
}
builder.setDefaults(Notification.DEFAULT_VIBRATE);
builder.setDefaults(Notification.DEFAULT_LIGHTS);
builder.setAutoCancel(true);
// NotificationManagerを取得
NotificationManager manager = (NotificationManager) context.getSystemService(Service.NOTIFICATION_SERVICE);
// Notificationを作成して通知
manager.notify(primary_key, builder.build());
}
}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: fba37493533674d0daeacdc649fa71d2
timeCreated: 1521809007
licenseType: Pro
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,221 @@
package jp.usaya.lib;
import android.content.Intent;
import android.os.Bundle;
// import com.google.firebase.messaging.MessageForwardingService;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
// import com.onevcat.uniwebview.AndroidPlugin;
import android.util.DisplayMetrics;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.*;
import android.net.Uri;
import android.util.Log;
import android.os.SystemClock;
import java.io.File;
import java.net.URLEncoder;
import java.util.*;
import android.content.Context;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.pm.ActivityInfo;
// public class UsayaUnityPlayerActivity extends com.unity3d.player.UnityPlayerActivity // NCMB使わない場合はこっち
public class UsayaUnityPlayerActivity extends com.nifcloud.mbaas.ncmbfcmplugin.UnityPlayerActivity
{
public UsayaUnityPlayerActivity()
{
}
protected void onNewIntent(Intent intent)
{
// Intent message = new Intent(this, MessageForwardingService.class);
// message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
// message.putExtras(intent);
// startService(message);
}
public void onCreate(Bundle savedInstanceState)
{
if(mUnityPlayer != null)
{
mUnityPlayer.quit();
mUnityPlayer = null;
}
super.onCreate(savedInstanceState);
}
public float getHeightPixels()
{
DisplayMetrics dMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(dMetrics);
return dMetrics.heightPixels;
}
public float getWidthPixels()
{
DisplayMetrics dMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(dMetrics);
return dMetrics.widthPixels;
}
public float getPointHeight()
{
DisplayMetrics dMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(dMetrics);
return dMetrics.heightPixels / dMetrics.density;
}
public float getPointWidth()
{
DisplayMetrics dMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(dMetrics);
return dMetrics.widthPixels / dMetrics.density ;
}
public void forceOrientationPortrait(){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
public void forceOrientationLandscape(){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
public long elapsedRealtime(){
return SystemClock.elapsedRealtime();
}
public void postTwitterOrFacebook(boolean isTwitter, String message, String url, String imagePath)
{
try
{
String name = isTwitter ? "com.twitter.android" : "com.facebook.katana";
String type = imagePath.equals("") ? "text/plain" : getIntentTypeForImage(imagePath);
Intent intent = createAppIntent(name, "android.intent.action.SEND", type);
if(intent != null)
{
intent.putExtra("android.intent.extra.TEXT", (new StringBuilder(String.valueOf(message))).append(BR).append(url).toString());
if(!imagePath.equals(""))
intent.putExtra("android.intent.extra.STREAM", Uri.fromFile(new File(imagePath)));
UnityPlayer.currentActivity.startActivity(intent);
UnityPlayer.UnitySendMessage(UNITY_SEND_GAMEOBJECT, UNITY_SEND_CALLBACK, "0");
} else
{
UnityPlayer.UnitySendMessage(UNITY_SEND_GAMEOBJECT, UNITY_SEND_CALLBACK, "1");
}
}
catch(Exception e)
{
Log.e(TAG, "postTwitterOrFacebook", e);
UnityPlayer.UnitySendMessage(UNITY_SEND_GAMEOBJECT, UNITY_SEND_CALLBACK, "2");
}
}
public void createChooser(String message, String imagePath)
{
try
{
String type = imagePath.equals("") ? "text/plain" : getIntentTypeForImage(imagePath);
Intent intent = createAppIntent(null, "android.intent.action.SEND", type);
if(intent != null)
{
intent.putExtra("android.intent.extra.TEXT", message);
if(!imagePath.equals(""))
intent.putExtra("android.intent.extra.STREAM", Uri.fromFile(new File(imagePath)));
UnityPlayer.currentActivity.startActivity(Intent.createChooser(intent, "Share"));
UnityPlayer.UnitySendMessage(UNITY_SEND_GAMEOBJECT, UNITY_SEND_CALLBACK, "0");
} else
{
UnityPlayer.UnitySendMessage(UNITY_SEND_GAMEOBJECT, UNITY_SEND_CALLBACK, "1");
}
}
catch(Exception e)
{
Log.e(TAG, "createChooser", e);
UnityPlayer.UnitySendMessage(UNITY_SEND_GAMEOBJECT, UNITY_SEND_CALLBACK, "2");
}
}
private String getIntentTypeForImage(String imagePath)
{
String extension = imagePath.substring(imagePath.lastIndexOf(".") + 1).toLowerCase(Locale.getDefault());
return extension != ".png" ? "image/jpg" : "image/png";
}
private Intent createAppIntent(String name, String action, String type)
throws Exception
{
Intent intent;
List ris;
Iterator iterator;
try
{
intent = new Intent(action);
intent.setType(type);
ris = UnityPlayer.currentActivity.getPackageManager().queryIntentActivities(intent, 0x10000);
if(name == "" || name == null)
return ris.isEmpty() ? null : intent;
}
catch(Exception e)
{
throw e;
}
iterator = ris.iterator();
while(iterator.hasNext())
{
ResolveInfo ri = (ResolveInfo)iterator.next();
if(ri.activityInfo.packageName.equals(name))
{
intent.setClassName(ri.activityInfo.packageName, ri.activityInfo.name);
return intent;
}
}
return null;
}
public void sendNotification(long unixtime, int primary_key, String ticker, String content_title, String content_text, String sound_path)
{
// インテント作成
Activity activity = UnityPlayer.currentActivity;
Context context = activity.getApplicationContext();
Intent intent = new Intent(context, NotificationReceiver.class);
//渡す値
intent.putExtra("PRIMARY_KEY", primary_key);
intent.putExtra("TICKER", ticker);
intent.putExtra("CONTENT_TITLE", content_title);
intent.putExtra("CONTENT_TEXT", content_text);
intent.putExtra("SOUND_PATH", sound_path);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(unixtime);
PendingIntent sender = PendingIntent.getBroadcast(context, primary_key, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis() , sender);
}
public void clearNotification(int primary_key)
{
// インテント作成
Activity activity = UnityPlayer.currentActivity;
Context context = activity.getApplicationContext();
Intent intent = new Intent(context,NotificationReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, primary_key, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(sender);
sender.cancel();
}
public static final String TAG = "UsayaUnityPlayerActivity";
public static final String BR = System.getProperty("line.separator");
public static final String UNITY_SEND_GAMEOBJECT = "ShareManager";
public static final String UNITY_SEND_CALLBACK = "OnShareManagerResult";
public static final String RESULT_SUCCESS = "0";
public static final String RESULT_NOT_AVAILABLE = "1";
public static final String RESULT_ERROR = "2";
}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1d2033f57cf7d4c7388ff1c7330f7e13
timeCreated: 1505376972
licenseType: Pro
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Logo.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 9d5228357859d4cbc8b327ec4aa665ac
folderAsset: yes
timeCreated: 1495443112
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

BIN
Logo/Logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

121
Logo/Logo.png.meta Normal file
View File

@ -0,0 +1,121 @@
fileFormatVersion: 2
guid: be9c6b7d0e0264a8cae5ecd136b2b5d0
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: 4
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: 13
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: fbe5b219faf0247128f647c4af7d32fb
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

9
Plugins.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: c3865fff9beea4eaf9bf9e375ae00fea
folderAsset: yes
timeCreated: 1505292483
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Plugins/Android.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 11c71e8e010bc4f41b23483713363284
folderAsset: yes
timeCreated: 1505303258
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: a1f7a4504e34b42aab2e242344e11b55
timeCreated: 1521809007
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Android: Android
second:
enabled: 1
settings: {}
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 9ae001176e96c4ba2b2d8ff79bbbc03b
timeCreated: 1505373166
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Android: Android
second:
enabled: 1
settings: {}
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

394
Plugins/NativeUtils.cs Normal file
View File

@ -0,0 +1,394 @@
using UnityEngine;
using System;
using System.Collections;
using System.Runtime.InteropServices;
public enum VibrationType {
None,
Once,
OnceStrong,
OnceWeak,
DoubleStrong,
DoubleWeak,
Triple,
}
public static class NativeUtils {
// Vibration Effect Type
public static readonly string vEffectOneShot = "EFFECT_DEFAULT_AMPLITUDE";
public static readonly string vEffectClick = "EFFECT_CLICK";
public static readonly string vEffectDClick = "EFFECT_DOUBLE_CLICK";
public static readonly string vEffectHClick = "EFFECT_HEAVY_CLICK";
public static readonly string vEffectTick = "EFFECT_TICK";
#if UNITY_EDITOR
#elif UNITY_IOS
[DllImport("__Internal")]
private static extern int _getHeight();
[DllImport("__Internal")]
private static extern int _getWidth();
[DllImport("__Internal")]
private static extern int _getPointHeight();
[DllImport("__Internal")]
private static extern int _getPointWidth();
[DllImport("__Internal")]
private static extern bool _enableReviewWindow();
[DllImport("__Internal")]
private static extern int _reviewWindow(string appid);
[DllImport("__Internal")]
private static extern long _systemClockTime();
[DllImport("__Internal")]
private static extern bool _canOpenTwitter();
[DllImport("__Internal")]
private static extern bool _canOpenFacebook();
[DllImport("__Internal")]
private static extern void _registerNotification();
[DllImport("__Internal")]
private static extern void _scheduleNotification(int triggerInSeconds, string message, string alarmId);
[DllImport("__Internal")]
private static extern void _cancelAllNotifications();
[DllImport("__Internal")]
private static extern void _PlayVibration(int id);
[DllImport("__Internal")]
private static extern void _PlayVibrationOnce();
[DllImport("__Internal")]
private static extern void _PlayVibrationOnceStrong();
[DllImport("__Internal")]
private static extern void _PlayVibrationOnceWeak();
[DllImport("__Internal")]
private static extern void _PlayVibrationDoubleStrong();
[DllImport("__Internal")]
private static extern void _PlayVibrationDoubleWeak();
[DllImport("__Internal")]
private static extern void _PlayVibrationTriple();
[DllImport("__Internal")]
private static extern void _showAlert(string title, string message);
#elif UNITY_ANDROID
private static void _Vibration(){
Handheld.Vibrate();
}
private static void _VibrationAndroid(string effectType, long msec = 100){
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
using (AndroidJavaObject vibrator = jo.Call<AndroidJavaObject>("getSystemService", "vibrator"))
{
if(androidOSVersion() >= 26 )
{
using (AndroidJavaClass vCls = new AndroidJavaClass("android.os.VibrationEffect"))
{
AndroidJavaObject vEffect = default;
if( effectType != NativeUtils.vEffectOneShot && androidOSVersion() >= 29)
{
vEffect = vCls.CallStatic<AndroidJavaObject>("createPredefined", vCls.GetStatic<int>(effectType));
}
else
{
vEffect = vCls.CallStatic<AndroidJavaObject>("createOneShot", new object[] { msec, vCls.GetStatic<int>("DEFAULT_AMPLITUDE") });
}
vibrator.Call("vibrate", vEffect);
}
}
else
{
vibrator.Call("vibrate", msec);
}
}
}
private static int androidOSVersion() {
#if !UNITY_EDITOR
using (var version = new AndroidJavaClass("android.os.Build$VERSION"))
{
return version.GetStatic<int>("SDK_INT");
}
#else
return -1;
#endif
}
#endif
public static int getHeight(){
int height = 0;
#if UNITY_EDITOR
height = Screen.height;
#elif UNITY_IOS
height = _getHeight();
#elif UNITY_ANDROID
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
{
height = (int)jo.Call<float>("getHeightPixels");
}
#endif
return height;
}
public static int getWidth(){
int width = 0;
#if UNITY_EDITOR
width = Screen.width;
#elif UNITY_IOS
width = _getWidth();
#elif UNITY_ANDROID
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
{
width = (int)jo.Call<float>("getWidthPixels");
}
#endif
return width;
}
public static int getPointHeight(){
int height = 0;
#if UNITY_EDITOR
height = Screen.height;
#elif UNITY_IOS
if (Application.platform != RuntimePlatform.OSXEditor) {
height = _getPointHeight();
}
#elif UNITY_ANDROID
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
{
height = (int)jo.Call<float>("getPointHeight");
}
#endif
return height;
}
public static int getPointWidth(){
int width = 0;
#if UNITY_EDITOR
width = Screen.width;
#elif UNITY_IOS && !UNITY_EDITOR
if (Application.platform != RuntimePlatform.OSXEditor) {
width = _getPointWidth();
}
#elif UNITY_ANDROID && !UNITY_EDITOR
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
{
width = (int)jo.Call<float>("getPointWidth");
}
#endif
return width;
}
public static void forceOrientationLandscape(){
#if UNITY_EDITOR
#elif UNITY_IOS
#elif UNITY_ANDROID
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
{
jo.Call("forceOrientationLandscape");
}
#endif
}
public static void forceOrientationPortrait(){
#if UNITY_EDITOR
#elif UNITY_IOS
#elif UNITY_ANDROID
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
{
jo.Call("forceOrientationPortrait");
}
#endif
}
public static bool enableReviewWindow(){
bool res = false;
#if UNITY_IOS && !UNITY_EDITOR
if (Application.platform != RuntimePlatform.OSXEditor) {
res = _enableReviewWindow();
}
#endif
return res;
}
public static void reviewWindow( string appid){
#if UNITY_IOS && !UNITY_EDITOR
if (Application.platform != RuntimePlatform.OSXEditor) {
_reviewWindow(appid);
}
#endif
}
/// <summary>
/// 端末起動からの経過時間s
/// </summary>
public static long systemClockTime(){
long res = 0;
#if UNITY_EDITOR
var start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
res = (long)(DateTime.Now.ToUniversalTime() - start).TotalSeconds;
#elif UNITY_IOS && !UNITY_EDITOR
if (Application.platform != RuntimePlatform.OSXEditor) {
res = _systemClockTime();
}
#elif UNITY_ANDROID && !UNITY_EDITOR
using (AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject jo = cls.GetStatic<AndroidJavaObject>("currentActivity"))
{
res = (long)(jo.Call<long>("elapsedRealtime") / 1000);
}
#endif
return res;
}
#if UNITY_ANDROID
public static int getAndroidApiLevel(){
var cls = new AndroidJavaClass("android.os.Build$VERSION");
var apiLevel = cls.GetStatic<int>("SDK_INT");
Debug.Log(apiLevel);
return apiLevel;
}
#elif UNITY_EDITOR
#elif UNITY_IOS
public static bool canOpenTwitter(){
return _canOpenTwitter();
}
public static bool canOpenFacebook(){
return _canOpenFacebook();
}
public static int GetiOSMajorVersion(){
string version = SystemInfo.operatingSystem;
version = version.Split('.')[0];
string[] stringSplits = version.Split(' ');
version = stringSplits[stringSplits.Length -1];
return int.Parse(version);
}
#endif
public static void InitNotification()
{
#if UNITY_EDITOR
#elif UNITY_IOS
#elif UNITY_ANDROID
// UniLocalNotification.Initialize();
#endif
}
public static void RegisterNotification()
{
#if UNITY_EDITOR
#elif UNITY_IOS
_registerNotification();
#elif UNITY_ANDROID
#endif
}
public static void ScheduleNotification(int triggerInSeconds, string title, string message, int id)
{
#if UNITY_EDITOR
#elif UNITY_IOS
_scheduleNotification(triggerInSeconds, message, id.ToString());
#elif UNITY_ANDROID
// UniLocalNotification.Register(triggerInSeconds, message, title);
#endif
}
public static void CancelAllNotifications(){
#if UNITY_EDITOR
#elif UNITY_IOS
_cancelAllNotifications();
#elif UNITY_ANDROID
// UniLocalNotification.CancelAll();
#endif
}
public static void PlayVibration(VibrationType vibrationType){
switch(vibrationType){
case VibrationType.Once:
PlayVibrationOnce();
break;
case VibrationType.OnceStrong:
PlayVibrationOnceStrong();
break;
case VibrationType.OnceWeak:
PlayVibrationOnceWeak();
break;
case VibrationType.DoubleStrong:
PlayVibrationDoubleStrong();
break;
case VibrationType.DoubleWeak:
PlayVibrationDoubleWeak();
break;
case VibrationType.Triple:
PlayVibrationTriple();
break;
}
}
public static void PlayVibrationOnce(){
#if UNITY_EDITOR
#elif UNITY_IOS
_PlayVibrationOnce();
#elif UNITY_ANDROID
_VibrationAndroid(NativeUtils.vEffectClick, 20);
#endif
}
public static void PlayVibrationOnceStrong(){
#if UNITY_EDITOR
#elif UNITY_IOS
_PlayVibrationOnceStrong();
#elif UNITY_ANDROID
_VibrationAndroid(NativeUtils.vEffectHClick, 50);
#endif
}
public static void PlayVibrationOnceWeak(){
#if UNITY_EDITOR
#elif UNITY_IOS
_PlayVibrationOnceWeak();
#elif UNITY_ANDROID
_VibrationAndroid(NativeUtils.vEffectTick, 10);
#endif
}
public static void PlayVibrationDoubleStrong(){
#if UNITY_EDITOR
#elif UNITY_IOS
_PlayVibrationDoubleStrong();
#elif UNITY_ANDROID
_VibrationAndroid(NativeUtils.vEffectDClick, 80);
#endif
}
public static void PlayVibrationDoubleWeak(){
#if UNITY_EDITOR
#elif UNITY_IOS
_PlayVibrationDoubleWeak();
#elif UNITY_ANDROID
_VibrationAndroid(NativeUtils.vEffectOneShot, 100); // TODO:最適化
#endif
}
public static void PlayVibrationTriple(){
#if UNITY_EDITOR
#elif UNITY_IOS
_PlayVibrationTriple();
#elif UNITY_ANDROID
_VibrationAndroid(NativeUtils.vEffectOneShot, 200); // TODO:最適化
#endif
}
public static void ShowAlert(string title, string message){
#if UNITY_EDITOR
#elif UNITY_IOS
_showAlert(title, message);
#elif UNITY_ANDROID
// TODO:
#endif
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 1d79e45cfabba4cd3b1d6a9f7ab0bf2c
timeCreated: 1496659633
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

9
Plugins/iOS.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 2aac40ba60ff849ee88ec188ff5852ed
folderAsset: yes
timeCreated: 1505293985
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,22 @@
@interface ISN_DataConvertor : NSObject
+ (NSString*) charToNSString: (char*)value;
+ (const char *) NSStringToChar: (NSString *) value;
@end
@interface ISN_NativeUtility : NSObject
@property (strong) UIActivityIndicatorView *spinner;
+ (id) sharedInstance;
+ (int) majorIOSVersion;
+ (BOOL) IsIPad;
- (void) ISN_NativeLog: (NSString *) appId, ...;
- (void) ISN_SetLogState: (BOOL) appId;
@end

View File

@ -0,0 +1,137 @@
fileFormatVersion: 2
guid: 6387bda137dcb4b67ad4a0285193a98f
timeCreated: 1505294039
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
'': Any
second:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 1
Exclude Linux: 1
Exclude Linux64: 1
Exclude LinuxUniversal: 1
Exclude OSXIntel: 1
Exclude OSXIntel64: 1
Exclude OSXUniversal: 1
Exclude Win: 1
Exclude Win64: 1
Exclude iOS: 0
data:
first:
'': Editor
second:
enabled: 0
settings:
CPU: AnyCPU
OS: AnyOS
data:
first:
Android: Android
second:
enabled: 0
settings:
CPU: ARMv7
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
Facebook: Win
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Facebook: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Linux
second:
enabled: 0
settings:
CPU: x86
data:
first:
Standalone: Linux64
second:
enabled: 0
settings:
CPU: x86_64
data:
first:
Standalone: LinuxUniversal
second:
enabled: 0
settings:
CPU: None
data:
first:
Standalone: OSXIntel
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: OSXIntel64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: OSXUniversal
second:
enabled: 0
settings:
CPU: None
data:
first:
Standalone: Win
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
iPhone: iOS
second:
enabled: 1
settings:
CompileFlags:
FrameworkDependencies: Accounts;Social;
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,97 @@
#import <Foundation/Foundation.h>
#import "ISN_NativeCore.h"
#import "AppDelegateListener.h"
@implementation ISN_DataConvertor
+(NSString *) charToNSString:(char *)value {
if (value != NULL) {
return [NSString stringWithUTF8String: value];
} else {
return [NSString stringWithUTF8String: ""];
}
}
+ (const char *) NSStringToChar:(NSString *)value {
return [value UTF8String];
}
@end
@implementation ISN_NativeUtility
static bool logState = false;
static ISN_NativeUtility * na_sharedInstance;
+ (id)sharedInstance {
if (na_sharedInstance == nil) {
na_sharedInstance = [[self alloc] init];
}
return na_sharedInstance;
}
+ (BOOL) IsIPad {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return true;
} else {
return false;
}
}
+ (int) majorIOSVersion {
NSArray *vComp = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
return [[vComp objectAtIndex:0] intValue];
}
-(void) ISN_SetLogState:(BOOL)state {
logState = state;
}
-(void) ISN_NativeLog:(NSString *)msg, ... {
if(logState) {
va_list argumentList;
va_start(argumentList, msg);
NSString *message = [[NSString alloc] initWithFormat:msg arguments:argumentList];
// clean up
va_end(argumentList);
NSLog(@"ISN_NativeLog: %@", message);
}
}
- (CGFloat) GetW {
UIViewController *vc = UnityGetGLViewController();
bool IsLandscape = true;
#if !TARGET_OS_TV
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
IsLandscape = true;
} else {
IsLandscape = false;
}
#endif
CGFloat w;
if(IsLandscape) {
w = vc.view.frame.size.height;
} else {
w = vc.view.frame.size.width;
}
NSArray *vComp = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[vComp objectAtIndex:0] intValue] >= 8) {
w = vc.view.frame.size.width;
}
return w;
}
@end

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 2b48a13e4a3f24b7c9817beafda29890
timeCreated: 1505294039
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
'': Any
second:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 1
Exclude Linux: 1
Exclude Linux64: 1
Exclude LinuxUniversal: 1
Exclude OSXIntel: 1
Exclude OSXIntel64: 1
Exclude OSXUniversal: 1
Exclude Win: 1
Exclude Win64: 1
Exclude iOS: 0
data:
first:
'': Editor
second:
enabled: 0
settings:
CPU: AnyCPU
OS: AnyOS
data:
first:
Android: Android
second:
enabled: 0
settings:
CPU: ARMv7
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
Facebook: Win
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Facebook: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Linux
second:
enabled: 0
settings:
CPU: x86
data:
first:
Standalone: Linux64
second:
enabled: 0
settings:
CPU: x86_64
data:
first:
Standalone: OSXIntel
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: OSXIntel64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Win
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
iPhone: iOS
second:
enabled: 1
settings:
CompileFlags:
FrameworkDependencies: Accounts;Social;
data:
first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,131 @@
fileFormatVersion: 2
guid: 3e73def94b97c4038a468691abc7cd6d
timeCreated: 1505293997
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
'': Any
second:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 1
Exclude Linux: 1
Exclude Linux64: 1
Exclude LinuxUniversal: 1
Exclude OSXIntel: 1
Exclude OSXIntel64: 1
Exclude OSXUniversal: 1
Exclude Win: 1
Exclude Win64: 1
Exclude iOS: 0
data:
first:
'': Editor
second:
enabled: 0
settings:
CPU: AnyCPU
OS: AnyOS
data:
first:
Android: Android
second:
enabled: 0
settings:
CPU: ARMv7
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
data:
first:
Facebook: Win
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Facebook: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Linux
second:
enabled: 0
settings:
CPU: x86
data:
first:
Standalone: Linux64
second:
enabled: 0
settings:
CPU: x86_64
data:
first:
Standalone: OSXIntel
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: OSXIntel64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Win
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
iPhone: iOS
second:
enabled: 1
settings:
CompileFlags:
FrameworkDependencies: Accounts;Social;MessageUI;
data:
first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

13
Plugins/iOS/NativeUtils.h Normal file
View File

@ -0,0 +1,13 @@
@interface NativeUtils : NSObject
+ (NSString*) charToNSString: (char*)value;
+ (NativeUtils *)sharedInstance;
- (void) registerNotification;
- (void) scheduleNotification: (int) triggerInSeconds message: (NSString*) message alarmId:(NSString *)alarmId;
- (void) cancelAllNotifications;
@end

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 27a2f26e8e9c34413992e9f33f3cc1c6
timeCreated: 1496660244
licenseType: Free
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

209
Plugins/iOS/NativeUtils.mm Normal file
View File

@ -0,0 +1,209 @@
//
// NativeUtils.mm
// Unity-iPhone
//
// Created by Suto Atsushi on 2016/06/05.
//
//
#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>
#import <Social/Social.h>
#import "UnityAppController.h"
#import <AudioToolbox/AudioToolbox.h>
#import "NativeUtils.h"
#include <sys/sysctl.h>
#import <UserNotifications/UserNotifications.h>
@implementation NativeUtils
+(NSString *) charToNSString:(char *)value
{
if (value != NULL)
{
return [NSString stringWithUTF8String: value];
}
else
{
return [NSString stringWithUTF8String: ""];
}
}
static NativeUtils *_sharedInstance = nil;
+ (NativeUtils *) sharedInstance
{
if (!_sharedInstance)
{
_sharedInstance = [[NativeUtils alloc] init];
}
return _sharedInstance;
}
-(void) registerNotification
{
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:
(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert ) completionHandler:^(BOOL granted, NSError *_Nullable error) {
if (granted) {
}
}];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
-(void) scheduleNotification: (int) triggerInSeconds message: (NSString*) message alarmId:(NSString *)alarmId
{
// インスタンス生成
UNMutableNotificationContent *unMutableNotice = [UNMutableNotificationContent new];
unMutableNotice.body = message;
unMutableNotice.sound = [UNNotificationSound defaultSound];
UNTimeIntervalNotificationTrigger *triger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:triggerInSeconds repeats:NO];
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:alarmId content:unMutableNotice trigger:triger];
[UNUserNotificationCenter.currentNotificationCenter addNotificationRequest:request withCompletionHandler:nil];
}
- (void) cancelAllNotifications
{
[[UNUserNotificationCenter currentNotificationCenter] removeAllPendingNotificationRequests];
[[UNUserNotificationCenter currentNotificationCenter] removeAllDeliveredNotifications];
}
- (void) showAlert: (NSString*) title message: (NSString*) message
{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
// addActionした順に左から右にボタンが配置されます
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
}]];
[[[[UIApplication sharedApplication]keyWindow] rootViewController] presentViewController:alertController animated:YES completion:nil];
}
@end
extern "C"{
int _getHeight()
{
CGRect cr = [[UIScreen mainScreen] nativeBounds];
return cr.size.height;
}
int _getWidth()
{
CGRect cr = [[UIScreen mainScreen] nativeBounds];
return cr.size.width;
}
int _getPointHeight()
{
CGRect cr = [[UIScreen mainScreen] bounds];
return cr.size.height;
}
int _getPointWidth()
{
CGRect cr = [[UIScreen mainScreen] bounds];
return cr.size.width;
}
bool _enableReviewWindow()
{
return [SKStoreReviewController class];
}
void _reviewWindow(char* appid)
{
if([SKStoreReviewController class]){
[SKStoreReviewController requestReview] ;
}else{
NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%@&action=write-review",[NativeUtils charToNSString:appid]];
NSURL *URL = [NSURL URLWithString:str];
[[UIApplication sharedApplication] openURL:URL];
}
}
long _systemClockTime()
{
struct timeval boottime;
int mib[2] = {CTL_KERN, KERN_BOOTTIME};
size_t size = sizeof(boottime);
int rc = sysctl(mib, 2, &boottime, &size, NULL, 0);
if (rc != 0) {
return 0;
}
return (long)(time(NULL) - boottime.tv_sec);
}
bool _canOpenTwitter()
{
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitter://"]])
{
return true;
}
return false;
}
bool _canOpenFacebook()
{
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]])
{
return true;
}
return false;
}
void _registerNotification()
{
[[NativeUtils sharedInstance] registerNotification];
}
void _scheduleNotification (int triggerInSeconds, char* message, char* alarmId)
{
[[NativeUtils sharedInstance] scheduleNotification:triggerInSeconds message:[NativeUtils charToNSString:message] alarmId:[NativeUtils charToNSString:alarmId]];
}
void _cancelAllNotifications()
{
[[NativeUtils sharedInstance] cancelAllNotifications];
}
void _PlayVibration(int id)
{
AudioServicesPlaySystemSound(id);
}
void _PlayVibrationOnce(){
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:(UIImpactFeedbackStyleMedium)];
[generator impactOccurred];
}
void _PlayVibrationOnceStrong(){
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:(UIImpactFeedbackStyleHeavy)];
[generator impactOccurred];
}
void _PlayVibrationOnceWeak(){
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:(UIImpactFeedbackStyleLight)];
[generator impactOccurred];
}
void _PlayVibrationDoubleStrong(){
UINotificationFeedbackGenerator *generator = [[UINotificationFeedbackGenerator alloc] init];
[generator notificationOccurred: UINotificationFeedbackTypeSuccess];
}
void _PlayVibrationDoubleWeak(){
UINotificationFeedbackGenerator *generator = [[UINotificationFeedbackGenerator alloc] init];
[generator notificationOccurred: UINotificationFeedbackTypeWarning];
}
void _PlayVibrationTriple(){
UINotificationFeedbackGenerator *generator = [[UINotificationFeedbackGenerator alloc] init];
[generator notificationOccurred: UINotificationFeedbackTypeError];
}
void _showAlert(char* title, char* message)
{
[[NativeUtils sharedInstance] showAlert:[NativeUtils charToNSString:title] message:[NativeUtils charToNSString:message]];
}
}

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 4383d909a0f3e411c9de1bb3b60ad6e4
timeCreated: 1496660244
licenseType: Free
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
'': Any
second:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 1
Exclude Linux: 1
Exclude Linux64: 1
Exclude LinuxUniversal: 1
Exclude OSXIntel: 1
Exclude OSXIntel64: 1
Exclude OSXUniversal: 1
Exclude Win: 1
Exclude Win64: 1
Exclude iOS: 0
data:
first:
Android: Android
second:
enabled: 0
settings:
CPU: ARMv7
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
data:
first:
Facebook: Win
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Facebook: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Linux
second:
enabled: 0
settings:
CPU: x86
data:
first:
Standalone: Linux64
second:
enabled: 0
settings:
CPU: x86_64
data:
first:
Standalone: OSXIntel
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: OSXIntel64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Win
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
Standalone: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
data:
first:
iPhone: iOS
second:
enabled: 1
settings:
CompileFlags:
FrameworkDependencies: Social;StoreKit;
userData:
assetBundleName:
assetBundleVariant:

Some files were not shown because too many files have changed in this diff Show More