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
[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
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);
}
}
}
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
Zuletzt bearbeitet von einem Moderator: