public static void Build_Action(string unitPath) { DirectoryInfo unitDirectory = new DirectoryInfo(unitPath); unitName = unitDirectory.Name; typeName = "Effect"; Dictionary <string, List <SpriteAnimationClip> > actionDictionary = new Dictionary <string, List <SpriteAnimationClip> >(); int angle = 0; string actionName = "idle"; bool flip = false; List <SpriteAnimationClip> clips = new List <SpriteAnimationClip>(); actionDictionary.Add(actionName, clips); SpriteAnimationClip clip = BuildClip(unitDirectory, angle, actionName, loop, flip); clips.Add(clip); List <AvatarAction> actions = BuildActions(actionDictionary); AvatarData avatar = BuildAvatarData(actions); BuildPrefab(avatar); }
public new SpriteAnimationClip GetClip(string clipName) { Debug.Log(String.Format("Getting SpriteAnimationClip {0}", clipName)); SpriteAnimationClip theClip = orig_GetClip(clipName); return(orig_GetClip(clipName)); }
public void LoadCustomAnimClips() { Debug.Log("LOADING THE ANIM CLIPS!!!!!"); List <string> paths = PathMan.GetModFiles(PathMan.ANIM_CLIPS_PATH, ".png"); Dictionary <string, AnimClipInfo> clipInfos = Utils.GetAnimClipInfos(); AnimClipInfo defaultClipInto = new AnimClipInfo(); // if it is not defined in the XML // Pattern to be considered a frame: alphanumeric "ID" portion and the frame number, seperated with an underscore. Regex frameMatchRegex = new Regex(@"(\w+)_([0-9]+)", RegexOptions.IgnoreCase); // The key is the id of the anim clip, the value is the list of frames for that clip. Dictionary <string, List <AnimClipFrame> > animClips = new Dictionary <string, List <AnimClipFrame> >(); foreach (string path in paths) { Match result = frameMatchRegex.Match(path); if (result.Success) { AnimClipFrame newAnimClipFrame = new AnimClipFrame(path, result.Groups[1].Value, int.Parse(result.Groups[2].Value)); // Make a new list for the anim clip key if it doesn't exist already if (!animClips.ContainsKey(newAnimClipFrame.key)) { animClips[newAnimClipFrame.key] = new List <AnimClipFrame>(); } animClips[newAnimClipFrame.key].Add(newAnimClipFrame); } } foreach (string key in animClips.Keys) { Debug.Log(String.Format("Getting files for anim clip {0} ", key)); List <AnimClipFrame> currentFrames = animClips[key]; // sorting is required since the files could be like // Sprite_9.png, Sprite_10.png (the 10 would be first in lexographic sort!) currentFrames.Sort(); // Make an anim clip now. List <string> fullPaths = new List <string>(); foreach (AnimClipFrame clip in currentFrames) { fullPaths.Add(clip.fullPath); } AnimClipInfo newInfo; if (!clipInfos.ContainsKey(key)) { newInfo = defaultClipInto; } else { newInfo = clipInfos[key]; } SpriteAnimationClip newClip = Utils.LoadNewSpriteAnimationClip(fullPaths.ToArray(), newInfo); this.spriteAnimClips[key] = newClip; Debug.Log("Done with this anim clip!"); } }
private void Parse(string atlasName, LuaTable animationCfg) { List <Sprite> spriteList = ResourceManager.Instance.LoadSpriteAtlas(atlasName); Dictionary <string, SpriteAnimationClip> clipMap = new Dictionary <string, SpriteAnimationClip>(); for (int i = 0; i < spriteList.Count; i++) { if (spriteList[i] == null) { continue; } string[] names = spriteList[i].name.Split('_'); string action = names[0]; string dir = names[1]; string index = names[2]; string clipName = GetClipName(action, dir); SpriteAnimationClip clip = null; if (!clipMap.TryGetValue(clipName, out clip)) { clip = new SpriteAnimationClip(); clipMap[clipName] = clip; clip.Name = clipName; if (animationCfg != null && animationCfg.ContainsKey <string>(action)) { clip.Length = animationCfg.GetInPath <float>(string.Format("{0}.clip_length", action)); if (animationCfg.GetInPath <string>(string.Format("{0}.loop", action)) == "once") { clip.WrapMode = SpriteAnimation.AnimationWrapMode.eOnce; } else { clip.WrapMode = SpriteAnimation.AnimationWrapMode.eLoop; } } else { Debuger.LogError("common", "ArmySpriteAnimation parse animationCfg have problem!"); clip.Length = 1; clip.WrapMode = SpriteAnimation.AnimationWrapMode.eLoop; } clip.SpriteList = new List <Sprite>(); } clip.SpriteList.Add(spriteList[i]); } List <SpriteAnimationClip> clipList = new List <SpriteAnimationClip>(); foreach (var item in clipMap) { clipList.Add(item.Value); } Animation = gameObject.AddComponent <SpriteAnimation>(); Animation.Init(clipList); }
void OnGUI() { EditorGUILayout.BeginVertical(); { actorName = EditorGUILayout.TextField("角色名称", actorName); actionName = EditorGUILayout.TextField("动作名称", actionName); angle = EditorGUILayout.FloatField("面向角度", angle); flip = EditorGUILayout.Toggle("水平翻转", flip); if (GUILayout.Button("生成")) { List <Sprite> sprites = new List <Sprite>(); foreach (Object obj in Selection.objects) { Sprite sprite = obj as Sprite; if (sprite == null) { string assetPath = AssetDatabase.GetAssetPath(obj); sprite = AssetDatabase.LoadAssetAtPath <Sprite>(assetPath); } if (sprite != null) { sprites.Add(sprite); } } string filename = actorName + "_" + actionName + "_" + angle; string path = EditorUtility.SaveFilePanelInProject("Save", filename, "asset", "message"); if (path != "") { SpriteAnimationClip clip = ScriptableObject.CreateInstance <SpriteAnimationClip>(); clip.flip = flip; clip.angle = angle; clip.actionName = actionName; sprites.Sort( delegate(Sprite s1, Sprite s2) { return(s1.name.CompareTo(s2.name)); } ); clip.frames = sprites.ToArray(); AssetDatabase.CreateAsset(clip, path); AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); Selection.activeObject = clip; } } } EditorGUILayout.EndVertical(); }
void OnClipActive(SpriteAnimationClip clip) { if (currClip == clip) { return; } InitClips(); //Debug.LogError("Active:" + clip.name); currClip = clip; currClipSprites = clip.sprites; spriteIndex = 0; currTime = -1; }
void OnClipActive(SpriteAnimationClip clip) { if(currClip == clip) { return; } InitClips(); //Debug.LogError("Active:" + clip.name); currClip = clip; currClipSprites = clip.sprites; spriteIndex = 0; currTime = -1; }
public static SpriteAnimationClip LoadNewSpriteAnimationClip(string[] FilePaths, AnimClipInfo theInfo) { Debug.Log("Hi, welcome to LoadNewSpriteAnimationClip!"); List <Sprite> sprites = new List <Sprite>(); List <float> numbers = new List <float>(); for (int i = 0; i < FilePaths.Length; i++) { numbers.Add((float)i); Debug.Log(String.Format("FRAME {0} IMAGE {1}", i, FilePaths[i])); sprites.Add(LoadNewSprite(FilePaths[i])); } SpriteAnimationClip newClip = new SpriteAnimationClip(theInfo.keyFrameLength, numbers.ToArray(), sprites.ToArray()); return(newClip); }
public static void Build_Color_Level(string unitPath) { DirectoryInfo unitDirectory = new DirectoryInfo(unitPath); unitName = unitDirectory.Name; typeName = unitDirectory.Parent.Name; Dictionary <string, List <SpriteAnimationClip> > actionDictionary = new Dictionary <string, List <SpriteAnimationClip> >(); foreach (DirectoryInfo colorDirectory in unitDirectory.GetDirectories()) { int i = 0; int count = colorDirectory.GetDirectories().Length; foreach (DirectoryInfo levelDirectory in colorDirectory.GetDirectories()) { i++; string actionName = colorDirectory.Name + "_" + levelDirectory.Name; int angle = 0; bool loop = false; bool flip = false; List <SpriteAnimationClip> clips = null; if (!actionDictionary.TryGetValue(actionName, out clips)) { clips = new List <SpriteAnimationClip>(); actionDictionary.Add(actionName, clips); } if (EditorUtility.DisplayCancelableProgressBar("Build_Level " + typeName + "/" + unitName + "/" + actionName, i + "/" + count, (float)i / (float)count)) { break; } SpriteAnimationClip clip = BuildClip(levelDirectory, angle, actionName, loop, flip); clip.loop = clip.frames.Length > 1; clips.Add(clip); } } List <AvatarAction> actions = BuildActions(actionDictionary); AvatarData avatar = BuildAvatarData(actions); BuildPrefab(avatar); }
public static SpriteAnimationClip BuildClip(DirectoryInfo directory, int angle, string actionName, bool loop = false, bool flip = false) { FileInfo[] files = directory.GetFiles(fileFormat); List <Sprite> sprites = new List <Sprite>(); foreach (FileInfo file in files) { Sprite sprite = AssetDatabase.LoadAssetAtPath <Sprite>(DataPathToAssetPath(file.FullName)); sprites.Add(sprite); } sprites.Sort( delegate(Sprite s1, Sprite s2) { return(s1.name.CompareTo(s2.name)); } ); SpriteAnimationClip clip = ScriptableObject.CreateInstance <SpriteAnimationClip>(); clip.frames = sprites.ToArray(); clip.actionName = actionName; clip.angle = angle; clip.loop = loop; clip.flip = flip; string path = SpriteAnimationPath + "/" + typeName + "/" + unitName + ".asset"; CheckPath(path); AssetDatabase.CreateAsset(clip, path); AssetDatabase.SaveAssets(); return(clip); }
/// <summary> /// Initialize to implement per main type. /// </summary> override public void Initialize() { // create the scene GameScene scene = new GameScene(); // create camera object camera = new GameObject(); Camera cameraComponent = new Camera(); cameraComponent.CameraType = CameraType.Orthographic; Point screenSize = Managers.GraphicsManager.ViewportSize; float ratio = (float)screenSize.X / (float)screenSize.Y; cameraComponent.ForceScreenSize = new Point((int)(50f * ratio), (int)(25f * ratio)); camera.AddComponent(cameraComponent); camera.SceneNode.Position = new Vector3(50, 100, 150); camera.SceneNode.RotationX = -(float)System.Math.PI * 0.25f; camera.Parent = scene.Root; // create a tilemap fsor the floor TileMap tilemap = scene.Root.AddComponent(new TileMap(Vector2.One * 10f, 10)) as TileMap; // create floor material BasicMaterial tilesMaterial = new BasicMaterial(); tilesMaterial.Texture = Resources.GetTexture("game/floor"); tilesMaterial.TextureEnabled = true; tilesMaterial.SpecularColor = Color.Black; // create some floor tiles for (int i = 0; i < 10; ++i) { for (int j = 0; j < 10; ++j) { GameObject tile = tilemap.GetTile(new Point(i, j)); ShapeRenderer tileModel = tile.AddComponent(new ShapeRenderer(ShapeMeshes.Plane)) as ShapeRenderer; tileModel.SetMaterial(tilesMaterial); tile.SceneNode.Scale = Vector3.One * 5f; tile.SceneNode.RotationX = (float)System.Math.PI * -0.5f; } } // create random grass sprites System.Random rand = new System.Random(); for (int i = 0; i < 100; ++i) { GameObject grassObj = new GameObject("grass"); grassObj.SceneNode.Scale = Vector3.One * 5; grassObj.SceneNode.Position = new Vector3((float)rand.NextDouble() * 90f, 2.5f, (float)rand.NextDouble() * 90f); grassObj.AddComponent(new BillboardRenderer("game/grass", faceCamera: false)); grassObj.Parent = scene.Root; } // create a tree GameObject treeObj = new GameObject("tree"); treeObj.SceneNode.Scale = Vector3.One * 30; treeObj.SceneNode.Position = new Vector3(50, 15f, 25); treeObj.AddComponent(new BillboardRenderer("game/tree", faceCamera: false)); treeObj.Parent = scene.Root; // create a spritesheet with animations (8 steps on X axis, 4 directions on Y axis) SpriteSheet sp = new SpriteSheet(new Point(8, 4)); // add character sprite GameObject spriteObj = new GameObject("player"); spriteObj.SceneNode.Scale = Vector3.One * 10; spriteObj.SceneNode.Position = new Vector3(50, 5, 50); spriteObj.AddComponent(new SpriteRenderer(sp, "game/rpg_sprite_walk", faceCamera: false)); spriteObj.Parent = scene.Root; // define walking animation and play on character SpriteAnimationClip animationClip = new SpriteAnimationClip(startStep: 0, endStep: 7, speed: 10f, loop: true); spriteObj.GetComponent <SpriteRenderer>().PlayAnimation(animationClip); // set scene GeonBitMain.Instance.Application.LoadScene(scene); }
/// <summary> /// Play animation clip. /// </summary> /// <param name="clip">Animation clip to play.</param> /// <param name="speed">Animation playing speed.</param> public void PlayAnimation(SpriteAnimationClip clip, float speed = 1f) { _entity.PlayAnimation(clip, speed); }
public void Stop() { currClip = null; currClipSprites = null; }
public static void Build_Angle_Action(string unitPath) { DirectoryInfo unitDirectory = new DirectoryInfo(unitPath); unitName = unitDirectory.Name; typeName = unitDirectory.Parent.Name; Dictionary <string, List <SpriteAnimationClip> > actionDictionary = new Dictionary <string, List <SpriteAnimationClip> >(); foreach (DirectoryInfo angleDirectory in unitDirectory.GetDirectories()) { int i = 0; int count = angleDirectory.GetDirectories().Length; foreach (DirectoryInfo actionDirectory in angleDirectory.GetDirectories()) { int angle = 0; if (angleDirectory.Name == "back") { angle = backAngle; } else if (angleDirectory.Name == "front") { angle = frontAngle; } else { angle = Convert.ToInt32(angleDirectory.Name); } string actionName = actionDirectory.Name; bool loop = ArrayUtility.IndexOf <string>(loopActions, actionName) != -1; bool flip = false; List <SpriteAnimationClip> clips = null; if (!actionDictionary.TryGetValue(actionName, out clips)) { clips = new List <SpriteAnimationClip>(); actionDictionary.Add(actionName, clips); } i++; if (EditorUtility.DisplayCancelableProgressBar("Build_Angle_Action " + typeName + "/" + unitName + "/" + actionName, i + "/" + count, (float)i / (float)count)) { break; } SpriteAnimationClip clip = BuildClip(actionDirectory, angle, actionName, loop, flip); clips.Add(clip); if (needFlip) { if (angle != 0 && angle != 180) { angle = 360 - angle; flip = true; clip = BuildClip(actionDirectory, angle, actionName, loop, flip); clips.Add(clip); } } } } List <AvatarAction> actions = BuildActions(actionDictionary); AvatarData avatar = BuildAvatarData(actions); BuildPrefab(avatar); }