拖拽赋值text拖不过去,
拖拽赋值text拖不过去,
private Transfrom startpoint
private Transfrom spawnpoint
st
StartPoint
RotateSelf
若不在点击时创建新的针,currentPin会一直指向久的针,再次点击时会导致当前针的位置重置,但指向不变
else
{
transform.position = Vector3.MoveTowards(transform.position, Circle.transform.position, Time.deltaTime * speed * 3);//这里会继续执行
if (Vector3.Distance(transform.position, Circle.transform.position) <= distance)
{
transform.position = new Vector3(Circle.transform.position.x, Circle.transform.position.y - distance, Circle.transform.position.x);
isFly = false;
transform.parent = Circle.transform;
}
}
神奇 自己居然看漏了 添加public
要讲圆圈调成局部坐标 才能看出旋转 或改成椭圆比例 很好观察
在GameManager中添加:
provate Camera mainCamera;
public float speed =3;
void start()
{
在第三行添加:mainCamera = Camera.main;
在第三行末尾添加:IEnumerator GameOverAnimation()
{
(此处添加一个死循环)
while(true)
{
mainCamera.backgroundColor = Color.Lerp(mainCamera.backgroundColor,Color.red,speed*Time.deltaTime);
mainCamera.orthographicSize = Mathf.Lerp(mainCamera.orthographicSize,4,speed*Time.deltaTime);
if(Mathf.Abs(mainCamera.orthographicSize-4)<0.01f)
{
break;
}
(Lerp:插值运算,由当前颜色插到目标颜色
yield return 0;(逐帧暂停)
}
yield return new WaitForSeconds(0.2f);
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
}
引入相关场景:
using UnityEngine.SceneManagement;
在public void GameOver()中添加:
StartCoroutine(GameOverAnimation());
在GameManager的界面中:
private int score=0;
using UnityEngine;
using UnityEngin.UI;
public Text scoreText;
if(Input.GetMouseButtonDown(0))
{
(此处添加)score++;
scoreText.text=score.ToString();
}
IEnumerator
Color.Lerp(a,b,c)
yield return new WaitForSeconds
Scenemanager.LoadScene(SceneManager.GetActiveScene[],bulidIndex)
Ridbodyがない場合 当たり判定が実行不可能
is Trggle chufaモード
对针头赋予一个纲体:RigidBody 2D
点开Is trigger触发模式
将Gravity Scale设为0(否则针头会自己掉下去)
添加新的脚本PinHead
为了方便判定是否与其他的针头碰撞,添加一个标签(Tag:PinHead)并在主界面版设置一下:
Tag中选择PinHead
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.tag =="Pinhead”
{
GameObject.Find("ganemanager").GetComponent<GameManager>().GameOver();
}
}
去GameManager中主函数里添加public void GameOver()
{
if(isGameOver) return;(第一次使用GameOver时会直接履行后面true的条件,如果为真,直接执行return)
GameObject.Find("Circle").GetComporent<RotateSelf>().enabled = false;
isGameOver = true;
}
此处为了防止GameOver多次调用,使用了bool函数:private bool isGameOver = false;
在GameManager中private void Update:
if(GameOver) return;(一旦触发,则不会履行后面的代码)
要注意:编写完的代码要应用一下()
拖动针的位置,大致确定针的坐标。
在pin的主函数里添加:private Vector3 targetCirclePog;
void Start中targetCirclePogo = circle position;
targetCirclePog.y-=1.55f;
在else中:if(Vector3.Distance(transform.position,targetCirclePos)<0.05f)
{
trandform.position = targetCirclePos;
transform.parent = circle;
isFly = false;
}(保证针射到圆上,并同时能让针跟着圆转)
在GameManager中:if(Input.GetMouseButtonDown(0))
{
currentPin。StartFly();
(此处添加)SpawnPin;(保证针能被反复实例化)
}
(针的速度比较慢)将圆的类改为Private,并调整圆的速度。
在Gamemanager中添加控制针的代码:
private void Update()
{
if(Input.GetMuseButtonDown(0))
{
currentPin.StartFly();
}
}
打开Pin:在主函数(下面的)里添加public void StartFly(){
isFly = true;
isReach = true;
}
在GameManager主函数中加入:private Pin currentPin;
void SpawnPin()
{
(添加)currentPin = GameObject.Instantiate(pinPrefab,spaenPoint.position,pinPrefab.transform.rotation).GetComponent<Pin>();
}
在Pin主函数中加入:private Transform circle;在第二个if条件后添加else
在void Start中添加:circle = GameObject.Find(“Circle”).transform;
将else条件中startPoint.position改为circle
(现在的针只能实现发射,但没办法确定针的具体走向,且是使针到圆上,而不是插在圆上)
如出现运动轨迹有误,检查其调用对象是否出错。可用tag来修改并强制确认对象。
将Pin的void Start中:circle = GameObject.FindGameObjectWithTag(“Circle”).transform;
检查:将Pin:void Start中circle = GameObject.Find(“StartPoint”)修改成Circle
创建工程和场景
创建工程选择2d
导入素材一个圆圈一个针
创建文件夹写入脚本
将素材pin进行适当的调整,并导入到Main中
调节坐标,同时通过游戏界面来确认大小是否合适。
再调用一个圆的素材,放入到pin的素材中,调节圆的大小。
将pin拖拽到PerFabs文件夹中
对新建的圆进行碰撞实体化:Physics2D:Circle,并进行实际化的运行。
在源文件里加入一个新的脚本RotateSports
脚本中添加transform.Rotate(new Vector3(0,0,speed*Time.deltaTime);
(现在的旋转为逆时针)在speed前面加上“-”即可改为顺时针。
修改坐标x=0,y=1.7,z=0;
修改圆的大小:x=0.7,y=0.7;
于Main中建立一个新的UI:Canvas[Text(EvevtsSystem)]
修改影响的模式为World Code,将Text的字体修改成适当的大小和颜色,将Text的坐标修改到足以看得见的地方。
将Text中的文本格式调为居中(上下和左右),将文本与圆的坐标对齐。
给小球增加旋转效果:将Main Camera拖拽进Canvas中的Camera渲染系统中。
这里有个问题呀,
Color.Lerp(本身颜色,目标颜色,速度);
Mathf.Lerp(本身szie,目标size,速度);
Mathf.Abs(); 差值
IEnumerator