|
这里会记录下我跟学unity create with code 的时候碰到的问题以及学到的东西
如果你是跟着这个tutorial的学习的话才会看得懂
Prototype1:
学的功能:
1.官网提供了assets -> 如何import assets
2.如何移动player ->在 update funtion 里面 用c#来控制player的position,transform.Translate(),一般都是向z 轴移动。 速度有自己控制,可以设置一个速度variable,但是要乘一个Time.deltaTime 来保证unity实现的速度和自己想象的速度差不多。因为update 是每一个frame都会运行的,根据电脑的好坏,每一秒会循行的frame都是不一样的,如果不加这个deltaTime,假设速度为1m/s,每一秒运行20帧,那么unity里面显示出来的就是1秒前进20米
3.让camera 跟踪player
给camera 编一个c#,然后设置camera的position 和 player的position 一样,在加上一个camera 本来的position 从而使camera 可以看到player 且跟踪player
4.用户的interaction
用上下左右键来控制player的移动。首先就是用一个variable 来获取键盘的input,获取的input是一个数值,根据按键按的深浅来决定,比如向上键,这个值再0-1之间,按深浅来决定;向下键就是-1-0的值。把这个值跟translate的速度相关联,就可以改变translate的方向。左右也是这么做的
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
forwardInput = Input.GetAxis("Vertical");
// move vehicle forward
transform.Translate(Vector3.forward*Time.deltaTime*speed*forwardInput);
//transform.Translate(Vector3.right * Time.deltaTime * turnRightSpeed*horizontalInput);
transform.Rotate(Vector3.up, turnRightSpeed * horizontalInput * Time.deltaTime);
}
碰到的问题:
1.copy error
temp/assets.... error, 我google 了一下,三种解决方案: 不要保存 1)关闭不保存,然后重启 2)可能是virus protection的问题,把整个unity的folder 设置乘exclusions folder,就是杀毒软件不会查询这个文件夹 3)reimport,我是在写scripts的时候出现的这个错误,点击script 右键 reimport 也可以解决这个问题, 我最后选择的是第三种方法解决
2.prototype1-> tutorial->bonus feature
最后一个 local multiplayer game:
camera的问题
1)如果把所有camera都放在一个GameObject里面整理起来,camera的transform.position 会改变,会变大
2)设置了viewport rect,虽然可以分屏,分屏之前game view 看起来挺正常。但是在play mode 当中,就看起来很奇怪了
emmmmmm, 这个是因为我follow 了之前的tutorial 把 camera的position 设置成了player.position + offset 了
public class FollowPlayer : MonoBehaviour
{
public GameObject player;
private Vector3 offset;
private Vector3 playerZ;
// Start is called before the first frame update
void Start()
{
offset = transform.position;
}
// Update is called once per frame
void LateUpdate()
{
playerZ = new Vector3(0, 0, player.transform.position.z);
transform.position = playerZ + offset;
}
}
Prototype2
学到的功能:
1.prefabs
类似于一个variable,只要改变这个,其他用到这个variable的地方都会改变,只是prefab中存的都是objects。
2.学习如何按一个键就能发射出beam
其实主要学习的就是 Instantiate这个函数,每一次都会复制一个一样的object
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(projectilePrefab, transform.position, projectilePrefab.transform.rotation);
}3.如何随机的放怪物
首先要建立一个game object来管理随机放怪物的这个功能。
主要学习的是 InvokeRepeating 和random.range 两个函数,invoke reapting 会每隔一段时间就运行所输入的函数。
输入的函数是这样的:
在这个case里,所有要用到的怪物被放到一个gameObject array里面,然后用random.range随机产生一个int数,每一个数代表了一个怪物。最后在instantiate一个怪物。这样就好了
4.检测碰撞,detect collision
主要学习了OnTriggerEnter 和如何设置object使其可以检测碰撞
1)检测碰撞,在object里面add rigidbody,add box collider, box collider里面勾选is trigger(这是为了使用OnTriggerEnter)
2)OnTriggerEnter
就是在碰撞之后,需要运行的函数,我这里是输入了Debug.Log("game over!")
碰到的问题都在bonus feature里面,这里先记录一下没有完全解决:
1.bonus feature 3
可以运行起来,但是从左边来的怪物和从上面下来的怪物会有所碰撞,碰撞之后就都消失了
2.bonus feature 5
就是在动物身上加一个slider,只有射到了几次之后这个怪才会消失
暂时只学到prototype2 |
|