A
A
a_shed2020-06-14 03:16:38
Unity
a_shed, 2020-06-14 03:16:38

Why doesn't the Unity 3D script work?

Writes: Assets\Scripts\moveCam.cs(31,13): error CS0619: 'Component.rigidbody' is obsolete: 'Property rigidbody has been deprecated. Use GetComponent() instead. (UnityUpgradable)'
I understand that the component is outdated, but I don't understand how to change it so that the unit is happy with everything.

Script (highlighted the problematic place with a comment):

using UnityEngine;
using System.Collections;

public class CamMove : MonoBehaviour {
public Transform target; //Объект за которым летаем(Наш персонаж)
public float distance = 3.0f; //На каком ратоянии от него
public float xSpeed = 125.0f; //Чуствительность по Х
public float ySpeed = 50.0f; //Y Чуствительность
public float targetHeight = 2.0f; //Высота относительно объекта
//Минимальный и максимальный угол поворота Y инче камеру разверет, Дальше у нас будет простая функция для инвертации их в обратные числа
public float yMinLimit = -40;
public float yMaxLimit = 80;
//Максимальное удаление и приближение камеры к персонажу, искорость.
public float maxDistance = 10.0f;
public float minDistance = 0.5f;
public float zoomRote = 90.0f;

private float x = 0.0f; //Угол поворота по Y?
private float y = 0.0f; //Уго поворота по X?

[AddComponentMenu("Scripts/Mouse Orbit")] //Добавляем в меню

public void Start() {  
  //переворачивам углы
  Vector3 angles = transform.eulerAngles;
  x = angles.y;
  y = angles.x;
   
  // Проблема здесь, в этом условии.
  if(rigidbody)
  rigidbody.freezeRotation = true; //Если камера столкнется с физ.объектомона остановиться
}

public void LateUpdate() {  
  if (target) {//Если цель установлена(Персонаж)
  //Меняем углы согласно положению мыши
  x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
  y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
  //Меняем дистанция до персонажа.
  distance -= (Input.GetAxis ("Mouse ScrollWheel") * Time.deltaTime) * zoomRote * Mathf.Abs(distance);
  distance = Mathf.Clamp (distance, minDistance, maxDistance);
   
  y = ClampAngle(y,yMinLimit, yMaxLimit); //Вызыв самописной функции для ограничения углов поврот
  movePlayer.x = x;
  //Повернуть камеру согласно поченым данным
  Quaternion rotation = Quaternion.Euler(y, x, 0);
  transform.rotation = rotation;

  //Двигаем камеру и следим за персонажем
  Vector3 position = rotation * new Vector3(0.0f, targetHeight+0.5f, -distance) + target.position;
  transform.position = position;
   
  //Следуйщи код нужен что бы камера не проваливалась по ланшафт  
  RaycastHit hit;
  Vector3 trueTargetPosition = target.transform.position - new Vector3(0, -targetHeight,0);
  if(Physics.Linecast (trueTargetPosition, transform.position, out hit))
  {
  float tempDistance = Vector3.Distance (trueTargetPosition, hit.point) - 0.28f;
  position = target.position - (rotation * Vector3.forward * tempDistance + new Vector3(0, -targetHeight, 0));
  transform.position = position;
  }
  }

}
  //Меняем значения углов
  public static float ClampAngle (float angle, float min, float max) {
  if(angle < -360)
  angle += 360;
  if(angle > 360)
  angle -= 360;
  return Mathf.Clamp (angle, min, max);
}
}

Answer the question

In order to leave comments, you need to log in

2 answer(s)
T
Timur Pokrovsky, 2020-06-14
@a_shed

Use GetComponent() instead

M
Maxim, 2020-06-14
@XTerris

if (GetComponent<Rigidbody>())
    GetComponent<Rigidbody>().freezeRotation = true;

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question