Oh ya, that one in the mail works.
and using all the three commands mentioned above also works.
Thank you
hmm, I wonder what are the difference between those three commands (nimbus,windows,motif), I didn't notice any visual difference.
Oh ya, that one in the mail works.
and using all the three commands mentioned above also works.
Thank you
hmm, I wonder what are the difference between those three commands (nimbus,windows,motif), I didn't notice any visual difference.
sorry I should have tried this and write it in my previous post.
But I went to try to use default gnome theme (adawaita) then restart gnome. but still fail to run.
WM Theme: Adwaita
Theme: Adwaita [GTK2/3]
Icons: Adwaita [GTK2/3]
Hello,
The GTK theme I'm using is Adementary Dark: https://github.com/hrdwrrsk/adementary-theme
OS: Manjaro Linux x86_64
Host: X456UQ 1.0
DE: GNOME 40.5
WM: Mutter
WM Theme: Adementary-dark
Theme: Adementary-dark [GTK2/3]
Icons: Suru++-Dark [GTK2/3]
for the command you mentioned, motif works well, however nimbus and windows fail.
(each log file attached)
~/.../Spine/Spine >>> ./Spine.sh
---
laf nimbus [156]
Spine Launcher 4.1.00
Esoteric Software LLC (C) 2013-2021 | http://esotericsoftware.com
Linux amd64 5.10.70-1-MANJARO
---
Sorry, Spine has encountered a fatal error.
Antivirus software may crash Spine.
Please disable any antivirus software or safelist Spine.
---
#
# A fatal error has occurred:
#
# SIGSEGV (0xb) at pc=0x00007f106ab620bc, pid=12364, tid=12391
# Problematic frame:
# C 0x00007f106ab620bc
#
# An error report file with more information has been saved at:
# /home/ifrit/.spine/spine.log
#
# To report this problem please contact us at:
# contact@esotericsoftware.com
#
~/.../Spine/Spine >>> ./Spine.sh
---
laf windows [1]
Spine Launcher 4.1.00
Esoteric Software LLC (C) 2013-2021 | http://esotericsoftware.com
Linux amd64 5.10.70-1-MANJARO
---
Sorry, Spine has encountered a fatal error.
Antivirus software may crash Spine.
Please disable any antivirus software or safelist Spine.
---
#
# A fatal error has occurred:
#
# SIGSEGV (0xb) at pc=0x00007f373eace0bc, pid=12810, tid=12842
# Problematic frame:
# C 0x00007f373eace0bc
#
# An error report file with more information has been saved at:
# /home/ifrit/.spine/spine.log
#
# To report this problem please contact us at:
# contact@esotericsoftware.com
#
Haven't been using spine in a long time.
I downloaded the new package, but it failed to run.
~/.../Spine/Spine >>> ./Spine.sh [127]
Spine Launcher 4.1.00
Esoteric Software LLC (C) 2013-2021 | http://esotericsoftware.com
Linux amd64 5.10.70-1-MANJARO
---
Sorry, Spine has encountered a fatal error.
Antivirus software may crash Spine.
Please disable any antivirus software or safelist Spine.
---
#
# A fatal error has occurred:
#
# SIGSEGV (0xb) at pc=0x00007f4bdd2d30bc, pid=5603, tid=5633
# Problematic frame:
# C 0x00007f4bdd2d30bc
#
# An error report file with more information has been saved at:
# /home/ifrit/.spine/spine.log
#
# To report this problem please contact us at:
# contact@esotericsoftware.com
#
spine.log attached.
However, if I ran old spine package I downloaded long ago, it works just fine.
./Spine.sh
Spine Launcher 3.8.97
Esoteric Software LLC (C) 2013-2020 | http://esotericsoftware.com
Linux amd64 5.10.70-1-MANJARO
Update available: Spine 4.0.45
Starting: Spine 3.8.99
Spine 3.8.99 Essential
Licensed to: *****, *****
Intel, Mesa Intel(R) HD Graphics 520 (SKL GT2), 4.6 (Compatibility Profile) Mesa 21.2.3
Started.
Harald wroteJust add a
using Spine;
statement at the top, it does not find
Spine.TrackEntry
.
ah i see, thank you. It doesn't throw error now but...
Something weird happened.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Spine.Unity;
using Spine;
public class PlayerNormalAttack : Skill
{
int attackNumber = 0;
bool at_state = false;
public Skill nextAttack;
public override void EnterAttack()
{
Debug.Log("EXECUTE ATTACK");
boss.set_animation(0,"attack1",false);
attackNumber = 1;
at_state = true;
}
void Awake()
{
boss.animationState.Complete += OnSpineAnimationComplete; // << THIS ONE
}
public void OnSpineAnimationComplete(TrackEntry trackEntry)
{
}
}
When I comment out/delete boss.animationState.Complete += OnSpineAnimationComplete;
it sets animation properly. But when I add/ uncomment it, it doesn't change animation and it keep repeating Debug.Log("EXECUTE ATTACK")
over and over again.
hmm that doesn't make sense to me. I can't comprehend.
this is the Character
class:
Somehow currentState
keep showing States.Stand
while nextState
keep showing States.Attack
. My guess is maybe it keep entering stand > attack > stand > attack but I don't know why. I never write any script that change state to States.Stand
when in States.Attack
. @.@
Or maybe because the script stopped executing... It didn't notify that it changed currentState.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Spine.Unity;
public class Character : MonoBehaviour
{
// Animation
public bool autoFacing = false;
public Vector2 facing;
public Vector2 targeting;
public GameObject puppet;
SkeletonAnimation skeletonAnimation;
public Spine.AnimationState animationState;
//Skeleton skeleton;
// Character Property
public float moveSpeed = 4f;
public Rigidbody2D rb;
// Skill slot
public Skill[] attackSlot = new Skill[1];
// Energy System
public bool unlimited_energy = false;
int energy;
int max_energy = 1000;
int energy_regeneration = 10;
int adrenaline_level = 10;
float regen_delay = 1f;
// State property (used for character movement)
float duration = 0f; // used in Evade state.
Vector2 freezed_movement; // used in Evade state.
int currentAttack = 0; // used in Attack state.
// Character Controller / Input
public Vector2 movement;
public bool dash = false;
public int attack = -1; // -1 = stop attacking. 0~.. index for attackSlot
public bool block = false;
//StateMachine
int previousState;
int currentState;
public int nextState;
// States
public enum States:int {
Stand,
Run,
Evade,
Sprint,
Attack, //not implemented yet
Block
};
void Start()
{
rb = GetComponent<Rigidbody2D>();
skeletonAnimation = puppet.GetComponent<SkeletonAnimation>();
animationState = skeletonAnimation.AnimationState;
//skeleton = skeletonAnimation.skeleton;
}
void FixedUpdate()
{
// Energy system
regen_delay -= Time.fixedDeltaTime;
if (regen_delay <= 0f)
{
regen_delay += 0.1f;
if (energy != max_energy)
{
energy = Mathf.Clamp(energy + energy_regeneration,0,max_energy);
//Debug.Log("Energy : "+energy.ToString());
}
}
// State Method
if (currentState != nextState)
{
ExitState(currentState);
previousState = currentState;
EnterState(nextState);
currentState = nextState;
Debug.Log("Enter state: "+nextState.ToString());
}
ProcessState(currentState,Time.fixedDeltaTime);
}
bool useEnergy(int amount)
{
if (hasEnoughEnergy(amount)){
energy -= amount;
return true;
} else {
return false;
}
}
bool hasEnoughEnergy(int amount)
{
if (energy >= amount){
return true;
}
else {
return false;
}
}
void move(Vector2 amount) // to move character normally
{
rb.MovePosition( rb.position + (amount*Time.fixedDeltaTime) );
}
void push(Vector2 amount) // to move character in one frame.
{
}
void refresh_facing() // for puppet
{
transform.localScale = new Vector3(Mathf.Sign(facing.x),1,1);
}
void set_facing(float direction) // for puppet
{
transform.localScale = new Vector3(Mathf.Sign(direction),1,1);
}
public void set_animation(int track,string animation, bool loop)
{
if(skeletonAnimation.AnimationState.GetCurrent(track) == null || !string.Equals(skeletonAnimation.AnimationState.GetCurrent(track).Animation.Name,animation))
{
skeletonAnimation.AnimationState.SetAnimation(track,animation,loop);
}
}
void EnterState(int state)
{
switch (state)
{
case (int)States.Stand:
set_animation(0,"stand",true);
break;
case (int)States.Run:
set_animation(0,"run",true);
break;
case (int)States.Sprint:
set_animation(0,"dash",true);
break;
case (int)States.Evade:
set_facing(movement.x);
//skeletonAnimation.AnimationState.TimeScale = 2f;
set_animation(0,"roll",false);
duration = 1f;
freezed_movement = movement.normalized;
break;
case (int)States.Attack:
attackSlot[currentAttack].EnterAttack();
break;
case (int)States.Block:
set_animation(0,"block",false);
break;
default:
break;
}
}
void ProcessState(int state,float delta)
{
switch (state)
{
case (int)States.Stand:
if ( (movement.x != 0f) || (movement.y != 0f) )
{
nextState = (int)States.Run;
}
else if (block)
{
nextState = (int)States.Block;
}
else if (attack != -1)
{
nextState = (int)States.Attack;
}
if (autoFacing)
{
refresh_facing();
}
break;
case (int)States.Run:
//Debug.Log(skeletonAnimation.AnimationState.GetCurrent(0));
move(movement.normalized*moveSpeed);
if ( (movement.x == 0f) && (movement.y == 0f) )
{
nextState = (int)States.Stand;
}
else if (dash)
{
nextState = (int)States.Evade;
}
else if (block)
{
nextState = (int)States.Block;
}
if (autoFacing)
{
if (Mathf.Sign(movement.x) == -Mathf.Sign(facing.x))
{
set_animation(0,"run_back",true);
}
else if (Mathf.Sign(movement.x) == Mathf.Sign(facing.x))
{
set_animation(0,"run",true);
}
refresh_facing();
}
break;
case (int)States.Evade:
duration -= Time.fixedDeltaTime;
//Vector2 amount = freezed_movement[i]7f[/i]duration*moveSpeed;
Vector2 amount = (freezed_movement[i]5f[/i]moveSpeed)[i]duration[/i]duration;
move(amount);
if (duration <= 0f)
{
nextState = (int)States.Run;
if (dash)
{
nextState = (int)States.Sprint;
}
else
{
nextState = (int)States.Run;
}
}
break;
case (int)States.Sprint:
move(movement.normalized[i]moveSpeed[/i]2f);
if ( (movement.x == 0f) && (movement.y == 0f) )
{
nextState = (int)States.Stand;
}
if (movement.x != 0)
{
set_facing(movement.x);
}
break;
case (int)States.Attack:
attackSlot[currentAttack].ProcessAttack();
break;
case (int)States.Block:
if (!block)
{
nextState = (int)States.Stand;
}
break;
default:
break;
}
}
void ExitState(int state)
{
switch (state)
{
case (int)States.Evade:
skeletonAnimation.AnimationState.TimeScale = 1f;
break;
case (int)States.Attack:
attackSlot[currentAttack].ExitAttack();
break;
default:
break;
}
}
}
I will try to use other method for the time being... :confused:
EDIT
I also tried
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Spine.Unity;
using Spine;
public class PlayerNormalAttack : Skill
{
int attackNumber = 0;
bool at_state = false;
public Skill nextAttack;
public override void EnterAttack()
{
Debug.Log("EXECUTE ATTACK");
boss.set_animation(0,"attack1",false);
attackNumber = 1;
at_state = true;
}
public override void ProcessAttack()
{
Debug.Log("processing");
}
// copas
[SpineEvent] public string slashEventName = "slash";
// copas
void Awake()
{
// http://esotericsoftware.com/spine-unity-events Start
var skeletonAnimation = GetComponent<SkeletonAnimation>();
if (skeletonAnimation == null) return;
skeletonAnimation.AnimationState.Event += HandleEvent;
skeletonAnimation.AnimationState.Start += delegate (TrackEntry trackEntry) {
Debug.Log(string.Format("track {0} started a new animation.", trackEntry.TrackIndex));
};
skeletonAnimation.AnimationState.End += delegate {
// ... or choose to ignore its parameters.
Debug.Log("An animation ended!");
};
// http://esotericsoftware.com/spine-unity-events Start
}
void HandleEvent(TrackEntry trackEntry, Spine.Event e)
{
Debug.Log("SPINE EVENT");
if (e.Data.Name == slashEventName) {
Debug.Log("Play a footstep sound!");
}
}
}
but this does not call either Debug.Log("An animation ended!")
, Debug.Log("Play a footstep sound!")
, and Debug.Log(string.Format("track {0} started a new animation.", trackEntry.TrackIndex))
at all.
If I used Start()
instead of Awake()
like in the guide on that page. The same with the earlier problem happened, the one that had multiple "EXECUTE ATTACK" messages.
excuse me, what does this error mean?
No overload for 'OnSpineAnimationComplete' matches delegate 'AnimationState.TrackEntryDelegate' [Assembly-CSharp]
The type or namespace name 'TrackEntry' could not be found (are you missing a using directive or an assembly reference?) [Assembly-CSharp]
here is my script. (the variable boss
is where I save spine animation references. and set animation
is the thing I ask about yesterday which is now working.)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Spine.Unity;
public class PlayerNormalAttack : Skill
{
int attackNumber = 0;
public Skill nextAttack;
public override void EnterAttack()
{
boss.set_animation(0,"attack1",false);
attackNumber = 1;
}
void Awake()
{
boss.animationState.Complete += OnSpineAnimationComplete;
}
public void OnSpineAnimationComplete(TrackEntry trackEntry)
{
}
}
the skill class
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Skill : MonoBehaviour
{
// Start is called before the first frame update
public Character boss;
public int energyCost = 0;
void Start()
{
boss = GetComponent<Character>();
}
// Update is called once per frame
public virtual void EnterAttack(){}
public virtual void ProcessAttack(){}
public virtual void ExitAttack(){}
}
need some enlightment :wounded:
Deleting the earlier post because the attachment is messed up.
Excuse me, still newbie, was already done making some animation. Planning to make animation where bottom and upper movement is a separate animation then I realize, "wait a sec, the default pose is not right."
ANd when I tried to fix the default pose, the animation became weird looking. I never experienced something liked this, it works differently than other animation tools I used before.
I need enlightment on how to edit my default bose without breaking the already made animation.
I apologize that the attachment is not in a good order, I did not know how to embed attachment directly to post. Explanation are in the comment of the images.
On another note: does spine runtime able to run 2 different animations at the same time?
Erikari wroteif you are using Spine Essential, constraints are not available,
Ah I see, thank you.
Erikari wroteyou might finduseful to select both the bones then dragging them towards the target using the pose tool
Hmm interesting, it's... kind of useful. It can move multiple bone that are connected. Thank you for the tips mam.
excuse me, is there a way to make multiple bones to automatically scale and rotate to a targeted dot?
I'm trying to make bow animation with essential version. Let me know if the question is unclear.
I'm trying to make two selected bone on the right to target the one selected bone on the left.
Excuse me, in a bitmap animation software, usually I just draw in-between the weapon movement to create slash effect. But in spine we can't draw,... I wonder how to do a slash effect... :think:
I'm thinking of animating slash animation manually outside spine but I don't know the workflow on how to integrate it to spine animation. I can export for PNG sequence and spritesheet from the bitmap animation software I'm using.
I haven't found tutorial on this topic, if anyone have a link to that tutorial or anything similar, please let me know.
Thank you for your time. :grinteeth:
(do we have like spine discord server? for asking very short question :detective: )
edit: found unofficial one.
Nate wroteIt's up to you what name you'd like to use, but the email address should be valid so you get the email receipt. You can change your account information in the future, you'll just need to shoot us an email.
Ah, thank you for the answer sir. I'm not changing anything if I can use the software just fine. Glad to know I can put anything I want.
Nate wrotePeople don't know your real name at your workplace?
Mostly yes.
Excuse me, I apologize for this silly question, it's my first time buying software, I grow up with linux where everything is free, and if I bought software It's usually came from steam which is fairly easy to do.
What is the difference in the name inside account information and billing information? Can I use fake or made up name in the account information? Can we change the name and email later on?
It's said, "This name and email address is shown each time Spine is run." but I don't want people to read my real name at my workplace. Not paranoid, just personal preference.
warmanw wrote
Nate wrote
ah very nice. Thank you sir,
I would like to see it as well. Currently using trial version to test stuffs out. I mainly using godot engine and animate there. But planning to buy spine so I can just animate once and used it in multiple game engines easily.