Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by AmunTech · Dec 20, 2011 at 11:26 PM · networkingcharactercustomization

character customization animation sync problem in network

hello, i'm trying to use character customization example in my project, all seems to work well but i can't see animation changeing between idle and walk when the server was started, I have tryed with RPC but no luck. This is my modified fpsinputcontroller, it essentially set the character when the character was generated and play the animations when you move

 private var motor : CharacterMotor;
 var Character : GameObject;
 var NetV : NetworkView;
 
 
 // Use this for initialization
 function Awake () {
     motor = GetComponent(CharacterMotor);
 }
 
 // Update is called once per frame
 function Update () {
     // Get the input vector from kayboard or analog stick
     var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
     
     if (directionVector != Vector3.zero) {
         // Get the length of the directon vector and then normalize it
         // Dividing by the length is cheaper than normalizing when we already have the length anyway
         var directionLength = directionVector.magnitude;
         directionVector = directionVector / directionLength;
         
         // Make sure the length is no bigger than 1
         directionLength = Mathf.Min(1, directionLength);
     
         // Make the input vector more sensitive towards the extremes and less sensitive in the middle
         // This makes it easier to control slow speeds when using analog sticks
         directionLength = directionLength * directionLength;
         
         // Multiply the normalized direction vector by the modified length
         directionVector = directionVector * directionLength;
     }
     
     // Apply the direction to the CharacterMotor
     motor.inputMoveDirection = transform.rotation * directionVector;
     motor.inputJump = Input.GetButton("Jump");
     
     SetCharacter();
     networkView.RPC("AnimateCharacter", RPCMode.All);
 //Add the character animation component to observed 
     NetV.observed = Character.animation;
 }
 
 // Require a character controller to be attached to the same game object
 @script RequireComponent (CharacterMotor)
 @script AddComponentMenu ("Character/FPS Input Controller")
 
 
  function SetCharacter(){
 //yield WaitForSeconds (4);
 
     if (Character == null){
     Character = gameObject.Find("female");
     
 }
     if (!gameObject.Find("female")){
     Character = gameObject.Find("male");
     
 }else{
     return;
 }
 }
 
 @RPC
 function AnimateCharacter(info : NetworkMessageInfo){
     if (Input.GetAxis("Vertical") && Input.GetAxis("Horizontal")){
     Character.animation.CrossFade("walk");
     
 }else{
     Character.animation.CrossFade("idle1");
     
     }
 }

any suggestion will be very, very appreciated & sorry for my english

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by Julien-Lynge · Dec 21, 2011 at 06:40 PM

Michael, It doesn't look like you're actually sending any information with the RPC call. I think what you want to do is detect Input on your local copy, send this information over the network, and animate on the remote copy. What currently happens is that the remote copy receives the RPC call and checks its own Input - so it will only animate if it receives an RPC call AND gets input on the same frame. What you want to do is something like this:

 bool gotInput = (Input.GetAxis("Vertical") || Input.GetAxis("Horizontal"))

 networkView.RPC("AnimateCharacter", RPCMode.Others, gotInput);

//note that I changed RPCMode to others - setting to All will call us as well, which we clearly don't need to do since we already have the input information. I also changed the input to || from &&, since I'm assuming you don't want the user to have to press both simultaneously

then on the other side,

 function AnimateCharacter(bool gotInput)
 {
   if (gotInput) { start the animation }
 }

//I removed the NetworkMessageInfo (you're not using it, so you don't need it) and added the bool that you're passing on the other side.

Check out the Unity reference on RPC calls for more info.

Comment
Add comment · Show 3 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image AmunTech · Dec 22, 2011 at 08:15 AM 0
Share

thank you very much, but i still have a problem, it tells me that cannot convert float to boolean. In JS i have to create a boolean variable like this: var gotInput : boolean = (Input.GetAxis("Vertical") || Input.GetAxis("Horizontal")) or i have to create a function? Thanks for the help

avatar image Julien-Lynge · Dec 22, 2011 at 08:15 PM 0
Share

The documentation states that GetAxis returns a float value between -1 and 1 (http://unity3d.com/support/documentation/ScriptReference/Input.GetAxis.html).

So you have to decide in what cases you want to run the animation. Is it any case where the input is not zero? If so, you need to check for Input.GetAxis("YourAxis") != 0. Do you want to add some threshold, like where input is greater than .5? Then you use > .5.

It sounds like it would be a wise investment for you to look around for sites and books on learning Javascript - these are very basic program$$anonymous$$g things that you need to learn to be able to work successfully in Unity.

avatar image AmunTech · Dec 30, 2011 at 04:01 PM 0
Share

yes, you're right, is actually what i'm doing, i tryed everything and the problem still remains. I think that the problem is that the character was spawned after the prefabs. I tryed to allocate viewID but nothing.. it's a mystery, it seems a xfiles. Thank you anyway

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

Unity networking tutorial? 6 Answers

Network Discovery is not working over multiple devices. 1 Answer

Persisting NetworkView across Scene change does not work 1 Answer

Networking problems 2 Answers

Please, help me translating these to C# 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges