-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAINPC.cs
More file actions
executable file
·94 lines (84 loc) · 2.45 KB
/
AINPC.cs
File metadata and controls
executable file
·94 lines (84 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterController))]
public class AINPC : MonoBehaviour
{
public GameObject T;
// Cached variables
CharacterController _controller;
Transform _transform;
//Movement variables
public float Speed = 5f;
float gravity = 100f;
Vector3 moveDirection;
Vector3 _target;
float maxRotSpeed = 200.0f;
float minTime = 0.1f;
float _velocity;
bool change;
float range;
void Start()
{
_controller = GetComponent<CharacterController>();
_transform = GetComponent<Transform>();
range = 2f;
_target = GetTarget();
Instantiate(T, _target, Quaternion.identity);
}
void Update()
{
// if (change)
// {
// _target = GetTarget();
// Instantiate(T, _target, Quaternion.identity);
// Debug.Log ("target changed");
// change = false;
// }
if (Vector3.Distance(_transform.position, _target) > range)
{
Move();
GetComponent<Animation>().CrossFade("walk");
// Debug.Log ("walking toward target");
}
else
{
_target = GetTarget();
Instantiate(T, _target, Quaternion.identity);
// InvokeRepeating("NewTarget", 0.01f, 5.0f);
}
}
void Move()
{
// Movement
moveDirection = _transform.forward;
moveDirection *= Speed;
moveDirection.y -= gravity * Time.deltaTime;
_controller.Move(moveDirection * Time.deltaTime);
//Rotation
var newRotation = Quaternion.LookRotation(_target - _transform.position).eulerAngles;
var angles = _transform.rotation.eulerAngles;
_transform.rotation = Quaternion.Euler(angles.x,
Mathf.SmoothDampAngle(angles.y, newRotation.y, ref _velocity, minTime, maxRotSpeed),
angles.z);
}
Vector3 GetTarget()
{
return new Vector3(Random.Range(_transform.position.x - 20, _transform.position.x + 20), Random.Range(_transform.position.y - 1, _transform.position.y + 1), Random.Range(_transform.position.z - 20, _transform.position.z + 20));
}
// void NewTarget()
// {
// int choice = Random.Range(0, 2);
// switch (choice)
// {
// case 2: //new target
// change = true;
// break;
// case 1: //still walking toward old target
// change = false;
// break;
// case 0: //waiting, staying at same position
// _target = transform.position;
// break;
// }
// }
}