Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class PlayerMove1 : MonoBehaviour
{
public Vector3 curPosition;
public Vector3 nextPosition;
public float speed;
public bool isMove = false;
public float tre;
void Start()
{
isMove = false;
curPosition = transform.position;
nextPosition = transform.position;
GetComponent<Animation>().Play("idle");
}
void Update()
{
CharacterController controller = GetComponent<CharacterController>();
if (Input.GetMouseButtonDown(0))
{
isMove = true;
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.tag == "floor")
{
//isMove
nextPosition = hit.point;
GetComponent<Animation>().Play("walk");
}
}
}
float distance = Vector3.Distance(new Vector3(transform.position.x, 0, transform.position.z), new Vector3(nextPosition.x, 0, nextPosition.z));
if (curPosition != nextPosition && isMove)
{
transform.LookAt(nextPosition);
Vector3 forward = transform.TransformDirection(Vector3.forward);
controller.SimpleMove(forward * speed);
if (distance < tre)
{
GetComponent<Animation>().Stop();
GetComponent<Animation>().Play("idle");
isMove = false;
controller.SimpleMove(Vector3.zero);
}
}
}
}
using System.Collections;
public class PlayerMove1 : MonoBehaviour
{
public Vector3 curPosition;
public Vector3 nextPosition;
public float speed;
public bool isMove = false;
public float tre;
void Start()
{
isMove = false;
curPosition = transform.position;
nextPosition = transform.position;
GetComponent<Animation>().Play("idle");
}
void Update()
{
CharacterController controller = GetComponent<CharacterController>();
if (Input.GetMouseButtonDown(0))
{
isMove = true;
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.tag == "floor")
{
//isMove
nextPosition = hit.point;
GetComponent<Animation>().Play("walk");
}
}
}
float distance = Vector3.Distance(new Vector3(transform.position.x, 0, transform.position.z), new Vector3(nextPosition.x, 0, nextPosition.z));
if (curPosition != nextPosition && isMove)
{
transform.LookAt(nextPosition);
Vector3 forward = transform.TransformDirection(Vector3.forward);
controller.SimpleMove(forward * speed);
if (distance < tre)
{
GetComponent<Animation>().Stop();
GetComponent<Animation>().Play("idle");
isMove = false;
controller.SimpleMove(Vector3.zero);
}
}
}
}
Player должен идти по полу, а он у меня стоит и с ноги на ногу переминается в состоянии idle.
Unity говорит что ошибка вот здесь Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Ошибку выдаёт такую NullReferenceException: Object reference not set to an instance of an object
PlayerMove1.Update () (at Assets/Scripts/PlayerMove1.cs:28)
Заранее спасибо, за ответ