发阿飞安慰二五
发阿飞安慰二五
add gameManage script:
pin script:
creat three empty object(instance shoot)
1.Empty(shoot) : start point (0,0,0) ,
2.Empty(Instance) : spaw point(0, -5 , 0),
3.Empty(game manager)
needle
pin: imput , adjust scale color rotate
syring needle add to a "circle collider 2D"
1.script: control rotate
public float spped=90;
Updata transform . rotate (new vector3(0,0,-speed*time.deltatime;
1.import package
2.adjust maincamera background_faint yellow
transform.Rotate(new Vector3(0,0,s * Time.deltaTime)); //旋转自身
如果某些初学者的code无法跟着球旋转的话,可以用我的咯,先把isFly=false;后才运作,我的这个是可以运作的咯
如代码发现问题,可以尝试把speed去除直接写90
1.先找出关键代码。
这里的关键代码就是:朝着游戏物体“StartPoint”的位置移动
Vector3.MoveTowards(Vector3 current,Vector3 target,float maxDistanceDeita);
Vector3 .MoveTowards(将一个点current沿直线移动到一个target点)、Vector3 current(当前位置)、Vector3 target(目标位置)、float maxDistanceDeita(运动距离)。
2.逐步完善:
Vector3 current(当前位置):
很好理解,就是当前实例出来的“针”的位置,由于在脚本“GameManager”中已经确定了“spawnPoint.position”为实例位置,所以
当前位置就是游戏物体“SpawnPoint”的位置:
Vector3.MoveTowards(spawnPoint.position,Vector3 target,float maxDistanceDeita);
Vector3 target(目标位置):
目标位置就是在Scene窗口事先定好的“StartPoint”位置,由于当前脚本不在游戏物体“StartPoint”下,无法直接控制其transform,所以要先获取:
private Transform startPoint;
void Start()
{
startPoint=GameObject.Find("StartPoint").transform;
}
所以
Vector3.MoveTowards(spawnPoint.position,startPoint.position,float maxDistanceDeita);
float maxDistanceDeita(运动距离):
运动距离要根据速度来决定,所以要定义一个速度的变量:
public float speed = 5;
由于代码是在Update里,所以要考虑Time.deltaTime。
所以
Vector3.MoveTowards(spawnPoint.position,startPoint.position,speed*Time.deltaTime);
最后,把新的位置赋值给脚本所在的游戏物体(也就是针)的position:
transform.position = Vector3.MoveTowards(spawnPoint.position,startPoint.position,speed*Time.deltaTime);
3.总结起来就是(与教学视频不同,这里不加入if判定):
public float speed = 5;
private Transform startPoint;
void Start()
{
startPoint = GameObject.Find("StartPoint").transform;
}
void Update()
{
transform.position = Vector3.MoveTowards(spawnPoint.position,startPoint.position,speed*Time.deltaTime);
}
另外,用Vector3.Distance来判断针又没到到达目标位置:
Vector3.Distance(Vector3 a,Vector3 b);返回之间a和b的距离。
在Hierarchy窗口点击“Create”右边的小倒三角,在弹出的菜单中依次选择“UI”、“Text”,Hierarchy窗口新增“Canvas(帆布)”,其有一个子物体“Text”。
在Scene窗口可以发现,Canvas比相机的视野大很多,这是因为Canvas中1像素等于1米。
像素小研究:
导入制作并导入以下图像,放进Scene窗口:
1×1像素
10×10像素
100×100像素
1000×1000像素
10000×10000像素
观察可知:
Unity最小的网格是1×1像素,最大的网格是10万×10万像素;
按住CTRL移动物体,能连续移动的是100×100像素,即1米=100像素。
由像素小研究可以计算出,
默认相机视野约为(长×宽): (14*100+8*10-4*1)×(10*100)=1476×1000像素。
默认Canvas的大小约为(长×宽):(10*10000+2*1000+3*100)×(7*10000-1*1000+3*100)=102300×69300像素。
相机的长与宽之比:1476/1000=1.476
Canvas的长与宽之比:102300/69300=1.476
所以相机像素与Canvas之间有联系。
因为1米=100像素,所以Canvas的长宽分别是:1023米、693米。
所以
Canvas与相机的长之比:1476/1023=1.443(米/像素),
Canvas与相机的宽之比:1000/693=1.443(米/像素)。
所以Canvas的放大关系为每1.443米对应相机的1像素。
导入素材:把文件“Image.unitypackage”拖到Project窗口释放,会弹出“Import Unity Package”窗口,点击“Import”开始导入资源。
又到了最后一节课!到现在为止看了3篇练习了2次,最后关上视频还是不知从何开始?游戏管理器脚本和针头针身有何关系!针达到目又怎样判定,处理?有太多问题和操作细节是怎样流程.,等等.......
通过认真的思考,和查看笔记,总结了一副图:
这一副图是我所有记忆,也是我对视屏的总结。
Prefabs 预制体
private bool isfly =false;
pravate bool isReach = false;
pravate Transform start;
public float speed = 5;
在void start中:
start = GameObject.Find("start").transform;
在void Update中:
if(isfly == false){
if(isReach== false)
transform.position=Vector3.MoveToward(transform.position,start.position,speed*Time.deltaTime);
if(Vector3.Distance(transform.position,start.position)<0.05f)
{
isReach==true
}
}
}
設置一個空物體,名為start放在相機後面
再添加一個名為swan的空物體
private Transform start;
private Tansform swan;
public GameObject pinPrefab;
在void start中:
start =GameObject.Find("start").transform;
swan = GameObject.Find("swan").transform;
spawn();
void Spawn(){
GameObject.Instantiate(swan.position,pinPrefeb,transform.rotation);
}
圓形碰撞撞器circle collier2D
新建一個腳本void start 刪掉
public float speed =90
void Update(){
transform.Rotate(new Vector3(0,0,-speed*Time.deltaTime));
}
在UI,text中顯示分數
將相機的渲染模式改成word space
將相機的渲染拖入main camras
相機要放在ㄉㄜ˙下面