愤怒的小鸟学习过程遇到的细节
愤怒的小鸟运动过快如何消除残影
主要是因为Interpolate插值算法
Rigidbody.interpolation
插值可以平滑消除固定帧率运行物理导致的现象。
默认情况下,插值是关闭的。通常对玩家的角色使用刚体插值。 物理以离散时间步长运行,而图形以可变帧率渲染。 由于物理和图形并不完全同步,这可能导致对象出现视觉抖动。 这种效果很细微,但通常能够在玩家角色上看到,特别是当摄像机跟随主角时。 建议对主角打开插值,对于其他所有内容,则禁用它。
愤怒的小鸟运动过快如何消除残影
猪的多次碰撞受伤bug
下面为猪受伤的部分源代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pig : MonoBehaviour {
public float maxSpeed = 10;
public float minSpeed = 2;
private SpriteRenderer render;
public Sprite hurt;
public GameObject boom;
private void Awake()
{
render = GetComponent<SpriteRenderer>();
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.relativeVelocity.magnitude > maxSpeed)
{
Dead();
}
else if(collision.relativeVelocity.magnitude > minSpeed && collision.relativeVelocity.magnitude<maxSpeed) {
render.sprite = hurt;
}
}
void Dead() {
Destroy(gameObject);
Instantiate(boom, transform.position, Quaternion.identity);
}
}
————————————————
版权声明:本文为CSDN博主「renwen1579」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/renwen1579/article/details/121055089
猪应该累计受伤程度判断是否致死
我在这个基础上通过设定几个速度丰富了猪受伤的阶段状态
但是也存在很多冲突
导致音频播放重复
轻重伤图片来回切换bug
以下是我在前辈的基础上编的,轻喷
(把区分木头和猪的isPig给省略了)
public class pig : MonoBehaviour
{
public float ASpeed = 16;
public float BSpeed = 10;
public float CSpeed = 4;
private SpriteRenderer render;
public Sprite Ahurt;
public Sprite Bhurt;
public GameObject boom;
public GameObject score;
public AudioClip hurtClip;
public AudioClip dead;
public AudioClip birdCollision;
[Space]
private float PigHurt = 0;
private bool hasCollided = false;
private void Awake()
{
render = GetComponent<SpriteRenderer>();
}
private void OnCollisionEnter2D(Collision2D collision)
{
print(collision.relativeVelocity.magnitude);
if (collision.relativeVelocity.magnitude > ASpeed||PigHurt>=10)
{
AudioPlay(birdCollision);
AudioPlay(dead);
PigHurt += 10;
}
if (collision.relativeVelocity.magnitude > BSpeed && collision.relativeVelocity.magnitude <= ASpeed)
{
AudioPlay(birdCollision);
AudioPlay(hurtClip);
PigHurt += 5;
}
if (collision.relativeVelocity.magnitude > CSpeed && collision.relativeVelocity.magnitude <= BSpeed)
{
AudioPlay(birdCollision);
AudioPlay(hurtClip);
PigHurt += 3;
}
//以下解决多次碰撞的问题
this.hasCollided = true;
if (this.hasCollided == true) { Dead(); }
}
void LateUpdate()
{
this.hasCollided = false;
}
//利用LateUpdate()以及hasCollided控制变量打时间差
//https://www.cnblogs.com/sanyejun/p/11439002.html
//理论上我理解的确可以解决多次碰撞的问题,但是在设置时间的时候还是搞不太定
//但感觉碰撞少了很多了
//这里rigidbody的Collision Detection还是设置Continuous连续型的好些吧,我也测试区别不太出来...有大佬知道吗
void Dead()
{
if (PigHurt >= 10)
{
GameManager.instance.pigs.Remove(this);
Instantiate(boom, transform.position, Quaternion.identity);
GameObject coreObject = Instantiate(score, transform.position + new Vector3(0, 1f, 0), Quaternion.identity);
Destroy(coreObject, 1.5f);
Destroy(gameObject);
}
if (PigHurt > 0 && PigHurt <= 5)
{
render.sprite = Bhurt;
//把受伤的图片放到最后累计分数的环节再显示出来,解决轻重伤图片来回切换bug
}
if (PigHurt > 5 && PigHurt < 10)
{
render.sprite =Ahurt;
}
}
public void AudioPlay(AudioClip clip)
{
AudioSource.PlayClipAtPoint(clip, transform.position);
}
}
两个UI界面按钮冲突使得重玩飞不了鸟
还有一个bug,过几天研究,先做完主界面的关卡撒,记录在这
两个UI界面按钮冲突使得重玩飞不了鸟unity愤怒的小鸟
发现错误原因:
分别在暂停UI界面和(胜利失败UI界面)挂了不同的代码文件使用重玩函数和回到主界面函数,胜利失败UI 界面的重玩函数就忘记加Time.timeScale = 1;就冲突卡了。
别忘了当胜利失败UI界面出现时,写代码让暂停UI界面失活