Jump to content
Unity Insider Forum

---

Members
  • Content Count

    27
  • Joined

  • Last visited

Community Reputation

0 Neutral

About ---

  • Rank
    Member
  • Birthday 12/14/1998

Profile Information

  • Gender
    Male
  1. Vielen dank nur leider habe ich Folgende Fehler in meinem Script 4 Ich möchte das man den Button Gedrückt hält und sollange man in drückt läuft sobald man in los lässt stehenbleiben
  2. Habe es nun mal mit: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Running : MonoBehaviour { public void ButtonToClick(int clickToButton) { Debug.Log("Test Press Button"); var Running = GameObject.Find("char_shadow").GetComponent<PlayerControl>(); Running.MovementManagement(Hinput, Vinput, run, sprint); } } Getestet leider ohne Erfolg.
  3. Das habe ich auch schon versucht nur leider nutze ich einen PlayerCharakterControler aus einem Fremden Asset und finde die Methode die fürs Laufen zuständig ist nicht using UnityEngine; using System.Collections; public class PlayerControl : MonoBehaviour { public float walkSpeed = 0.15f; public float runSpeed = 1.0f; public float sprintSpeed = 2.0f; public float flySpeed = 4.0f; public float turnSmoothing = 3.0f; public float aimTurnSmoothing = 15.0f; public float speedDampTime = 0.1f; public float jumpHeight = 5.0f; public float jumpCooldown = 1.0f; private float timeToNextJump = 0; private float speed; private Vector3 lastDirection; private Animator anim; private int speedFloat; private int jumpBool; private int hFloat; private int vFloat; private int aimBool; private int flyBool; private int groundedBool; private Transform cameraTransform; public float Hinput; public float Vinput; private bool aim; private bool run; private bool sprint; private bool isMoving; // fly private bool fly = false; private float distToGround; private float sprintFactor; void Awake() { anim = GetComponent<Animator> (); cameraTransform = Camera.main.transform; speedFloat = Animator.StringToHash("Speed"); jumpBool = Animator.StringToHash("Jump"); hFloat = Animator.StringToHash("H"); vFloat = Animator.StringToHash("V"); aimBool = Animator.StringToHash("Aim"); // fly flyBool = Animator.StringToHash ("Fly"); groundedBool = Animator.StringToHash("Grounded"); distToGround = GetComponent<Collider>().bounds.extents.y; sprintFactor = sprintSpeed / runSpeed; } bool IsGrounded() { return Physics.Raycast(transform.position, -Vector3.up, distToGround + 0.1f); } void Update() { // fly if(Input.GetButtonDown ("Fly")) fly = !fly; aim = Input.GetButton("Aim"); Hinput = Input.GetAxis("Horizontal"); Vinput = Input.GetAxis("Vertical"); run = Input.GetButton ("Run"); sprint = Input.GetButton ("Sprint"); isMoving = Mathf.Abs(Hinput) > 0.1 || Mathf.Abs(Vinput) > 0.1; } void FixedUpdate() { anim.SetBool (aimBool, IsAiming()); anim.SetFloat(hFloat, Hinput); anim.SetFloat(vFloat, Vinput); // Fly anim.SetBool (flyBool, fly); GetComponent<Rigidbody>().useGravity = !fly; anim.SetBool (groundedBool, IsGrounded ()); if(fly) FlyManagement(Hinput,Vinput); else { MovementManagement (Hinput, Vinput, run, sprint); JumpManagement (); } } // fly void FlyManagement(float horizontal, float vertical) { Vector3 direction = Rotating(horizontal, vertical); GetComponent<Rigidbody>().AddForce(direction * flySpeed * 100 * (sprint?sprintFactor:1)); } void JumpManagement() { if (GetComponent<Rigidbody>().velocity.y < 10) // already jumped { anim.SetBool (jumpBool, false); if(timeToNextJump > 0) timeToNextJump -= Time.deltaTime; } if (Input.GetButtonDown ("Jump")) { anim.SetBool(jumpBool, true); if(speed > 0 && timeToNextJump <= 0 && !aim) { GetComponent<Rigidbody>().velocity = new Vector3(0, jumpHeight, 0); timeToNextJump = jumpCooldown; } } } void MovementManagement(float horizontal, float vertical, bool running, bool sprinting) { Rotating(horizontal, vertical); if(isMoving) { if(sprinting) { speed = sprintSpeed; } else if (running) { speed = runSpeed; } else { speed = walkSpeed; } anim.SetFloat(speedFloat, speed, speedDampTime, Time.deltaTime); } else { speed = 0f; anim.SetFloat(speedFloat, 0f); } GetComponent<Rigidbody>().AddForce(Vector3.forward*speed); } Vector3 Rotating(float horizontal, float vertical) { Vector3 forward = cameraTransform.TransformDirection(Vector3.forward); if (!fly) forward.y = 0.0f; forward = forward.normalized; Vector3 right = new Vector3(forward.z, 0, -forward.x); Vector3 targetDirection; float finalTurnSmoothing; if(IsAiming()) { targetDirection = forward; finalTurnSmoothing = aimTurnSmoothing; } else { targetDirection = forward * vertical + right * horizontal; finalTurnSmoothing = turnSmoothing; } if((isMoving && targetDirection != Vector3.zero) || IsAiming()) { Quaternion targetRotation = Quaternion.LookRotation (targetDirection, Vector3.up); // fly if (fly) targetRotation *= Quaternion.Euler (90, 0, 0); Quaternion newRotation = Quaternion.Slerp(GetComponent<Rigidbody>().rotation, targetRotation, finalTurnSmoothing * Time.deltaTime); GetComponent<Rigidbody>().MoveRotation (newRotation); lastDirection = targetDirection; } //idle - fly or grounded if(!(Mathf.Abs(Hinput) > 0.9 || Mathf.Abs(Vinput) > 0.9)) { Repositioning(); } return targetDirection; } private void Repositioning() { Vector3 repositioning = lastDirection; if(repositioning != Vector3.zero) { repositioning.y = 0; Quaternion targetRotation = Quaternion.LookRotation (repositioning, Vector3.up); Quaternion newRotation = Quaternion.Slerp(GetComponent<Rigidbody>().rotation, targetRotation, turnSmoothing * Time.deltaTime); GetComponent<Rigidbody>().MoveRotation (newRotation); } } public bool IsFlying() { return fly; } public bool IsAiming() { return aim && !fly; } public bool isSprinting() { return sprint && !aim && (isMoving); } }
  4. Ja das hab ich alles gemacht nachdem ich denn Button drücke wird auch mein Debug.Log ausgeführt. Nur Leider wird die W/UpArrow Taste nicht gedrückt
  5. Hallo, Ich würde gerne mein Spiel in Unity auch für mein Android Smartphone Spielbar machen Da habe ich mich gleich ran gesetzt und möchte Folgendes Umsetzten ich möchte einen Knopf auf dem Display habe mit dem ich einfach geradeaus laufen kann Die Richtungen soll mit der Camera Steuerbar sein die schon einwandfrei Funktioniert. Also habe ich versucht einen Button zu erstellen der die W/UpArrow Taste drückt sobald ich diesen Button ausführe. Das ganze habe ich mal mit diesem kleinen Script versucht. Script: using System.Collections; using System.Collections.Generic; using UnityEngine; public class RunBtn : MonoBehaviour { public void ButtonToClick(int clickToButton) { Debug.Log("Test Button"); if (Input.GetKeyDown(KeyCode.W)); } } Nur Leider passiert nichts habe ich einfach die Falsche Methode dafür oder ist es Grundsätzlich so nicht umzusetzen. Über Hilfe würde ich mich sehr Freuen MFG.
  6. Hallo, Seid langer Zeit arbeite ich nun an meinem Eigenen Spiel in Unity, es ist ein sogenantes Location Based Game wie Pokemon Go und c.o Leider ist mir gestern mein Unity während dem Arbeiten an meinem Projekt abgestützt seid dem ist es nicht mehr möglich meinen Player im Spiel mithilfe von GPS auf meinem Android Smartphone zu bewegen. und Folgende Meldung tritt in meiner Console auf: LocationProviderFactory: Injected EDITOR Location Provider - Mapbox.Unity.Location.EditorLocationProvider UnityEngine.Debug:LogFormat(String, Object[]) Mapbox.Unity.Location.LocationProviderFactory:InjectEditorLocationProvider() (at Assets/Mapbox/Unity/Location/LocationProviderFactory.cs:147) Mapbox.Unity.Location.LocationProviderFactory:Awake() (at Assets/Mapbox/Unity/Location/LocationProviderFactory.cs:136) Wie im Log zu erkennen benutze ich die MapBox API alle Scripte von MapBox funktionierten vor dem Absturz Fehler frei weshalb ich diese eigentlich ausschließen kann. Ich kann mir leider durch denn Fehler Log nicht viel Erklären und hoffe das sich vielleicht jemand besser damit auskennt. Ich würde mich sehr freuen wenn mir jemand weiter helfen könnte.
  7. Hallo. Vor einiger Zeit habe ich ein Spiel in Unity Erschauen welches Zufällig Kisten auf einer Großen Karte Spawnt diese kann man einsammeln und erhält dafür seine Belohnungen. wenn man nun diese Kisten eingesammelt hat sind sie weg und Spawnen nach einem 3 Minuten Counter wieder neu auf der Karte. Nun ist das Problem wenn ich die App einfach neustarte die Kisten sofort wieder da sind und man denn 3 Minuten Countdown einfach überspringen kann. Gibt es eine Möglichkeit in meine PickUpChest klasse die eingesammelte Kiste abzuspeichern und sollange sie abgespiechert ist nichtmehr erscheint und dieses wieder mit meinem 3 Minuten Countdown zu reseten. Also z.b in der PickupChest Klasse beim einsammeln Abspeichern mit dem Countdown die Abspeicherung löschen und wahrscheinlich brauche ich noch eine Start klasse die Abfragt ob die Kisten momentan gespeichert ist oder nicht. using UnityEngine; public class PickupCoins : MonoBehaviour { private void OnMouseDown() { var Cs = GameObject.Find("Main Camera").GetComponent<Cs>(); Cs.IncreaseLevel(); Destroy(gameObject); //Zum Beispiel Objekt abspeichern } } using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.UI; public class UpdateTime : MonoBehaviour { float currentTime = 0f; float startingTime = 180f; [SerializeField] Text countdownText; void Start() { currentTime = startingTime; } void Update() { currentTime -= 1 * Time.deltaTime; countdownText.text = currentTime.ToString(); if (currentTime <= 0) { currentTime = 0; currentTime = startingTime; Application.LoadLevel(1); //Bissher dafür gedacht die Sceene einfach neuzustarten da die Objekte dann resetet werden //Reseten von Objekt } } } über eine Antwort würde ich mich Freunen.
  8. Ahh super danke es Funkioniert Gibts dafür gründe das du diese Methode nicht entfehlen würdest oder ist das einfach nur unsauberes Programmieren?
  9. Ich hab versuche aus der GetXP(); eine static methode zu machen nur leider wollen dann alle methoden drum rum auch zu einer static methode werden und spätestens bei der Update(); methode kann ich kein static mehr setzten weil ich denn Slider ja trotzdem weiterhin ausswählen muss was auch sein muss ist da das Script sich auf der MainCamera befindet.
  10. Ich weiß nur leider nicht wie genau ich das auf mein Script anwenden soll solte ich nur eine Methode dort auf Static setzten ist sofort der ganze code nichtmehr verwendbar.
  11. Also soll ich meine Level klasse auf der MainCamara ohne public statics lassen mein Pickupchest script aufs Gameobjekt und dein PlayerStats script niergends hin?
  12. Mein Ziel ist es eigendlich nur XP zu vergeben wenn der Spiel die auf der Map erscheinenden Kisten anklickt hab das Ganze mal versucht umzusetzen. nur leider fehlen dann auch die Referenzen zum Text wo mein Level angezeigt wird und mein Slider der denn XP wert anzeigt. Script für die Kiste: using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; using UnityEngine.UI; public class PickupChest : MonoBehaviour { private void OnMouseDown() { Debug.Log("Chest Pickup"); Level.LvLprogress += 4; Destroy(gameObject); } } PlayerStats Script: using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public static class Level { static public Slider LevelBar; static public Text TxtLvLHealth; static public Button BtnTakeDamage; static public Button BtnGetHealth; static public int LvLprogress = 0; static public int SaveXP; static public int level = 1; static public Text levelDisplay; static void Start() { BtnTakeDamage.onClick.AddListener(delegate { TakeXP(); }); BtnGetHealth.onClick.AddListener(delegate { GetXP(); }); SaveXP = PlayerPrefs.GetInt("SliderWert2"); LvLprogress = SaveXP; LevelBar.value = SaveXP; level = PlayerPrefs.GetInt("Level"); UpdateHealthBar(); SaveAndDisplayLevel(); } static public void TakeXP() { LvLprogress = LvLprogress - 100; if (LvLprogress < 0) { LvLprogress = 0; } UpdateHealthBar(); } static public void GetXP() { LvLprogress = LvLprogress + 4; if (LvLprogress > 100) { LvLprogress = 0; IncreaseLevel(); } UpdateHealthBar(); } static public void UpdateHealthBar() { LevelBar.value = LvLprogress; SaveXP = Convert.ToInt32(LevelBar.value); //MakeSave = HealthBar.value; PlayerPrefs.SetInt("SliderWert2", SaveXP); PlayerPrefs.Save(); } static public void IncreaseLevel() { level++; SaveAndDisplayLevel(); } static public void ResetLevel() { level = 1; SaveAndDisplayLevel(); } static private void SaveAndDisplayLevel() { PlayerPrefs.SetInt("Level", level); PlayerPrefs.Save(); levelDisplay.text = level + ""; } }
  13. Sobald ich in meinem Script auch nur etwas mit statics mache wird es sofort nicht mehr anerkannt. ich kanns nicht mehr in meine Main Camera ziehen und sobald ich das Singleton verfahren einsetze bekomme ich Folgenden Fehler In Zeile 18 von PickupBridge befindet sich XP.GetXP();
×
×
  • Create New...