Files
AIC-Project/Client/PackageLocal/com.unity.pipeline@0.4.0-exp.1/Samples~/HotReload/HotReload_InPlace/InPlaceHotReloadExample.cs
T

83 lines
2.8 KiB
C#

using UnityEngine;
using Unity.Pipeline.HotReload;
namespace Unity.Pipeline.Samples.HotReload
{
/// <summary>
/// Example demonstrating in-place hot reload editing workflow.
///
/// Usage:
/// 1. Add this component to a GameObject in the scene
/// 2. Play the scene - you'll see the object rotating
/// 3. Modify the Update() method below (try changing Vector3.up to Vector3.forward)
/// 4. Run: reload_file Assets/Samples/HotReload_InPlace/InPlaceHotReloadExample.cs
/// 5. See the changes take effect immediately without stopping play mode!
///
/// Requirements:
/// - Only use PUBLIC fields, properties, and methods
/// - Private/internal members will cause validation errors
/// </summary>
public class InPlaceHotReloadExample : MonoBehaviour
{
[Header("Hot Reload Configuration")]
public float rotationSpeed = 90f;
public bool enableRotation = true;
public Vector3 rotationAxis = Vector3.up;
[Header("Movement Configuration")]
public float moveSpeed = 2f;
public bool enableMovement = false;
[HotReload]
void Update()
{
// Edit this body live, then run: reload_file <this file>
// Try changing rotationAxis (e.g. Vector3.up -> Vector3.forward) or the speed.
if (enableRotation)
{
transform.Rotate(rotationAxis, rotationSpeed * Time.deltaTime);
}
if (enableMovement)
{
var movement = Mathf.Sin(Time.time) * moveSpeed;
transform.position = new Vector3(movement, transform.position.y, transform.position.z);
}
}
[HotReload]
public void ResetTransform()
{
// Another method you can hot reload
transform.position = Vector3.zero;
transform.rotation = Quaternion.identity;
Debug.Log("Transform reset via hot reload!");
}
// Note: value-returning methods are not yet supported by in-place reload (void methods only),
// so this one is a normal method.
public float CalculateDistance(Vector3 targetPosition)
{
return Vector3.Distance(transform.position, targetPosition);
}
void Awake()
{
// Run the sample in a 640x480 window instead of fullscreen.
Screen.SetResolution(640, 480, FullScreenMode.Windowed);
}
// Regular methods (not hot reloadable) - these work normally
void Start()
{
Debug.Log($"InPlaceHotReloadExample started. Try hot reloading the Update method!");
Debug.Log($"Command: reload_file {GetType().Name}.cs");
}
public void TriggerResetFromUI()
{
// This calls the hot reloadable method
ResetTransform();
}
}
}