C# Unity Raycast 问题,相机没有响应
C# Unity Raycast problems, camera not responding
我在我的播放器和相机之间创建了一个光线投射,当它检测到命中时,将相机移动到物体前面,这样物体就不会挡住视线。
调试测试表明光线投射确实有效。但是,我从控制台获得的关于我的代码的唯一消息是变量 targetMoveUse 已分配但从未使用过它的值。
我从 youtube 上的教程中学习了这段代码,并按照它进行了练习,但尽管看起来与教程中的代码相同,但它对我不起作用。教程在此供参考:https://www.youtube.com/watch?v=0nI0rX5fEY0
这是我的代码。感谢任何帮助。
Transform player;
Quaternion targetLook;
Vector3 targetMove;
public float rayHitMoveInFront = 0.1f;
Vector3 targetMoveUse;
public float smoothLook = 0.5f;
public float smoothMove = 0.5f;
Vector3 smoothMoveV;
public float distFromPlayer = 5;
public float heightFromPlayer = 3;
void Start () {
player = GameObject.FindWithTag ("Player").transform;
}
void Update () {
targetMove = player.position + (player.rotation * new Vector3 (0, heightFromPlayer, -distFromPlayer));
RaycastHit hit;
if (Physics.Raycast (player.position, targetMove - player.position, out hit, Vector3.Distance (player.position, targetMove)))
targetMoveUse = Vector3.Lerp (hit.point, player.position, rayHitMoveInFront);
else
targetMoveUse = targetMove;
//chapter 4 episode 3 part 1
//transform.position = player.position + (player.rotation * new Vector3 (0, heightFromPlayer, -distFromPlayer));
//transform.position = Vector3.Lerp (transform.position, targetMove, smoothMove * Time.deltaTime);
transform.position = Vector3.SmoothDamp (transform.position, targetMove, ref smoothMoveV, smoothMove);
targetLook = Quaternion.LookRotation (player.position - transform.position);
transform.rotation = Quaternion.Lerp (transform.rotation, targetLook, smoothLook * Time.deltaTime);
//chapter 4 episode 1
//transform.LookAt (player);
}
}
检查这一行,
transform.position = Vector3.SmoothDamp (transform.position, targetMove, ref smoothMoveV, smoothMove);
用 targetMoveUse 替换 targetMove 变量
transform.position = Vector3.SmoothDamp (transform.position, targetMoveUse, ref smoothMoveV, smoothMove);
我在我的播放器和相机之间创建了一个光线投射,当它检测到命中时,将相机移动到物体前面,这样物体就不会挡住视线。
调试测试表明光线投射确实有效。但是,我从控制台获得的关于我的代码的唯一消息是变量 targetMoveUse 已分配但从未使用过它的值。
我从 youtube 上的教程中学习了这段代码,并按照它进行了练习,但尽管看起来与教程中的代码相同,但它对我不起作用。教程在此供参考:https://www.youtube.com/watch?v=0nI0rX5fEY0
这是我的代码。感谢任何帮助。
Transform player;
Quaternion targetLook;
Vector3 targetMove;
public float rayHitMoveInFront = 0.1f;
Vector3 targetMoveUse;
public float smoothLook = 0.5f;
public float smoothMove = 0.5f;
Vector3 smoothMoveV;
public float distFromPlayer = 5;
public float heightFromPlayer = 3;
void Start () {
player = GameObject.FindWithTag ("Player").transform;
}
void Update () {
targetMove = player.position + (player.rotation * new Vector3 (0, heightFromPlayer, -distFromPlayer));
RaycastHit hit;
if (Physics.Raycast (player.position, targetMove - player.position, out hit, Vector3.Distance (player.position, targetMove)))
targetMoveUse = Vector3.Lerp (hit.point, player.position, rayHitMoveInFront);
else
targetMoveUse = targetMove;
//chapter 4 episode 3 part 1
//transform.position = player.position + (player.rotation * new Vector3 (0, heightFromPlayer, -distFromPlayer));
//transform.position = Vector3.Lerp (transform.position, targetMove, smoothMove * Time.deltaTime);
transform.position = Vector3.SmoothDamp (transform.position, targetMove, ref smoothMoveV, smoothMove);
targetLook = Quaternion.LookRotation (player.position - transform.position);
transform.rotation = Quaternion.Lerp (transform.rotation, targetLook, smoothLook * Time.deltaTime);
//chapter 4 episode 1
//transform.LookAt (player);
}
}
检查这一行,
transform.position = Vector3.SmoothDamp (transform.position, targetMove, ref smoothMoveV, smoothMove);
用 targetMoveUse 替换 targetMove 变量
transform.position = Vector3.SmoothDamp (transform.position, targetMoveUse, ref smoothMoveV, smoothMove);