Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class StonesController : MonoBehaviour
- {
- [SerializeField] private GameObject _stoneSource;
- [SerializeField] private Transform _spawnAreaPoint;
- [Range(0, 10)]
- [SerializeField] private float _spawnAreaSize;
- [Range(0, 20)]
- [SerializeField] private int _stoneCount;
- [Range(0, 10)]
- [SerializeField] private float _levitateSpeed = 1f;
- [Range(0, 1)]
- [SerializeField] private float _levitatePower = .1f;
- [Range(100, 1000)]
- [SerializeField] private float _pushPower = 500f;
- private GameObject[] _stones;
- private Transform[] _stoneTransforms;
- private Rigidbody[] _stoneRigidbodies;
- private Vector3[] _initPositions;
- private bool _levitate = false;
- private void Awake()
- {
- Spawn();
- }
- private void Spawn()
- {
- _stones = new GameObject[_stoneCount];
- _initPositions = new Vector3[_stoneCount];
- _stoneTransforms = new Transform[_stoneCount];
- _stoneRigidbodies = new Rigidbody[_stoneCount];
- for (int i = 0; i < _stoneCount; i++)
- {
- _initPositions[i] = _spawnAreaPoint.position + new Vector3(Random.value - .5f, Random.value - .5f, Random.value - .5f) * _spawnAreaSize;
- _stones[i] = Instantiate(_stoneSource, _initPositions[i], Quaternion.identity);
- _stoneTransforms[i] = _stones[i].transform;
- _stoneRigidbodies[i] = _stones[i].GetComponent<Rigidbody>();
- }
- }
- private void StartLevitate()
- {
- _levitate = true;
- foreach (var stone in _stoneRigidbodies)
- {
- stone.useGravity = false;
- }
- }
- private void UpdateLevitate()
- {
- for (int i = 0; i < _stoneCount; i++)
- {
- Transform stoneTransform = _stoneTransforms[i];
- Rigidbody stoneRigidbody = _stoneRigidbodies[i];
- Vector3 targetPosition = new Vector3(stoneTransform.position.x, _initPositions[i].y, stoneTransform.position.z);
- targetPosition += new Vector3(Random.value - .5f, Random.value - .5f, Random.value - .5f) * _levitatePower;
- //stoneTransform.position = Vector3.Lerp(stoneTransform.position, targetPosition, Time.fixedDeltaTime * _levitateSpeed);
- stoneRigidbody.MovePosition(Vector3.Lerp(stoneTransform.position, targetPosition, Time.fixedDeltaTime * _levitateSpeed));
- }
- }
- private void Push()
- {
- _levitate = false;
- Vector3 force = Vector3.forward * _pushPower;
- foreach(var stone in _stoneRigidbodies)
- {
- stone.useGravity = true;
- stone.AddForce(force);
- }
- }
- private void Update()
- {
- if (Input.GetKeyDown(KeyCode.W))
- {
- StartLevitate();
- }
- else if (Input.GetKeyDown(KeyCode.Space))
- {
- Push();
- }
- }
- private void FixedUpdate()
- {
- if (_levitate) UpdateLevitate();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement