Player, player movement, camera control
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace KinematicCharacterController.Examples
|
||||
{
|
||||
public class StressTestManager : MonoBehaviour
|
||||
{
|
||||
public Camera Camera;
|
||||
public LayerMask UIMask;
|
||||
|
||||
public InputField CountField;
|
||||
public Image RenderOn;
|
||||
public Image SimOn;
|
||||
public Image InterpOn;
|
||||
public ExampleCharacterController CharacterPrefab;
|
||||
public ExampleAIController AIController;
|
||||
public int SpawnCount = 100;
|
||||
public float SpawnDistance = 2f;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
KinematicCharacterSystem.EnsureCreation();
|
||||
CountField.text = SpawnCount.ToString();
|
||||
UpdateOnImages();
|
||||
|
||||
KinematicCharacterSystem.Settings.AutoSimulation = false;
|
||||
KinematicCharacterSystem.Settings.Interpolate = false;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
|
||||
KinematicCharacterSystem.Simulate(Time.deltaTime, KinematicCharacterSystem.CharacterMotors, KinematicCharacterSystem.PhysicsMovers);
|
||||
}
|
||||
|
||||
private void UpdateOnImages()
|
||||
{
|
||||
RenderOn.enabled = Camera.cullingMask == -1;
|
||||
SimOn.enabled = Physics.autoSimulation;
|
||||
InterpOn.enabled = KinematicCharacterSystem.Settings.Interpolate;
|
||||
}
|
||||
|
||||
public void SetSpawnCount(string count)
|
||||
{
|
||||
if (int.TryParse(count, out int result))
|
||||
{
|
||||
SpawnCount = result;
|
||||
}
|
||||
}
|
||||
|
||||
public void ToggleRendering()
|
||||
{
|
||||
if(Camera.cullingMask == -1)
|
||||
{
|
||||
Camera.cullingMask = UIMask;
|
||||
}
|
||||
else
|
||||
{
|
||||
Camera.cullingMask = -1;
|
||||
}
|
||||
UpdateOnImages();
|
||||
}
|
||||
|
||||
public void TogglePhysicsSim()
|
||||
{
|
||||
Physics.autoSimulation = !Physics.autoSimulation;
|
||||
UpdateOnImages();
|
||||
}
|
||||
|
||||
public void ToggleInterpolation()
|
||||
{
|
||||
KinematicCharacterSystem.Settings.Interpolate = !KinematicCharacterSystem.Settings.Interpolate;
|
||||
UpdateOnImages();
|
||||
}
|
||||
|
||||
public void Spawn()
|
||||
{
|
||||
for (int i = 0; i < AIController.Characters.Count; i++)
|
||||
{
|
||||
Destroy(AIController.Characters[i].gameObject);
|
||||
}
|
||||
AIController.Characters.Clear();
|
||||
|
||||
int charsPerRow = Mathf.CeilToInt(Mathf.Sqrt(SpawnCount));
|
||||
Vector3 firstPos = ((charsPerRow * SpawnDistance) * 0.5f) * -Vector3.one;
|
||||
firstPos.y = 0f;
|
||||
|
||||
for (int i = 0; i < SpawnCount; i++)
|
||||
{
|
||||
int row = i / charsPerRow;
|
||||
int col = i % charsPerRow;
|
||||
Vector3 pos = firstPos + (Vector3.right * row * SpawnDistance) + (Vector3.forward * col * SpawnDistance);
|
||||
|
||||
ExampleCharacterController newChar = Instantiate(CharacterPrefab);
|
||||
newChar.Motor.SetPosition(pos);
|
||||
|
||||
AIController.Characters.Add(newChar);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user