C# Unity Getter und Setter von einem Script zum anderen

M

Mart

Gast
Also ich hab in Unity 2 Scripte die Funktionieren soweit bis auf 1e Sache:

Im MovementDash Script sollte bis zum ende der Dash Animation der speedPercentage wert vom Movement Script auf 2f gesetzt werden
Durch UnityHUB ( also die GUI ) kann man die Verbindung zwischen den zwei Scripten herstellen und kein neues erstellen muss.

Im prinzip geht es darum dass ich es nicht gebacken kriege den setter von Movement aufzurufen

Debug.Log sagt auch, dass es das Object gibt und auch die Variable speedPercentage den Wert 1f (auch nach meines Versuches sie zu verändern)

Das MovementDash Skript, die (theoretisch) Fett markierten Stellen sind die Wichtigen
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MovementDash : MonoBehaviour
{
    private Rigidbody rigid;
    [B]public Movement movementScript;[/B]

.....

    // Update is called once per frame
    void Update()
    {
        if(endurance < dashPauseDuration) endurance += Time.deltaTime;
        if (Input.GetButton("Jump") && endurance >= dashPauseDuration)
        {
            Dash();
        }
    }
    private void Dash()
    {
            endurance = 0;
            anim.SetTrigger("Dodge");
            if (anim.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1)
            {
                Vector3 v = transform.rotation * Vector3.forward;

                rigid.AddForce(v * dashImpulse, ForceMode.Impulse);
               [B]movementScript.speedPercentage= 2f;[/B]
                Debug.Log(movementScript.speedPercentage);
            }
    }
}
[CODE lang="csharp" title="Movement"]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
Hier ist eig alles unwichtig ausser speedPercentage in der ersten zeile
public class Movement : MonoBehaviour
{
public float speedPercentage;
private const float movementSpeed = 6f;
private const float rotationSpeed = 6f;

private float mDesiredRotation = 0f;
private Vector3 moveVector;
private Vector3 rotatedMovement;

public Camera MyCamera;
private Animator anim;
private Rigidbody rigid;
void Start()
{
rigid = GetComponent<Rigidbody>();
anim = GetComponent<Animator>();
rigid.maxAngularVelocity = 0.5f;
}

void FixedUpdate()
{
moveVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;

if (moveVector != Vector3.zero)
{

rotatedMovement = Quaternion.Euler(0, MyCamera.transform.rotation.eulerAngles.y, 0) * moveVector;

anim.SetTrigger("Active");

rigid.MovePosition(transform.position + rotatedMovement * movementSpeed * speedPercentage * Time.fixedDeltaTime);

}
else
{
getIdle();
}


if (rotatedMovement.magnitude > 0) mDesiredRotation = Mathf.Atan2(rotatedMovement.x, rotatedMovement.z) * Mathf.Rad2Deg;
Quaternion currentRotation = transform.rotation;
Quaternion targetRotation = Quaternion.Euler(0, mDesiredRotation, 0);

transform.rotation = Quaternion.Lerp(currentRotation, targetRotation, rotationSpeed * Time.fixedDeltaTime);
}
private void getIdle()
{
anim.ResetTrigger("Active");
anim.SetTrigger("Idle");
}
}

[/CODE]
und nein ich erwarte nicht unbedingt eine Antwort im Java Forum, aber ich bin gerade am verzweifeln an einem einfachen setter :D
 
Zuletzt bearbeitet von einem Moderator:
M

Mart

Gast
wird speedPercentage während Update() verändert funktioniert es aber warum wird es nicht während Dash() ausgeführt da ist auch der Debug.Log wert "leer" also es kommt gar nichts


um genau zu sein ist es so dass es innerhalb der if klausel nichts macht aber ausserhalb schon
Java:
        movementScript.speedPercentage = 0;
        endurance = 0;
            anim.SetTrigger("Dodge");
            if (anim.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1)
            {
                Vector3 v = transform.rotation * Vector3.forward;

                rigid.AddForce(v * dashImpulse, ForceMode.Impulse);
            }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Probleme bei Unity Andere Programmiersprachen 2

Ähnliche Java Themen

Neue Themen


Oben