Der Versuch, eine Rückspulenfunktion zu implementierenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Der Versuch, eine Rückspulenfunktion zu implementieren

Post by Anonymous »

Ich erstelle ein Level in Einheit. Ich möchte mich an Objektpositionen erinnern. Wenn Objekte bewegt werden, sollten die Objekte in "R" in "R" zurückhalten. Dies sollte nur auf Objekten funktionieren, bei denen das Rücklaufskript an sie angebracht ist. Es wird nicht zurückkehren. Ist das, was ich versuche, möglich zu machen? Skripte sind wie folgt: < /p>

Code: Select all

    // TimeRewind.cs

using System.Collections.Generic;
using UnityEngine;

public class TimeRewind : MonoBehaviour
{
public float recordTime = 1.5f;

private List
 pointsInTime;
private Rigidbody rb;
private bool isRewinding = false;

void Start()
{
pointsInTime = new List();
rb = GetComponent();
}
void FixedUpdate()
{
if (isRewinding)
{
Rewind();
}
else
{
Record();
}
}
void Record()
{
if (pointsInTime.Count > Mathf.Round(recordTime / Time.fixedDeltaTime))
{
pointsInTime.RemoveAt(pointsInTime.Count - 1);
}

pointsInTime.Insert(0, new PointInTime(transform.position, transform.rotation));

if (pointsInTime.Count % 10 == 0)
Debug.Log(gameObject.name + " recording points: " + pointsInTime.Count);
}
void Rewind()
{
if (pointsInTime.Count > 0)
{
PointInTime point = pointsInTime[0];
transform.position = point.position;
transform.rotation = point.rotation;
pointsInTime.RemoveAt(0);
}
}
public void StartRewind()
{
isRewinding = true;
rb.isKinematic = true;
}
public void StopRewind()
{
isRewinding = false;
rb.isKinematic = false;
}
}
//TTimeManager.cs

using UnityEngine;

public class TimeManager : MonoBehaviour
{
private TimeRewind selectedRewind;

void Update()
{
// LEFT CLICK - Select object
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;

if (Physics.Raycast(ray, out hit))
{
TimeRewind rewindScript = hit.collider.GetComponent();

if (rewindScript != null)
{
selectedRewind = rewindScript;
Debug.Log("Selected object: " + selectedRewind.gameObject.name);
}
else
{
Debug.Log("Clicked object does not have TimeRewind. Keeping previous selection.");
}
}

}

// R key - Start rewind
if (Input.GetKeyDown(KeyCode.R))
{
if (selectedRewind != null)
{
selectedRewind.StartRewind();
Debug.Log("R key pressed. Calling StartRewind.");
}
}

// R key up - Stop rewind
if (Input.GetKeyUp(KeyCode.R))
{
if (selectedRewind != null)
{
selectedRewind.StopRewind();
Debug.Log("R key released. Calling StopRewind.");
}
}
}
}
// PointInTime.cs

using UnityEngine;

public class PointInTime
{
public Vector3 position;
public Quaternion rotation;

public PointInTime(Vector3 pos, Quaternion rot)
{
position = pos;
rotation = rot;
}
}
Schätzen Sie jede Hilfe bei diesem Problem.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post