这个脚本赋给你的摄像机,再把游戏角色赋给character变量,之后就能实现摄像机平滑的跟随player在地球的任一角落了。
|
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
95
|
using UnityEngine;using System.Collections;public class SmoothFollowerObj
{ private Vector3
targetPosition; private Vector3
position; private Vector3
velocity; private float smoothingTime; private float prediction; public SmoothFollowerObj(float smoothingTime)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; prediction
= 1; } public SmoothFollowerObj(float smoothingTime, float prediction)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; this.prediction
= prediction; } //
Update should be called once per frame public Vector3
Update(Vector3 targetPositionNew, float deltaTime)
{ Vector3
targetVelocity = (targetPositionNew-targetPosition)/deltaTime; targetPosition
= targetPositionNew; float d
= Mathf.Min(1,deltaTime/smoothingTime); velocity
= velocity*(1-d) + (targetPosition+targetVelocity*prediction-position)*d; position
+= velocity*Time.deltaTime; return position; } public Vector3
Update(Vector3 targetPositionNew, float deltaTime, bool reset)
{ if (reset)
{ targetPosition
= targetPositionNew; position
= targetPositionNew; velocity
= Vector3.zero; return position; } return Update(targetPositionNew,
deltaTime); } public Vector3
GetPosition() { return position;
} public Vector3
GetVelocity() { return velocity;
}}public class NoGravityCamera
: MonoBehaviour { //
这里的NoGravityCamera修改成你的脚本名 public GameObject
character; public Vector3
positionVector; public Vector3
lookVector; private SmoothFollowerObj
posFollow; private SmoothFollowerObj
lookFollow; private Vector3
lastVelocityDir; private Vector3
lastPos; //
Use this for initialization void Start
() { positionVector=new Vector3(0,2,4); lookVector=new Vector3(0,0,1.5f); posFollow
= new SmoothFollowerObj(0.5f,0.5f); lookFollow
= new SmoothFollowerObj(0.1f,0.0f); posFollow.Update(transform.position,0,true); lookFollow.Update(character.transform.position,0,true); lastVelocityDir
= character.transform.forward; lastPos
= character.transform.position; } //
Update is called once per frame void LateUpdate
() { lastVelocityDir
+= (character.transform.position-lastPos)*8; lastPos
= character.transform.position; lastVelocityDir
+= character.transform.forward*Time.deltaTime; lastVelocityDir
= lastVelocityDir.normalized; Vector3
horizontal = transform.position-character.transform.position; Vector3
horizontal2 = horizontal; Vector3
vertical = character.transform.up; Vector3.OrthoNormalize(ref vertical,ref horizontal2); if (horizontal.sqrMagnitude
> horizontal2.sqrMagnitude) horizontal = horizontal2; transform.position
= posFollow.Update( character.transform.position
+ horizontal*Mathf.Abs(positionVector.z) + vertical*positionVector.y, Time.deltaTime ); horizontal
= lastVelocityDir; Vector3
look = lookFollow.Update(character.transform.position + horizontal*lookVector.z - vertical*lookVector.y, Time.deltaTime); transform.rotation
= Quaternion.FromToRotation(transform.forward, look-transform.position) * transform.rotation; }} |
这是原文章地址:http://game.ceeger.com/forum/read.php?tid=1171&fid=2&page=1这个脚本赋给你的摄像机,再把游戏角色赋给character变量,之后就能实现摄像机平滑的跟随player在地球的任一角落了。
|
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
95
|
using UnityEngine;using System.Collections;public class SmoothFollowerObj
{ private Vector3
targetPosition; private Vector3
position; private Vector3
velocity; private float smoothingTime; private float prediction; public SmoothFollowerObj(float smoothingTime)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; prediction
= 1; } public SmoothFollowerObj(float smoothingTime, float prediction)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; this.prediction
= prediction; } //
Update should be called once per frame public Vector3
Update(Vector3 targetPositionNew, float deltaTime)
{ Vector3
targetVelocity = (targetPositionNew-targetPosition)/deltaTime; targetPosition
= targetPositionNew; float d
= Mathf.Min(1,deltaTime/smoothingTime); velocity
= velocity*(1-d) + (targetPosition+targetVelocity*prediction-position)*d; position
+= velocity*Time.deltaTime; return position; } public Vector3
Update(Vector3 targetPositionNew, float deltaTime, bool reset)
{ if (reset)
{ targetPosition
= targetPositionNew; position
= targetPositionNew; velocity
= Vector3.zero; return position; } return Update(targetPositionNew,
deltaTime); } public Vector3
GetPosition() { return position;
} public Vector3
GetVelocity() { return velocity;
}}public class NoGravityCamera
: MonoBehaviour { //
这里的NoGravityCamera修改成你的脚本名 public GameObject
character; public Vector3
positionVector; public Vector3
lookVector; private SmoothFollowerObj
posFollow; private SmoothFollowerObj
lookFollow; private Vector3
lastVelocityDir; private Vector3
lastPos; //
Use this for initialization void Start
() { positionVector=new Vector3(0,2,4); lookVector=new Vector3(0,0,1.5f); posFollow
= new SmoothFollowerObj(0.5f,0.5f); lookFollow
= new SmoothFollowerObj(0.1f,0.0f); posFollow.Update(transform.position,0,true); lookFollow.Update(character.transform.position,0,true); lastVelocityDir
= character.transform.forward; lastPos
= character.transform.position; } //
Update is called once per frame void LateUpdate
() { lastVelocityDir
+= (character.transform.position-lastPos)*8; lastPos
= character.transform.position; lastVelocityDir
+= character.transform.forward*Time.deltaTime; lastVelocityDir
= lastVelocityDir.normalized; Vector3
horizontal = transform.position-character.transform.position; Vector3
horizontal2 = horizontal; Vector3
vertical = character.transform.up; Vector3.OrthoNormalize(ref vertical,ref horizontal2); if (horizontal.sqrMagnitude
> horizontal2.sqrMagnitude) horizontal = horizontal2; transform.position
= posFollow.Update( character.transform.position
+ horizontal*Mathf.Abs(positionVector.z) + vertical*positionVector.y, Time.deltaTime ); horizontal
= lastVelocityDir; Vector3
look = lookFollow.Update(character.transform.position + horizontal*lookVector.z - vertical*lookVector.y, Time.deltaTime); transform.rotation
= Quaternion.FromToRotation(transform.forward, look-transform.position) * transform.rotation; }} |
这是原文章地址:http://game.ceeger.com/forum/read.php?tid=1171&fid=2&page=1这个脚本赋给你的摄像机,再把游戏角色赋给character变量,之后就能实现摄像机平滑的跟随player在地球的任一角落了。
|
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
95
|
using UnityEngine;using System.Collections;public class SmoothFollowerObj
{ private Vector3
targetPosition; private Vector3
position; private Vector3
velocity; private float smoothingTime; private float prediction; public SmoothFollowerObj(float smoothingTime)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; prediction
= 1; } public SmoothFollowerObj(float smoothingTime, float prediction)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; this.prediction
= prediction; } //
Update should be called once per frame public Vector3
Update(Vector3 targetPositionNew, float deltaTime)
{ Vector3
targetVelocity = (targetPositionNew-targetPosition)/deltaTime; targetPosition
= targetPositionNew; float d
= Mathf.Min(1,deltaTime/smoothingTime); velocity
= velocity*(1-d) + (targetPosition+targetVelocity*prediction-position)*d; position
+= velocity*Time.deltaTime; return position; } public Vector3
Update(Vector3 targetPositionNew, float deltaTime, bool reset)
{ if (reset)
{ targetPosition
= targetPositionNew; position
= targetPositionNew; velocity
= Vector3.zero; return position; } return Update(targetPositionNew,
deltaTime); } public Vector3
GetPosition() { return position;
} public Vector3
GetVelocity() { return velocity;
}}public class NoGravityCamera
: MonoBehaviour { //
这里的NoGravityCamera修改成你的脚本名 public GameObject
character; public Vector3
positionVector; public Vector3
lookVector; private SmoothFollowerObj
posFollow; private SmoothFollowerObj
lookFollow; private Vector3
lastVelocityDir; private Vector3
lastPos; //
Use this for initialization void Start
() { positionVector=new Vector3(0,2,4); lookVector=new Vector3(0,0,1.5f); posFollow
= new SmoothFollowerObj(0.5f,0.5f); lookFollow
= new SmoothFollowerObj(0.1f,0.0f); posFollow.Update(transform.position,0,true); lookFollow.Update(character.transform.position,0,true); lastVelocityDir
= character.transform.forward; lastPos
= character.transform.position; } //
Update is called once per frame void LateUpdate
() { lastVelocityDir
+= (character.transform.position-lastPos)*8; lastPos
= character.transform.position; lastVelocityDir
+= character.transform.forward*Time.deltaTime; lastVelocityDir
= lastVelocityDir.normalized; Vector3
horizontal = transform.position-character.transform.position; Vector3
horizontal2 = horizontal; Vector3
vertical = character.transform.up; Vector3.OrthoNormalize(ref vertical,ref horizontal2); if (horizontal.sqrMagnitude
> horizontal2.sqrMagnitude) horizontal = horizontal2; transform.position
= posFollow.Update( character.transform.position
+ horizontal*Mathf.Abs(positionVector.z) + vertical*positionVector.y, Time.deltaTime ); horizontal
= lastVelocityDir; Vector3
look = lookFollow.Update(character.transform.position + horizontal*lookVector.z - vertical*lookVector.y, Time.deltaTime); transform.rotation
= Quaternion.FromToRotation(transform.forward, look-transform.position) * transform.rotation; }} |
这是原文章地址:http://game.ceeger.com/forum/read.php?tid=1171&fid=2&page=1这个脚本赋给你的摄像机,再把游戏角色赋给character变量,之后就能实现摄像机平滑的跟随player在地球的任一角落了。
|
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
95
|
using UnityEngine;using System.Collections;public class SmoothFollowerObj
{ private Vector3
targetPosition; private Vector3
position; private Vector3
velocity; private float smoothingTime; private float prediction; public SmoothFollowerObj(float smoothingTime)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; prediction
= 1; } public SmoothFollowerObj(float smoothingTime, float prediction)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; this.prediction
= prediction; } //
Update should be called once per frame public Vector3
Update(Vector3 targetPositionNew, float deltaTime)
{ Vector3
targetVelocity = (targetPositionNew-targetPosition)/deltaTime; targetPosition
= targetPositionNew; float d
= Mathf.Min(1,deltaTime/smoothingTime); velocity
= velocity*(1-d) + (targetPosition+targetVelocity*prediction-position)*d; position
+= velocity*Time.deltaTime; return position; } public Vector3
Update(Vector3 targetPositionNew, float deltaTime, bool reset)
{ if (reset)
{ targetPosition
= targetPositionNew; position
= targetPositionNew; velocity
= Vector3.zero; return position; } return Update(targetPositionNew,
deltaTime); } public Vector3
GetPosition() { return position;
} public Vector3
GetVelocity() { return velocity;
}}public class NoGravityCamera
: MonoBehaviour { //
这里的NoGravityCamera修改成你的脚本名 public GameObject
character; public Vector3
positionVector; public Vector3
lookVector; private SmoothFollowerObj
posFollow; private SmoothFollowerObj
lookFollow; private Vector3
lastVelocityDir; private Vector3
lastPos; //
Use this for initialization void Start
() { positionVector=new Vector3(0,2,4); lookVector=new Vector3(0,0,1.5f); posFollow
= new SmoothFollowerObj(0.5f,0.5f); lookFollow
= new SmoothFollowerObj(0.1f,0.0f); posFollow.Update(transform.position,0,true); lookFollow.Update(character.transform.position,0,true); lastVelocityDir
= character.transform.forward; lastPos
= character.transform.position; } //
Update is called once per frame void LateUpdate
() { lastVelocityDir
+= (character.transform.position-lastPos)*8; lastPos
= character.transform.position; lastVelocityDir
+= character.transform.forward*Time.deltaTime; lastVelocityDir
= lastVelocityDir.normalized; Vector3
horizontal = transform.position-character.transform.position; Vector3
horizontal2 = horizontal; Vector3
vertical = character.transform.up; Vector3.OrthoNormalize(ref vertical,ref horizontal2); if (horizontal.sqrMagnitude
> horizontal2.sqrMagnitude) horizontal = horizontal2; transform.position
= posFollow.Update( character.transform.position
+ horizontal*Mathf.Abs(positionVector.z) + vertical*positionVector.y, Time.deltaTime ); horizontal
= lastVelocityDir; Vector3
look = lookFollow.Update(character.transform.position + horizontal*lookVector.z - vertical*lookVector.y, Time.deltaTime); transform.rotation
= Quaternion.FromToRotation(transform.forward, look-transform.position) * transform.rotation; }} |
这是原文章地址:http://game.ceeger.com/forum/read.php?tid=1171&fid=2&page=1这个脚本赋给你的摄像机,再把游戏角色赋给character变量,之后就能实现摄像机平滑的跟随player在地球的任一角落了。
|
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
95
|
using UnityEngine;using System.Collections;public class SmoothFollowerObj
{ private Vector3
targetPosition; private Vector3
position; private Vector3
velocity; private float smoothingTime; private float prediction; public SmoothFollowerObj(float smoothingTime)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; prediction
= 1; } public SmoothFollowerObj(float smoothingTime, float prediction)
{ targetPosition
= Vector3.zero; position
= Vector3.zero; velocity
= Vector3.zero; this.smoothingTime
= smoothingTime; this.prediction
= prediction; } //
Update should be called once per frame public Vector3
Update(Vector3 targetPositionNew, float deltaTime)
{ Vector3
targetVelocity = (targetPositionNew-targetPosition)/deltaTime; targetPosition
= targetPositionNew; float d
= Mathf.Min(1,deltaTime/smoothingTime); velocity
= velocity*(1-d) + (targetPosition+targetVelocity*prediction-position)*d; position
+= velocity*Time.deltaTime; return position; } public Vector3
Update(Vector3 targetPositionNew, float deltaTime, bool reset)
{ if (reset)
{ targetPosition
= targetPositionNew; position
= targetPositionNew; velocity
= Vector3.zero; return position; } return Update(targetPositionNew,
deltaTime); } public Vector3
GetPosition() { return position;
} public Vector3
GetVelocity() { return velocity;
}}public class NoGravityCamera
: MonoBehaviour { //
这里的NoGravityCamera修改成你的脚本名 public GameObject
character; public Vector3
positionVector; public Vector3
lookVector; private SmoothFollowerObj
posFollow; private SmoothFollowerObj
lookFollow; private Vector3
lastVelocityDir; private Vector3
lastPos; //
Use this for initialization void Start
() { positionVector=new Vector3(0,2,4); lookVector=new Vector3(0,0,1.5f); posFollow
= new SmoothFollowerObj(0.5f,0.5f); lookFollow
= new SmoothFollowerObj(0.1f,0.0f); posFollow.Update(transform.position,0,true); lookFollow.Update(character.transform.position,0,true); lastVelocityDir
= character.transform.forward; lastPos
= character.transform.position; } //
Update is called once per frame void LateUpdate
() { lastVelocityDir
+= (character.transform.position-lastPos)*8; lastPos
= character.transform.position; lastVelocityDir
+= character.transform.forward*Time.deltaTime; lastVelocityDir
= lastVelocityDir.normalized; Vector3
horizontal = transform.position-character.transform.position; Vector3
horizontal2 = horizontal; Vector3
vertical = character.transform.up; Vector3.OrthoNormalize(ref vertical,ref horizontal2); if (horizontal.sqrMagnitude
> horizontal2.sqrMagnitude) horizontal = horizontal2; transform.position
= posFollow.Update( character.transform.position
+ horizontal*Mathf.Abs(positionVector.z) + vertical*positionVector.y, Time.deltaTime ); horizontal
= lastVelocityDir; Vector3
look = lookFollow.Update(character.transform.position + horizontal*lookVector.z - vertical*lookVector.y, Time.deltaTime); transform.rotation
= Quaternion.FromToRotation(transform.forward, look-transform.position) * transform.rotation; }} |
这是原文章地址:http://game.ceeger.com/forum/read.php?tid=1171&fid=2&page=1
643

被折叠的 条评论
为什么被折叠?



